Unittest單元測試框架——BeautifulReport測試報告和Yagmail自動傳送郵件

一加一發表於2021-05-06

一、前言

之前在做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)

 

相關文章