基于 Jenkins 的測試報告獲取與處理并寫入 Jira Wiki 的技術總結

title: 基于 Jenkins 的測試報告獲取與處理并寫入 Jira Wiki 的技術總結
tags: 
- jenkins
- python
categories:
- jenkins

在軟件開發的持續集成與持續交付(CI/CD)流程里,及時、準確地獲取并分析測試報告對保障軟件質量至關重要。本文將詳細闡述如何借助 Jenkins 搭建自動化系統,實現批量觸發測試任務、獲取測試報告關鍵信息并寫入 Jira Wiki 的全流程自動化,為技術同行提供技術參考與實踐經驗。

一、功能實現概述

批量任務觸發與結果等待

借助jenkins庫,通過run_jenkins_task函數實現批量觸發 Jenkins 測試自動化任務。關鍵代碼如下:

import asyncioasync def run_jenkins_task(env,testNG_job_name_dict,sosotest_job_name_dict,robot_job_name_dict):job_names = testNG_job_name_dict.get(env, [])testNG_results, sosotest_results, robot_results = await asyncio.gather(*[trigger_and_get_result(server, job_name) for job_name in job_names],* [trigger_and_get_result(sosotest_server, job_name, sosotest_params) for job_name,sosotest_params in sosotest_job_name_dict.items()],*[trigger_and_get_result(sosotest_server, job_name, sosotest_params) for job_name,sosotest_params in robot_job_name_dict.items()],return_exceptions=True)return testNG_results, sosotest_results, robot_results

該函數根據不同環境(如gray、cd等)和任務類型(testNG、sosotest、robot),批量觸發對應的 Jenkins 任務。利用asyncio.gather并發執行任務,極大提高了執行效率。執行過程中,程序會等待所有任務完成,獲取每個任務的執行結果,確保后續處理基于完整的任務數據 。

測試報告關鍵信息提取

針對testNG、sosotest和robot三種不同類型的測試報告,分別編寫get_testNG_report、get_sosotest_report和get_robot_report函數,運用正則表達式提取關鍵信息。以get_testNG_report函數為例:

import re
import requestsdef get_testNG_report(testReport_url):report_info={}report_info['testReport_url'] = testReport_urltry:res = requests.get(testReport_url)if res.status_code == 200:failures_pattern = r'(\d+) failures'failures_match = re.search(failures_pattern, res.text)if failures_match:failures = int(failures_match.group(1))else:failures = 0tests_pattern = r'(\d+) tests'tests_match = re.search(tests_pattern, res.text)if tests_match:tests = int(tests_match.group(1))else:tests = 0success_num = tests - failuresif tests!= 0:success_rate = "{:.2%}".format(success_num / tests)report_info['success_rate'] = success_ratereport_info['success_num'] = success_numreport_info['failures'] = failuresreport_info['tests'] = testselse:print(f"請求失敗,狀態碼: {res.status_code}")except requests.RequestException as e:print(f"請求時發生異常: {e}")return report_info

此函數通過requests庫獲取測試報告頁面內容,然后使用正則表達式匹配(\d+) failures和(\d+) tests,分別提取失敗次數和測試總次數,進而計算成功次數和成功率。針對不同類型報告,通過調整正則表達式,精準提取出報告執行數、成功率、失敗數等關鍵信息。

信息組裝與 Jira Wiki 寫入

利用assembly_content函數將提取的關鍵信息組裝成特定格式的 HTML 表格內容,再通過與 Jira API 交互的函數將其寫入 Jira Wiki。assembly_content函數核心代碼如下:

def assembly_content(content_list):content_header = f'''<table class=\"wrapped confluenceTable\" style=\"width: 2093.0px;\"><!-- 省略表格頭部詳細定義 --></tr>'''content_body = ""for value in content_list:content_body += f'''<tr><td class=\"confluenceTd\" style=\"width: 208.0px;\" rowspan=\"3\">{value['functional_domain']}</td>'''for key1, value1 in value.items():if key1 == "functional_domain":continuevalue1 = {} if value1 is None else value1# 構建表格行內容content_body += f'''<td class=\"confluenceTd\" style=\"width: 171.0px;\">{key1}</td><td class=\"confluenceTd\" style=\"width: 125.0px;\">{value1.get("tests")}</td><!-- 省略其他列內容構建 --><td class=\"confluenceTd\" style=\"width: 766.0px;\"><a href=\"{value1.get('testReport_url')}">{value1.get('testReport_url')}</a></td></tr><tr>'''content_body += f'''</tr>'''content_fooder = f''' </tbody></table>'''content = content_header + content_body + content_fooderreturn content

該函數將不同任務的測試報告關鍵信息,按照功能域和報告類型進行整理,生成對應的 HTML 表格行。最終將這些行組合成完整的表格內容,其中包含報告執行數、成功率、失敗數以及報告鏈接等信息。在寫入 Jira Wiki 時,需要根據 Jira 對內容格式的要求,對生成的 HTML 內容進行適當轉義和調整 ,確保順利寫入。

二、經驗總結

異步并發提升效率

使用asyncio庫實現異步操作,通過asyncio.gather并發觸發和等待多個測試任務,極大減少了整體任務執行時間。在處理大量測試任務時,避免了順序執行帶來的時間浪費,提升了測試效率,加快了反饋周期,有助于開發團隊及時根據測試結果調整開發方向。

正則表達式精準提取

在報告解析中,正則表達式能針對不同結構的測試報告,精準提取關鍵信息。通過為不同報告類型編寫專門的正則表達式模式,能夠快速、準確地獲取報告執行數、成功率、失敗數等數據。不過,由于測試框架版本變化可能導致報告格式改變,需要建立正則表達式庫,對解析模式進行統一管理,以便及時調整適配。

模塊化設計增強維護性

代碼采用模塊化設計,每個函數負責獨立功能,如任務觸發、報告解析、內容組裝等。這使得代碼結構清晰,可讀性和可維護性大大提高。當需要修改或擴展功能時,僅需關注對應的模塊,減少了對整體代碼的影響。在團隊協作開發中,模塊化設計有助于提高開發效率,降低溝通成本,提升代碼質量。

可擴展性保障系統長期可用

系統具備良好的可擴展性。對于新的測試類型或報告格式,只需添加新的報告解析函數和相應映射關系,就能集成到現有系統。例如,未來引入新測試框架,按照現有模式編寫解析函數并配置映射,即可實現對新報告的處理,保障系統能適應不斷變化的測試需求。

三、改進方向探討

強化錯誤處理機制

目前部分函數對異常僅做簡單打印輸出,在實際生產環境中遠遠不夠。應使用logging模塊記錄詳細日志,方便后續排查問題;針對不同異常類型,制定更合理的拋出與恢復策略,確保系統穩定可靠。與 Jira Wiki 交互時,針對網絡異常、權限不足等問題,增加重試機制、優化權限管理,保障數據順利寫入。

消除代碼冗余

run_jenkins_task函數中觸發不同類型任務的代碼存在重復。可將觸發任務的公共部分封裝成獨立函數,減少代碼冗余,使代碼結構更清晰,降低維護成本,便于統一修改和優化觸發任務的邏輯。


本文永久更新地址:

https://www.fenxiangbe.com/p/基于 Jenkins 的測試報告獲取與處理并寫入 Jira Wiki 的技術總結.html

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

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

相關文章

C# 中 default 使用詳解

總目錄 前言 在C#中&#xff0c;default 關鍵字用于表示類型默認值。它可以根據上下文推斷出適用的類型&#xff0c;并返回該類型的默認值。隨著C#版本的發展&#xff0c;default 的用法也變得更加豐富和靈活。本文將詳細介紹 default 在不同場景下的使用方法及其最佳實踐。 一…

FastStone Image Viewer圖像處理軟件安裝步驟(百度網盤鏈接)

軟件簡介&#xff1a;一款小巧便捷的添加水印、特效、圖片處理軟件&#xff0c;讓使用者可以通過它的操作界面來瀏覽圖片&#xff0c;且還支持了幻燈播放的功能&#xff0c;讓使用者能夠輕松的瀏覽目錄中的所有圖片。 網盤鏈接&#xff1a;https://pan.baidu.com/s/1Zvrx7fXwb6…

【新春特輯】2025年1月科技浪潮中的AI最新時事與科技趨勢

2025年1月科技浪潮中的AI最新時事與科技趨勢 一、AI科技時事 人工智能代理&#xff08;AI Agent&#xff09;的發展 最新進展&#xff1a;人工智能代理正逐步成為科技領域的新熱點。這些代理能夠自主執行特定任務&#xff0c;如管理日程、回復郵件等。然而&#xff0c;它們仍…

vue-有關于TS與路由器

title: vue(TS)路由器 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端Vue3-第二部分 這里是代碼中出現TS的&#xff0c;后面是路由器 現在先上代碼&#xff0c;步步分析。 eg1-props的使用 步步分析代碼&#xff08;先理解&#xff0c;再實踐&#xff09; 框架…

mysql.sock.lock 導致mysql重啟失敗

背景 今天公司物業斷電&#xff0c;導致機房服務器停電宕機&#xff0c;所有的服務都得重啟。本著mysql實例都做了服務自啟動&#xff0c;所以沒有太擔心影響開發的日常工作。但是今天一上班開發就找來&#xff0c;各種服務都沒起來有問題&#xff0c;數據庫連不上。馬上登陸數…

git困擾的問題

.gitignore中添加的某個忽略文件并不生效 把某些目錄或文件加入忽略規則&#xff0c;按照上述方法定義后發現并未生效&#xff0c; gitignore只能忽略那些原來沒有被追蹤的文件&#xff0c;如果某些文件已經被納入了版本管理中&#xff0c;則修改.gitignore是無效的。 解決方…

【hot100】刷題記錄(7)-除自身數組以外的乘積

題目描述&#xff1a; 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法&#x…

1-2 飛機大戰游戲場景

前言&#xff1a; 根據前面的項目框架&#xff0c;搭建游戲的運行場景...... 1.0 框架預覽 基于該框架首先實現游戲的運行場景 2.0 圖片文件 創建圖片文件&#xff0c;本次項目使用easyx作為圖形庫文件&#xff0c;在easyx中想要顯示圖片&#xff0c;需要有一張圖片和圖片的掩碼…

進程通訊——類型和發展

進程常用交互方法如上

JavaScript系列(49)--游戲引擎實現詳解

JavaScript游戲引擎實現詳解 &#x1f3ae; 今天&#xff0c;讓我們深入探討JavaScript的游戲引擎實現。游戲引擎是一個復雜的系統&#xff0c;它需要處理渲染、物理、音頻、輸入等多個方面&#xff0c;讓我們一步步實現一個基礎但功能完整的游戲引擎。 游戲引擎基礎概念 &am…

安裝zsh并美化

0 Zsh 是一種功能強大的 shell&#xff0c;通常用于替代默認的 Bash shell。它為命令行提供了更多的功能&#xff0c;例如自動補全、強大的模式匹配和主題支持等。 Oh My Zsh 是用于管理 Zsh 配置的框架。 powerlevel10k是樣式&#xff0c;通過p10k configure腳本可以調節自己…

GMSL 明星產品之 MAX96717

在上一篇文章中&#xff0c;我們詳細介紹了車載市場中爆火的 GMSL 到底是個啥 &#xff1a; 揭開 GMSL 的面紗&#xff1a;自動駕駛背后的隱藏技術。今天我們就來詳細了解下如今在攝像頭側超級火爆的加串器&#xff1a;MAX96717。 MAX96717 系列有三款產品&#xff1a; MAX967…

線段樹 算法

文章目錄 基礎知識適用場景小結 題目概述題目詳解300.最長遞增子序列2407.最長遞增子序列 II 基礎知識 線段樹和樹狀數組都只是一個工具來的&#xff0c;題目并不會一下子就告訴你這個題目用到線段樹和樹狀數組&#xff0c;這個取決于你想使用的數據結構以及所要優化的方向 線…

MATLAB提供的顏色映射表colormap——偽彩色

圖像處理領域的一個習慣&#xff1a;不是真實的顏色&#xff0c;一般用偽彩色。一是說明不是物體本身的顏色&#xff0c;二是彩色更容易分辨。 MATLAB陸續提供了16種顏色映射表colormap。 之前的都很丑&#xff0c;近5年新增的4種還可以。總的說來還是丑。 這是一種鳥的名字。…

20.Word:小謝-病毒知識的科普文章?【38】

目錄 題目? NO1.2.3文檔格式 NO4.5 NO6.7目錄/圖表目錄/書目 NO8.9.10 NO11索引 NO12.13.14 每一步操作完&#xff0c;確定之后記得保存最后所有操作完記得再次刪除空行 題目 NO1.2.3文檔格式 樣式的應用 選中應用段落段落→開始→選擇→→檢查→應用一個一個應用ctr…

【16屆藍橋杯寒假刷題營】第2期DAY4

【16屆藍橋杯寒假刷題營】第2期DAY4 - 藍橋云課 問題描述 幼兒園小班的浩楠同學有一個序列 a。 他想知道有多少個整數三元組 (i,j,k) 滿足 1≤i,j,k≤n 且 ai?aj?ak?。 輸入格式 共2行&#xff0c;第一行一個整數 n&#xff0c;表示序列的長度。 第二行 n 個整數&#x…

MySQL查詢優化(三):深度解讀 MySQL客戶端和服務端協議

如果需要從 MySQL 服務端獲得很高的性能&#xff0c;最佳的方式就是花時間研究 MySQL 優化和執行查詢的機制。一旦理解了這些&#xff0c;大部分的查詢優化是有據可循的&#xff0c;從而使得整個查詢優化的過程更有邏輯性。下圖展示了 MySQL 執行查詢的過程&#xff1a; 客戶端…

Van-Nav:新年,將自己學習的項目地址統一整理搭建自己的私人導航站,供自己后續查閱使用,做技術的同學應該都有一個自己網站的夢想

嗨&#xff0c;大家好&#xff0c;我是小華同學&#xff0c;關注我們獲得“最新、最全、最優質”開源項目和高效工作學習方法 Van-Nav是一個基于Vue.js開發的導航組件庫&#xff0c;它提供了多種預設的樣式和靈活的配置選項&#xff0c;使得開發者可以輕松地定制出符合項目需求…

VSCode+Continue實現AI輔助編程

Continue是一款功能強大的AI輔助編程插件&#xff0c;可連接多種大模型&#xff0c;支持代碼設計優化、錯誤修正、自動補全、注釋編寫等功能&#xff0c;助力開發人員提高工作效率與代碼質量。以下是其安裝和使用方法&#xff1a; 一、安裝VSCode 參見&#xff1a; vscode安…

【hot100】刷題記錄(6)-輪轉數組

題目描述&#xff1a; 給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 步: [7,1,2,3,4,5,6] 向右輪轉 2 步: [6,7,1,2,3,4,5] 向右輪轉…