一、前言
之前在做appium自動化的時候,已經提到過unittest框架的基本概念、用例執行,以及BeautifulReport測試報告的簡單使用了(地址:https://www.cnblogs.com/Chilam007/p/12857102.html--強烈建議先看此文章哈,不然下面直接貼的程式碼估計會有點懵),這裡就不再贅述了,本文主要講下yagmail傳送郵件功能,當前前面已經講了po模式,所以是直接基於po模式的程式碼框架講的,包括後面的功能演練也都是基於po模式。
二、Yagmail傳送郵件
yagmail是python的一個第三方庫,yagmail庫極大地簡化了傳送郵件的程式碼,通過pip命令安裝(pip install yagmail),傳送郵件示例
import yagmail # 連線郵箱伺服器 yag = yagmail.SMTP(user="123@qq.com",password="12345",host='smtp.qq.com') # 郵件正文 contents = ["這是測試郵件傳送功能的郵件"] # 傳送郵件:如果想給多個使用者發,只需要把收件人放在一個list中即可;如果想傳送帶附件的郵件,只需要指定本地附件的路徑即可,也可以通過list指定多個附件 yag.send(['1234@qq.com','455@qq.com'],'subject',contents,["E://report.html"])
說明,郵件傳送需要準備以下幾個內容:
傳送人的賬號(如xxxxxxxx@qq.com)、授權碼(如yyyyyyyyyy),伺服器host(如qq郵箱的smtp.qq.com)
收件人賬號
郵件標題(可不要)
郵件內容(可不要)
郵件附件(可不要,提供附件的路徑即可)
注:
1. 傳送人的授權碼如何獲取?以QQ郵件為例(其他郵箱類似)
【qq郵箱——設定——賬戶——POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務——IMAP/SMTP服務——開啟】
2. 公共郵箱:新增埠號與smtp的屬性即可(詳細請百度解決)
三、自動傳送郵件功能整合自動化測試
上面說明了如何傳送郵件,現在演練下如何將自動化測試生成的報告傳送郵件,因為是基於前面講的po模式程式碼框架,所以這裡只講執行檔案。
整個程式的執行過程可以分為兩部分:
1、定義測試報告檔案,並賦值給變數html_report,通過BeautifulReport.report執行測試用例
2、呼叫send_mail()函式,並傳入html_report檔案,在send_mail函式中,將測試報告作為郵件的附件傳送到指定郵件
專案目錄
excute_cases.py
import unittest from BeautifulReport import BeautifulReport import datetime import yagmail # 把測試報告作為附件傳送到指定郵箱 def send_mail(report): yag = yagmail.SMTP(user="31696@qq.com", password="fuhhddjj", host='smtp.qq.com') subject = "自動化測試報告" contents = "自動化用例已執行完畢,詳細報告請檢視附件" yag.send('13789@163.com',subject,contents,report) print("郵件已經傳送成功!") if __name__ == '__main__': # 載入測試用例:指定E:\\08PyCharmProject\\Case1\\test_case目錄,“test*.py”匹配指定目錄下所有test開頭的.py檔案 test_suite = unittest.defaultTestLoader.discover('E:\\UI test\\UnittestProject\\TestCases', pattern='test*.py') # 獲取當前時間,用於命名測試報告標題 now = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') # 將用例加到物件中 result = BeautifulReport(test_suite) # report方法實現了用例的執行、用例執行結束的結果統計、生成測試報告等操作 # :filename -> 測試報告名稱, 如果不指定預設檔名為report.html,description -> 測試報告用例名稱展示,report_dir-> 報告檔案寫入路徑 result.report(filename='測試報告'+str(now), description='自動化測試', report_dir='E:\\UI test\\UnittestProject\\Report') html_report = './Report/測試報告'+str(now)+'.html' # 這個要注意要帶目錄路徑,如果直接附檔名,程式會找不到路徑 send_mail(html_report)