python接口自動(dòng)化(三十)--html測(cè)試報(bào)告通過(guò)郵件發(fā)出去——中(詳解)

簡(jiǎn)介

  上一篇颈嚼,我們雖然已經(jīng)將生成的最新的測(cè)試報(bào)告發(fā)出去了怜械,但是MIMEText 只能發(fā)送正文,無(wú)法帶附件弄抬,因此我還需要繼續(xù)改造我們的代碼茎辐,實(shí)現(xiàn)可以發(fā)送帶有附件的郵件。發(fā)送帶附件的需要導(dǎo)入另外一個(gè)模塊 MIMEMultipart。還有就是測(cè)

試負(fù)責(zé)人不止一個(gè)人拖陆,需要將測(cè)試報(bào)告發(fā)給多個(gè)人弛槐,也就是多個(gè)收件人。這篇主要是圍繞這兩個(gè)主題進(jìn)行講解的依啰。

?大致思路

(一)帶有附件發(fā)送郵件

1乎串、導(dǎo)入模塊 MIMEMultipart

fromemail.mime.multipart import MIMEMultipart

2、先讀取要發(fā)送文件的內(nèi)容速警,file_new 是測(cè)試報(bào)告路徑的參數(shù)名

3叹誉、下圖紅色框框 file_name 參數(shù)是發(fā)送的附件重新命名

4、file_new 是測(cè)試報(bào)告路徑的參數(shù)名坏瞄,發(fā)送郵件是將其傳入

5桂对、運(yùn)行結(jié)果

6、查看收件箱

(二)發(fā)送給多個(gè)收件人

上面都是發(fā)給一個(gè)收件人鸠匀,那么如何一次發(fā)給多個(gè)收件人呢蕉斜?其實(shí)是非常簡(jiǎn)單的,只需改兩個(gè)小地方缀棍,即可宅此,從這里就可以看出python的強(qiáng)大之處。

1爬范、源碼

2父腕、仿造修改

3、運(yùn)行結(jié)果

4青瀑、收件箱查看

公司郵箱



QQ郵箱


參考代碼

# coding=utf-8#1.先設(shè)置編碼璧亮,utf-8可支持中英文,如上斥难,一般放在第一行

#2.注釋?zhuān)喊ㄓ涗泟?chuàng)建時(shí)間枝嘶,創(chuàng)建人,項(xiàng)目名稱(chēng)哑诊。'''Created on2019-5-7@author: 北京-宏哥

Project:學(xué)習(xí)和使用將測(cè)試報(bào)告通過(guò)郵件發(fā)出去且郵件帶有附件'''#3.導(dǎo)入unittest模塊

import unittest

import osfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Header

import smtplib

#4.編寫(xiě)測(cè)試用例和斷言

def all_case():

? ? # 待執(zhí)行用例的目錄

? ? #case_dir ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"? ? case_dir = os.path.join(os.getcwd(),"case")

? ? testcase = unittest.TestSuite()

? ? discover = unittest.defaultTestLoader.discover(case_dir,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pattern="test*.py",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? top_level_dir=None)

? ? # #discover方法篩選出用例群扶,循環(huán)添加到測(cè)試套件中

? ? # fortest_suitin discover:

? ? #? ? fortest_casein test_suit:

? ? #? ? ? ? #添加用力到testcase

? ? #? ? ? ? testcase.addTests(test_case)

? ? # print(testcase)

? ? testcase.addTests(discover)? # 直接加載 discover? ? 可以兼容python2和3

? ? print(testcase)

? ? return testcase

# ==============定義發(fā)送郵件==========def send_mail(file_new):

? ? #-----------1.跟發(fā)件相關(guān)的參數(shù)------? ? smtpserver ='smtp.mxhichina.com'? ? ? ? ? ? ? ? #發(fā)件服務(wù)器

? ? port =0? ? ? ? ? ? ? ? ? ? ? #端口

? ? username ='nXXX@ceXx.cn'? #發(fā)件箱用戶(hù)名

? ? password ='ceXXx@@123'? ? ? ? #發(fā)件箱密碼

? ? sender ='XXly@cedex.cn'? ? #發(fā)件人郵箱

? ? receiver = ['hongge@com.cn','1918991791@qq.com'] #收件人郵箱

? ? # ----------2.編輯郵件的內(nèi)容------? ? #讀文件

? ? f = open(file_new,'rb')

? ? mail_body = f.read()

? ? f.close()

? ? # 郵件正文是MIMEText

? ? body = MIMEText(mail_body,'html','utf-8')

? ? # 郵件對(duì)象

? ? msg = MIMEMultipart()

? ? msg['Subject'] = Header("自動(dòng)化測(cè)試報(bào)告",'utf-8').encode()#主題

? ? msg['From'] = Header(u'測(cè)試機(jī) <%s>'%sender)? ? ? ? ? ? ? ? #發(fā)件人

? ? msg['To'] = Header(u'測(cè)試負(fù)責(zé)人 <%s>'%receiver)? ? ? ? ? ? #收件人

? ? msg['To'] =';'.join(receiver)

? ? msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z")

? ? msg.attach(body)

? ? # 附件

? ? att = MIMEText(mail_body,"base64","utf-8")

? ? att["Content-Type"] ="application/octet-stream"? ? att["Content-Disposition"] ='attachment; filename="test_report.html"'? ? msg.attach(att)

? ? # ----------3.發(fā)送郵件------try:

? ? ? ? smtp = smtplib.SMTP()

? ? ? ? smtp.connect(smtpserver)? # 連服務(wù)器

? ? ? ? smtp.login(sender, password)

? ? except:

? ? ? ? smtp = smtplib.SMTP_SSL(smtpserver, port)

? ? ? ? smtp.login(sender, password)? # 登錄

? ? smtp.sendmail(sender, receiver, msg.as_string())? # 發(fā)送

? ? smtp.quit()

? ? # #發(fā)送郵件

? ? # smtp = smtplib.SMTP()

? ? # smtp.connect('smtp.mxhichina.com')? # 郵箱服務(wù)器

? ? # smtp.login(username, password)? # 登錄郵箱

? ? # smtp.sendmail(sender, receiver, msg.as_string())? # 發(fā)送者和接收者

? ? # smtp.quit()

? ? print("郵件已發(fā)出!注意查收镀裤。")

# ======查找測(cè)試目錄竞阐,找到最新生成的測(cè)試報(bào)告文件======def new_report(test_report):

? ? lists = os.listdir(test_report)? # 列出目錄的下所有文件和文件夾保存到lists

? ? lists.sort(key=lambda fn: os.path.getmtime(test_report +"\\"+ fn))? # 按時(shí)間排序

? ? file_new = os.path.join(test_report, lists[-1])? # 獲取最新的文件保存到file_new

? ? print(file_new)

? ? return file_newif__name__ =="__main__":

? ? # 返回實(shí)例

? ? runner = unittest.TextTestRunner()

? ? #導(dǎo)入第三方模塊HTMLTestRunner

? ? import HTMLTestReportCN

? ? import time

? ? # 獲取當(dāng)前時(shí)間,這樣便于下面的使用暑劝。

? ? now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))

? ? #保存生成報(bào)告的路徑

? ? report_path ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\"+now+"_result.html"? ? fp = open(report_path,'wb')

? ? runner = HTMLTestReportCN.HTMLTestRunner(stream=fp,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? title=u"這是我的自動(dòng)化測(cè)試用例",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? description=u"用例執(zhí)行情況",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? verbosity =2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )

? ? # run 所有用例

? ? runner.run(all_case())

? ? #關(guān)閉文件骆莹,記住用open()打開(kāi)文件后一定要記得關(guān)閉它,否則會(huì)占用系統(tǒng)的可打開(kāi)文件句柄數(shù)铃岔。

? ? fp.close()

? ? #測(cè)試報(bào)告文件夾

? ? test_path ="C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\"? ? new_report = new_report(test_path)

? ? send_mail(new_report)? # 發(fā)送測(cè)試報(bào)告

小結(jié)

?1汪疮、第二處我注釋掉也可以發(fā)出去峭火,兩個(gè)收件人可以收到郵件,但是如果這樣的話(huà)智嚷,公司郵箱收件人只顯示一個(gè)收件人卖丸,QQ郵箱顯示兩個(gè)收件人。

公司郵箱? ? PS:如果將紅色框上邊的注釋掉盏道,下邊的不注釋?zhuān)涂梢钥吹絻蓚€(gè)收件人的郵箱


?以下是個(gè)人愚見(jiàn)稍浆,如果不對(duì)請(qǐng)指出

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import smtplib

以上是導(dǎo)入的包,通過(guò)email和smtplib實(shí)現(xiàn)發(fā)郵件猜嘱。

折騰好久衅枫,發(fā)現(xiàn)是這樣:email中收件人和sendmail中的收件人是沒(méi)啥聯(lián)系的。

mail_to = ['test1@exp.com','test2@exp.com']

server = smtplib.SMTP()

server.connect()

server.sendmail(mail_from,?mail_to, msg.as_string())

server.quit()

mail_to = 'test1@exp.com,test2@exp.com'

msg = MIMEMultipart('related') ##采用related定義內(nèi)嵌資源的郵件體

msgtext = MIMEText(content,_subtype='html',_charset='utf-8') ##_subtype有plain,html等格式朗伶,避免使用錯(cuò)誤

msg['Subject'] = subject

msg['From'] = mail_from

msg['To']?=mail_to

sendmail中收件人弦撩,它的格式應(yīng)該為list。這個(gè)為實(shí)際的收件人地址论皆。

而msg['To'] 格式是字符串(str)益楼。這個(gè)只是為了郵件中打印出來(lái)而已。

sendmail查源碼点晴,python/lib/smtplib.py大概690行左右感凤,或者搜索tolist。

2粒督、在使用python添加附件發(fā)送時(shí)報(bào)錯(cuò):Cannot attach additional subparts to non-multipart/*?

查詢(xún)得知陪竿,錯(cuò)誤的原因在于缺少這行代碼:

msg = MIMEMultipart()?

將這行加上:msg = MIMEMultipart() 即可

?郵件收不到的幾種原因

1、Subject 和正文內(nèi)容不要用 hello屠橄、hehe族跛、test 等單詞

2、from(發(fā)件人)和 to(收件人)不要為空锐墙,(要不然會(huì)被認(rèn)為是垃圾郵件)

3庸蔼、找不到的話(huà),先看下垃圾信箱贮匕,是不是跑到垃圾箱了

4、如果前幾次可以收到花枫,后來(lái)收不到了刻盐,需改下 subject 內(nèi)容(因?yàn)槊看味际且粋€(gè) subject,系統(tǒng)也會(huì)拒收的劳翰,把 subject 內(nèi)容設(shè)置為動(dòng)態(tài)的是最好的)

5敦锌、部分郵箱是 ssl 加密了的,所以無(wú)法發(fā)送佳簸,如:qq 郵箱(用授權(quán)碼去登錄)

6乙墙、要是按照上面的步驟來(lái)報(bào)錯(cuò)了颖变,說(shuō)明代碼抄錯(cuò)了,多檢查幾次听想。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腥刹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子汉买,更是在濱河造成了極大的恐慌衔峰,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛙粘,死亡現(xiàn)場(chǎng)離奇詭異垫卤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)出牧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)穴肘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人舔痕,你說(shuō)我怎么就攤上這事评抚。” “怎么了赵讯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵盈咳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我边翼,道長(zhǎng)鱼响,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任组底,我火速辦了婚禮丈积,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘债鸡。我一直安慰自己江滨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布厌均。 她就那樣靜靜地躺著唬滑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棺弊。 梳的紋絲不亂的頭發(fā)上晶密,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音模她,去河邊找鬼稻艰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侈净,可吹牛的內(nèi)容都是我干的尊勿。 我是一名探鬼主播僧凤,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼元扔!你這毒婦竟也來(lái)了躯保?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤摇展,失蹤者是張志新(化名)和其女友劉穎吻氧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體咏连,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盯孙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祟滴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片振惰。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垄懂,靈堂內(nèi)的尸體忽然破棺而出骑晶,到底是詐尸還是另有隱情,我是刑警寧澤草慧,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布桶蛔,位于F島的核電站,受9級(jí)特大地震影響漫谷,放射性物質(zhì)發(fā)生泄漏仔雷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一舔示、第九天 我趴在偏房一處隱蔽的房頂上張望碟婆。 院中可真熱鬧,春花似錦惕稻、人聲如沸竖共。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)公给。三九已至,卻和暖如春蜘渣,著一層夾襖步出監(jiān)牢的瞬間妓布,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工宋梧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狰挡。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓捂龄,卻偏偏與公主長(zhǎng)得像释涛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倦沧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容