前言
實現需求:當測試用例全部通過的時候,不發郵件,當用例出現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")
res = is_result_pass()
print(res)
運行結果:
測試過程有不通過用例: 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("測試用例全部通過,不發送郵件")