Python自動化生成漂亮的測試報告

  • 📢專注于分享軟件測試干貨內容,歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
  • 📢交流討論:歡迎加入我們一起學習!
  • 📢資源分享:耗時200+小時精選的「軟件測試」資料包
  • 📢 最困難的時候,也就是我們離成功不遠的時候!


“ 運用Python的Unittest、數據驅動測試(DDT)、Excel、Jinja2和HTML技術,構建一個能夠自動生成精美可視化測試報告的自動化測試框架”

思路流程

  1. 封裝讀取數據,讓所有數據都能夠再excel中填寫,不再填寫任何一行邏輯代碼
  2. 通過unittest框架的discover()找到匹配的測試用例,由HTMLTestRunner的run()方法執行測試用例并生成最新的測試報告。
  3. 集成TestResult,增加一些獲取數據邏輯,將數據封存輸出,結合jinja2模板引擎,生成報告
  4. 將報告路徑及收集的結果參數傳給發送郵件,釘釘通知,企業微信通知的方法,再run用例結束后,自動發送數據到所需的位置
  5. 這里不展開對具體每一步得詳細介紹,直接結果導向開始講解。

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,這個倉庫也已經幫助了很多的軟件測試的學習者,希望也能幫助到你。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167648.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

五種多目標優化算法(MOJS、NSGA3、MOGWO、NSWOA、MOPSO)求解微電網多目標優化調度(MATLAB代碼)

一、多目標優化算法簡介 (1)多目標水母搜索算法MOJS 多目標優化算法:多目標水母搜索算法MOJS(提供MATLAB代碼)_水母算法-CSDN博客 (2)NSGA3 NSGA-III求解微電網多目標優化調度(M…

acwing算法基礎之數學知識--求卡特蘭數

目錄 1 基礎知識2 模板3 工程化 1 基礎知識 題目:給定n個0和n個1,它們將按照某種順序排成長度為2n的序列,求它們能排成的所有序列中,能夠滿足任意前綴序列中0的個數都不少于1的個數的序列有多少個? 輸出的答案對 1 0 …

【云原生 Prometheus篇】Prometheus的動態服務發現機制與認證配置

目錄 一、Prometheus服務發現的方式1.1 基于文件的服務發現1.2 基于consul的服務發現1.3 基于 Kubernetes API 的服務發現1.3.1 簡介1.3.2 基于Kurbernetes發現機制的部分配置參數 二、實例一:部署基于文件的服務發現2.1 創建用于服務發現的文件2.2 修改Prometheus的…

yo!這里是c++11重點新增特性介紹

目錄 前言 列表初始化 { }初始化 initializer_list類 類型推導 auto decltype 范圍for 右值引用與移動語義 左值引用和右值引用 移動語義 1.移動構造 2.移動賦值 3.stl容器相關更新 右值引用和萬能引用 完美轉發 關鍵字 default delete final和override …

西米支付:簡單介紹一下支付公司的分賬功能體系

隨著互聯網的普及和電子商務的快速發展,支付已經成為人們日常生活的重要組成部分。支付公司作為第三方支付平臺,為消費者和商家提供了便捷、安全的支付方式。而在支付領域中,分賬功能是一個非常重要的功能,它可以幫助企業實現資金…

SpringBoot——攔截器

優質博文:IT-BLOG-CN 一、登錄時可能會出現重復提交問題。我們可以通過重定向解決此問題。例如:用戶提交的請求為:/user/login,通過redirect:重定向至 main.html請求。 PostMapping("/user/login") public …

C語言——從終端(鍵盤)將 5 個整數輸入到數組 a 中,然后將 a 逆序復制到數組 b 中,并輸出 b 中 各元素的值。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int a[5];int b[5];printf("輸入5個整數&#xff1a;\n");for(i0;i<5;i){scanf("%d",&a[i]);}printf("數組b的元素值為&#xff1a;\n");for(i4;i>0;i--…

Windows任務管理器內存性能界面各個參數含義

任務管理器的內存性能界面提供了一些關鍵參數&#xff0c;這些參數可以幫助你了解系統中內存的使用情況。以下是一些常見的參數及其含義&#xff1a; 已提交&#xff08;Committed&#xff09;&#xff1a; 表示已分配的物理內存和虛擬內存的總和。已提交的內存包括當前正在使…

Javascript每天一道算法題(十五)——輪轉數組_中等(一行解決輪轉數組)

文章目錄 1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——while遍歷&#xff08;較為復雜&#xff0c;不推薦&#xff09;&#xff08;2&#xff09;方法2&#xff08;直接截取后插入&#xff0c;推薦&#xff09;&#xff08;3&#xff09;方法3——優化方法2&a…

jQuery_03 dom對象和jQuery對象的互相轉換

dom對象和jQuery對象 dom對象 jQuery對象 在一個文件中同時存在兩種對象 dom對象: 通過js中的document對象獲取的對象 或者創建的對象 jQuery對象: 通過jQuery中的函數獲取的對象。 為什么使用dom或jQuery對象呢&#xff1f; 目的是 要使用dom對象的函數或者屬性 以及呢 要…

python -opencv 輪廓檢測(多邊形,外接矩形,外接圓)

python -opencv 輪廓檢測(多邊形&#xff0c;外接矩形&#xff0c;外接圓) 邊緣檢測步驟: 第一步&#xff1a;讀取圖像為灰度圖 第二步&#xff1a;進行二值化處理 第三步&#xff1a;使用cv2.findContours對二值化圖像提取輪廓 第三步&#xff1a;將輪廓繪制到圖中 代碼如下…

Hibernate的三種狀態

1.瞬時狀態(Transient) 通過new創建對象后&#xff0c;對象并沒有立刻持久化&#xff0c;他并未對數據庫中的數據有任何的關聯&#xff0c;此時java對象的狀態為瞬時狀態&#xff0c;Session對于瞬時狀態的java對象是一無所知的&#xff0c;當對象不再被其他對象引用時&#xf…

【TL431+場效應管組成過壓保護電路】2022-3-22

緣由這個穩壓三極管是構成的電路是起到保護的作用嗎&#xff1f;-硬件開發-CSDN問答

HTML5+ API 爬坑記錄

背景: 有個比較早些使用5開發的項目, 最近兩天反饋了一些問題, 解決過程在此記錄; 坑1: plus.gallery.pick 選擇圖片沒有進入回調 HTML5 API Reference 在 聯想小新 平板電腦上選擇相冊圖片進行上傳時, 打開相冊瞬間 應用會自動重啟, 相冊倒是有打開, 不過應用重啟了, 導…

使用正則表達式來判斷一個字符串只是否包含數字

使用正則表達式來判斷一個字符串只是否包含數字 1、第一種 import java.util.regex.Pattern;public class Main {public static void main(String[] args) {String inputString "12345";if (containsOnlyDigits(inputString)) {System.out.println("字符串只…

文件url 轉File

// param url : http://xxx.xxx.xx.jpg public static File getFile(String url) throws Exception {//對本地?件命名String fileName url.substring(url.lastIndexOf("."),url.length());File file null;URL urlfile;InputStream inStream null;OutputStream os…

[原創](免改BIOS)使用Clover升級舊電腦-(高階玩法)讓固態硬盤內置Win11 PE啟動系統

[簡介] 常用網名: 豬頭三 出生日期: 1981.XX.XXQQ: 643439947 個人網站: 80x86匯編小站 https://www.x86asm.org 編程生涯: 2001年~至今[共22年] 職業生涯: 20年 開發語言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 開發工具: Visual Studio、Delphi…

【算法專題】滑動窗口—無重復字符的最長子串

力扣題目鏈接&#xff1a;無重復字符的最長子串 一、題目解析 二、算法原理 解法一&#xff1a;暴力解法&#xff08;時間復雜度最壞&#xff1a;O(N)&#xff09; 從每一個位置開始往后枚舉&#xff0c;在往后尋找無重復最長子串時&#xff0c;可以利用哈希表來統計字符出現…

手機APP-MCP走藍牙無線遙控智能安全帽~執法記錄儀~拍照錄像,并可做基礎的配置,例如修改服務器IP以及配置WiFi等

手機APP-MCP走藍牙無線遙控智能安全帽~執法記錄儀~拍照錄像,并可做基礎的配置,例如修改服務器IP以及配置WiFi等 手機APP-MCP走藍牙無線遙控智能安全帽~執法記錄儀~拍照錄像,并可做基礎的配置,例如修改服務器IP以及配置WiFi等&#xff0c; AIoT萬物智聯&#xff0c;智能安全帽…

Java 文件操作

文章目錄 Java 文件操作構造方法文件屬性操作文件內容操作InputStreamReaderOutputStreamWriter 更多案例文件查找普通文件的復制 Java 文件操作 Java 中通過 java.io.File 類來對文件進行描述。 構造方法 構造方法說明File(String pathname)通過路徑名字符串來創建 File 實…