- 📢專注于分享軟件測試干貨內容,歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢交流討論:歡迎加入我們一起學習!
- 📢資源分享:耗時200+小時精選的「軟件測試」資料包
- 📢 最困難的時候,也就是我們離成功不遠的時候!
“ 運用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 funcreturn wrapperdef 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 funcreturn 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 = Noneaction = Action(initialize_data, databases)@classmethoddef 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)@classmethoddef 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).valuesub_data[FieldNames.SHEET] = sheet_nameyield sub_data
...
4.記錄日志:整潔的日志記錄
用例在運行過程中,日志信息的輸出也是非常重要的一個環節,我們來看看日志的展示:
4. 生成美觀的HTML報告:多種樣式報告任君選擇
重寫優化了unittestReport的核心代碼,測試結果不再是枯燥的一串文字,而是以漂亮的HTML展示。報告中的每個測試用例都得到了詳盡的展示,包括輸入數據、預期輸出和實際結果,使得整個測試過程一目了然。
4.1 樣式一
4.2 樣式二
如上的報告,是不是很過癮,KPI考核又得一分
4.3 Excel中測試用例結果回顯記錄
5. 集成通知機制:釘釘、企業微信、郵件
生成美觀的測試報告,及時分享給團隊也是很有逼格的。通過SMTP庫、釘釘和企業微信等渠道,可以自動發送測試報告,還能夠確保團隊成員即時了解測試進展和結果,想發就發,想@就@。
郵件通知
釘釘通知
企業微信通知
閑話說一說:測試人只做測試專業的事就好(點點點…),不要整天為配置jenkins
掉頭發了,也不要一天到晚搜allure怎么配置,怎么修改啊,怎么又亂碼不顯示完整,又英文啥雜七雜八的而煩惱!!
最后的分享
如果你想學習自動化測試,那么下面這套視頻應該會幫到你很多
如何逼自己1個月學完自動化測試,學完即就業,小白也能信手拈來,拿走不謝,允許白嫖....
最后我這里給你們分享一下我所積累和整理的一些文檔和學習資料,有需要直接領取就可以了!
以上內容,對于軟件測試的朋友來說應該是最全面最完整的備戰倉庫了,為了更好地整理每個模塊,我也參考了很多網上的優質博文和項目,力求不漏掉每一個知識點,很多朋友靠著這些內容進行復習,拿到了BATJ等大廠的offer,這個倉庫也已經幫助了很多的軟件測試的學習者,希望也能幫助到你。