精美可視化:Python自動化生成漂亮的測試報告
“ 運用Python的Unittest、數據驅動測試(DDT)、Excel、Jinja2和HTML技術,構建一個能夠自動生成精美可視化測試報告的自動化測試框架”
思路流程
-
封裝讀取數據,讓所有數據都能夠再excel中填寫,不再填寫任何一行邏輯代碼
-
通過unittest框架的discover()找到匹配的測試用例,由HTMLTestRunner的run()方法執行測試用例并生成最新的測試報告。
-
集成TestResult,增加一些獲取數據邏輯,將數據封存輸出,結合jinja2模板引擎,生成報告
-
將報告路徑及收集的結果參數傳給發送郵件,釘釘通知,企業微信通知的方法,再run用例結束后,自動發送數據到所需的位置
-
這里不展開對具體每一步得詳細介紹,直接結果導向開始講解。
1. 數據驅動測試(DDT):以數據為驅動的智慧
為了匹配框架使用,重新寫了類似ddt的裝飾器,結合用例名稱生成測試函數名稱,這樣就兼容了unittest的框架特性。核心代碼:
def list_data(datas):
"""
:param datas: Test data
:return:
"""
def wrapper(func):
setattr(func, "PARAMS", datas)
return func
return wrapper
def yaml_data(file_path):
"""
:param file_path:YAML file path
:return:
"""
def wrapper(func):
try:
with open(file_path, "r", encoding="utf-8") as f:
datas = yaml.load(f, Loader=yaml.FullLoader)
except:
with open(file_path, "r", encoding="gbk") as f:
datas = yaml.load(f, Loader=yaml.FullLoader)
setattr(func, "PARAMS", datas)
return func
return wrapper
2.unittest框架妙用:高度封裝精簡腳本代碼
將上述的裝飾器裝飾測試方法,通過多集成,、封裝及反射搗鼓一波,最終的執行腳本代碼,只有么關鍵是十來行了:
test_file = Config.TEST_CASE # 獲取 excel 文件路徑
excel = DoExcel(test_file)
test_case, databases, initialize_data, host = excel.get_excel_init_and_cases()
@ddt
class TestProjectApi(unittest.TestCase):
maxDiff = None
action = Action(initialize_data, databases)
@classmethod
def setUpClass(cls) -> None:
cls.action.load_modules_from_folder(extensions)
def setUp(self) -> None:
pass
@list_data(test_case)
def test_api(self, item):
sheet, iid, condition, st, name, desc, method, expected = self.action.base_info(item)
if self.action.is_run(condition):
self.skipTest("這個測試用例聽說泡面比較好吃,所以放棄執行了!!")
regex, keys, deps, jp_dict, ex_request_data = self.action.extractor_info(item)
self.action.pause_execution(st)
self.action.exc_sql(item)
if self.action.is_only_sql(method):
self.skipTest("這條測試用例被 SQL 吃了,所以放棄執行了!!")
# prepost_script = f"prepost_script_{sheet}_{iid}.py"
# item = self.action.load_and_execute_script(Config.SCRIPTS_DIR, prepost_script, "setup", item)
self.action.send_request(host, method, ex_request_data)
self.action.analysis_response(sheet, iid, name, desc, regex, keys, deps, jp_dict)
self.action.execute_validation(excel, sheet, iid, name, desc, expected)
@classmethod
def tearDownClass(cls) -> None:
excel.close_excel()
3.Excel王者:用例編寫快速簡單易過濾篩選
所有測試數據,填寫在excel中,需要評審的時候,直接將excel丟給開發,一勞永逸,excel的強大,可不是三言兩語能夠解釋清楚的,用例如下編寫
"""封裝讀取excel“""
...
sheets = eval(self.get_excel_init().get(FieldNames.SHEETS))
for sheet_name in sheets:
sheet = self.wb[sheet_name]
max_row = self.get_max_row(sheet)
max_column = self.get_max_column(sheet)
first_header = []
for i in range(1, max_column + 1):
first_header.append(sheet.cell(1, i).value)
for i in range(2, max_row + 1):
sub_data = {}
for k in range(1, max_column + 1):
sub_data[first_header[k - 1]] = sheet.cell(i, k).value
sub_data[FieldNames.SHEET] = sheet_name
yield sub_data
...
**4.記錄日志:整潔的日志記錄
**
用例在運行過程中,日志信息的輸出也是非常重要的一個環節,我們來看看日志的展示:
4. 生成美觀的HTML報告:多種樣式報告任君選擇
重寫優化了unittestReport的核心代碼,測試結果不再是枯燥的一串文字,而是以漂亮的HTML展示。報告中的每個測試用例都得到了詳盡的展示,包括輸入數據、預期輸出和實際結果,使得整個測試過程一目了然。
4.1 樣式一
4.2 樣式二
如上的報告,是不是很過癮,KPI考核又得一分
4.3 Excel中測試用例結果回顯記錄
5. 集成通知機制:釘釘、企業微信、郵件
生成美觀的測試報告,及時分享給團隊也是很有逼格的。通過SMTP庫、釘釘和企業微信等渠道,可以自動發送測試報告,還能夠確保團隊成員即時了解測試進展和結果,想發就發,想@就@。
郵件通知
釘釘通知
企業微信通知
閑話說一說:測試人只做測試專業的事就好(點點點.....),不要整天為配置`jenkins`掉頭發了,也不要一天到晚搜allure怎么配置,怎么修改啊,怎么又亂碼不顯示完整,又英文啥雜七雜八的而煩惱!!
彩蛋:對框架感興趣的小伙伴,加勇哥進群,群公告自取~
總結
以上就是勇哥今天為各位小伙伴準備的內容,如果你想了解更多關于Python自動化測試的知識和技巧,歡迎關注我:公眾號\博客\CSDN\B站:測試玩家勇哥;我會不定期地分享更多的精彩內容。感謝你的閱讀和支持!
題外話,勇哥打算把新建的技術交流群,打造成一個活躍的高質量技術群。工作中遇到的技術問題,都可以在里面咨詢大家,還有工作內推的機會。有興趣的小伙伴,歡迎加我(記得備注是進群還是報名學習)
長按上方二維碼2秒,關注我
勇哥,10年落魄測試老司機,技術棧偏python,目前在一家超大型房產公司擔任自動化測試主管,日常工作比較繁雜,主要負責自動化測試,性能測試、軟件質量管理及人員管理。工作之余專注于為粉絲進行簡歷修改、面試輔導、模擬面試、資料分享、一對一自動化測試教學輔導等副業發展。目前已服務十多位小伙伴,取得高薪offer。
關注公眾號,測試干貨及時送達
本文來自博客園,作者:測試玩家勇哥,轉載請注明原文鏈接:http://www.rzrgm.cn/Nephalem-262667641/articles/17641194.html

浙公網安備 33010602011771號