python接口自動化(二十九)--html測試報告經過郵件發出去——上(詳解)

簡介

  前邊幾篇,已經教小夥伴們掌握瞭如何生成HTML的測試報告,那麼生成測試報告,咱們也不能放在那裏無論了,這樣即便你報告在漂亮,領導也看不到。所以若是想向領導彙報工做,不只須要提供更直觀的測試報告。而是咱們須要將生html

成測試報告發個相關的負責人,須要他們看一下測試結果,把控一下項目的接口有風險,會不會影響項目進度等等一些事吧。python

  發郵件須要用到python兩個模塊,smtplib和email,這倆模塊是python自帶的,只需import便可使用。smtplib模塊主要負責發送郵件,email模塊主要負責構造郵件。其中MIMEText()定義郵件正文,Header()定義郵件標題。MIMEMulipart模塊構造帶附件。數組

大體思路流程

一、經過unittest框架的discover()找到匹配的測試用例,由HTMLTestRunner的run()方法執行測試用例並生成最新的測試報告。服務器

二、調用new_report()函數找到測試報告目錄下最新生成的測試報告,返回測試報告的路徑。框架

三、將獲得的最新測試報告的完整路徑傳給send_mail()函數,實現發郵件功能。函數

四、第一步,前邊幾篇,咱們都詳細介紹了,因此這篇就不在贅述了,直接從第二步、第三步開始講解。學習

查找最新測試報告 

 

定義發送郵件

一、查看一下,源碼以下:測試

二、仿照源碼進行改造ui

參考代碼

# coding=utf-8 #1.先設置編碼,utf-8可支持中英文,如上,通常放在第一行 #2.註釋:包括記錄建立時間,建立人,項目名稱。 ''' Created on 2019-5-6 @author: 北京-宏哥 Project:學習和使用將測試報告經過郵件發出去 ''' #3.導入unittest模塊 import unittest import os from email.mime.text import MIMEText from email.header import Header import smtplib #4.編寫測試用例和斷言 def all_case(): # 待執行用例的目錄 #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方法篩選出用例,循環添加到測試套件中 # for test_suit in discover: # for test_case in test_suit: # #添加用力到testcase # testcase.addTests(test_case) # print(testcase) testcase.addTests(discover) # 直接加載 discover 能夠兼容python2和3 print(testcase) return testcase # ==============定義發送郵件========== def send_mail(file_new): f = open(file_new, 'rb') mail_body = f.read() f.close() username = 'nXXply@ceXXx.cn' #發件箱用戶名 password = 'XXX@@123' #發件箱密碼 sender = 'noXXy@ceXXx.cn' #發件人郵箱 receiver = ['hongge@XXX.cn'] #收件人郵箱 # 郵件正文是MIMEText msg = MIMEText(mail_body, 'html', 'utf-8') # 郵件對象 msg['Subject'] = Header("自動化測試報告", 'utf-8').encode() msg['From'] = Header(u'測試機 <%s>'%sender) msg['To'] = Header(u'測試負責人 <%s>'%receiver) msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z") #發送郵件 smtp = smtplib.SMTP() smtp.connect('smtp.mxhichina.com') # 郵箱服務器 smtp.login(username, password) # 登陸郵箱 smtp.sendmail(sender, receiver, msg.as_string()) # 發送者和接收者 smtp.quit() print("郵件已發出!注意查收。") # ======查找測試目錄,找到最新生成的測試報告文件====== def new_report(test_report): lists = os.listdir(test_report) # 列出目錄的下全部文件和文件夾保存到lists lists.sort(key=lambda fn: os.path.getmtime(test_report + "\\" + fn)) # 按時間排序 file_new = os.path.join(test_report, lists[-1]) # 獲取最新的文件保存到file_new print(file_new) return file_new if __name__ == "__main__": # 返回實例 runner = unittest.TextTestRunner() #導入第三方模塊HTMLTestRunner import HTMLTestReportCN import time # 獲取當前時間,這樣便於下面的使用。 now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time())) #保存生成報告的路徑 report_path =  "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\"+now+"_result.html" fp = open(report_path,'wb') runner = HTMLTestReportCN.HTMLTestRunner(stream=fp, title=u"這是個人自動化測試用例", description=u"用例執行狀況", verbosity = 2 ) # run 全部用例 runner.run(all_case()) #關閉文件,記住用open()打開文件後必定要記得關閉它,不然會佔用系統的可打開文件句柄數。 fp.close() #測試報告文件夾 test_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\" new_report = new_report(test_path) send_mail(new_report) # 發送測試報告

小結

一、遇到的問題及解決方法編碼

(1)將生成的測試報告的保存路徑和查找測試報告的路徑混淆會報以下錯誤

(2)解決方法

a、咱們先來分析一下緣由,剛開始我查了資料還以爲是否是數組越界,後來感受不對,就複製粘貼到個人電腦報以下錯誤,確實找不到

b、接着Ctrl+R複製進去,運行出現以下這是才知道查找最新的測試報告遍歷的根本不是一個目錄而是一個文件

 

c、解決辦法不是文件夾修改爲測試報告的文件夾是否是就能夠,作以下簡單地修改就能夠了

d、完了把test_path拷貝在我電腦和運行處,兩個界面同樣分別定位到測試報告。這樣就能夠遍歷,這是不用試 必定能夠成功分別以下:

個人電腦

 

運行

e、代碼運行結果

f、到收件箱能夠看到測試報告

 二、發送的郵件看不到發件人和收件人,如圖

 a、解決辦法:

加兩行代碼便可

b、再次運行收到郵件

 

原文出處:https://www.cnblogs.com/du-hong/p/10812533.html

相關文章
相關標籤/搜索