有什么推广网站,泉州市住房与城乡建设局网站,中文网站建设,wd mycloud wordpresstitle: 基于 Jenkins 的测试报告获取与处理并写入 Jira Wiki 的技术总结
tags:
- jenkins
- python
categories:
- jenkins在软件开发的持续集成与持续交付#xff08;CI/CD#xff09;流程里#xff0c;及时、准确地获取并分析测试报告对保障软件质量至关重要。本文将详细…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_exceptionsTrue)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) failuresfailures_match re.search(failures_pattern, res.text)if failures_match:failures int(failures_match.group(1))else:failures 0tests_pattern r(\d) teststests_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 ftable class\wrapped confluenceTable\ style\width: 2093.0px;\!-- 省略表格头部详细定义 --/trcontent_body for value in content_list:content_body ftrtd class\confluenceTd\ style\width: 208.0px;\ rowspan\3\{value[functional_domain]}/tdfor key1, value1 in value.items():if key1 functional_domain:continuevalue1 {} if value1 is None else value1# 构建表格行内容content_body ftd class\confluenceTd\ style\width: 171.0px;\{key1}/tdtd 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/trtrcontent_body f/trcontent_fooder f /tbody/tablecontent 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