1. 程式人生 > >selenium+python自動化89-用例不通過的時候發送郵件

selenium+python自動化89-用例不通過的時候發送郵件

exception 試用 一個 sel send post ttr htm ima

前言

實現需求:當測試用例全部通過的時候,不發郵件,當用例出現Error或Failure的時候發送郵件

解決思路:生成html測試報告後,用bs4解析html頁面,寫個函數判斷頁面上是都有不通過的記錄

html報告

1.查看html報告,主要看Status這一行是否會出現Failure 或 Error 的記錄

技術分享圖片

bs4解析html

1.bs4模塊在我的博客上上海-悠悠之前有過介紹,就不重復寫了,先定位html頁面元素,先通過它的class屬性:attribute定位到這三行記錄

技術分享圖片

2.取出最後一行,然後讀出文本內容。

# coding:utf-8
from bs4 import BeautifulSoup

# 打開html文件,讀取報告內容
with open("result.html", "r") as fp:
    f = fp.read()  # 讀報告

# 解析html,查找class屬性attribute
soup = BeautifulSoup(f, "html.parser")
status = soup.find_all(class_="attribute")

# 打印查找內容
print(status)

print("qq交流群:226296743")
result = status[2].contents[-1]  # 獲取報告結果
print(result)

運行結果:

[<p class="attribute"><strong>Start Time:</strong> 2018-01-18 16:35:49</p>, <p class="attribute"><strong>Duration:</strong> 0:00:00</p>, <p class="attribute"><strong>Status:</strong> Pass 2 Failure 1 Error 1</p>]
qq交流群:226296743
 Pass 2 Failure 1 Error 1

技術分享圖片

寫個判斷函數

1.對結果判斷,寫個判斷是否有失敗用例的函數

 # coding:utf-8
from bs4 import BeautifulSoup

import sys
reload(sys)
sys.setdefaultencoding('utf8')

def is_result_pass():
    try:
        with open("result.html", "r") as fp:
            f = fp.read()  # 讀報告
        soup = BeautifulSoup(f, "html.parser")
        status = soup.find_all(class_="attribute")
        result = status[2].contents[-1] # 獲取報告結果
        if "Failure" in result or "Error" in result:
            print("測試過程有不通過用例:%s"%result)
            return False
        else:
            return True
    except Exception as msg:
        print("判斷過程出現異常:%s"%str(msg))
        return False

if __name__ == "__main__":
    print("qq交流群:226296743")
    print(is_result_pass())

運行結果:

測試過程有不通過用例: Pass 2 Failure 1 Error 1
False

2.在最後發郵件之前加個判斷

 if not is_result_pass():
        # 判斷html報告是否有報錯
        
        # 執行發送郵件函數,自己寫一個發郵件函數
        # send_mail(sender, psw, receiver, smtp_server, report_file)
        
    else:
        print("測試用例全部通過,不發送郵件")

selenium+python自動化89-用例不通過的時候發送郵件