Jenkins内修改allure报告名称

背景:        

        最近使用Jenkins搭建自动化测试环境时,使用Jenkins的allure插件生成的报告,一直显示默认ALLURE REPORT,想自定义成与项目关联的名称,如图所示,很明显自定义名称显得高大上些

本地修改方法:        

        最开始想到的办法是本地通过代码直接修改生成的allure报告内的widgets/summary.json文件的方式,代码如下:

def set_report_name(new_name):"""修改Allure报告Overview的标题文案@param new_name:  需要更改的标题文案 【 原文案为:ALLURE REPORT 】@return:"""title_filepath = os.path.join(ALLURE_REPORT_DIR, "widgets", "summary.json")# 检查summary.json文件是否存在if not os.path.exists(title_filepath):raise FileNotFoundError(f"修改报告名称时,summary.json文件未找到: {title_filepath}")# 读取summary.json中的内容with open(title_filepath, 'r', encoding='utf-8') as f:params = json.load(f)# 修改报告名称params['reportName'] = new_name# 将修改后的内容写回summary.jsonwith open(title_filepath, 'w', encoding='utf-8') as f:json.dump(params, f, ensure_ascii=False, indent=4)

        通过这种方式发现本地能修改成功,并且本地打开allure也能正常显示修改后的报告名称。但是上传代码后,发现在Jenkins上的allure报告并未被修改成功。

通过一系列的排查,终于找到问题所在:

  1. Jenkins是通过allure插件生成的报告,并不是我代码里执行生成allure报告的代码生成的,所以它是在整个测试过程结束后,插件自动生成的allure代码,所以我修改allure报告的代码执行后,相当于是修改的之前生成的报告,后面插件又生辰本次的执行结果报告覆盖了我的修改,所以没生效
  2. 通过问题1的排查,于是我加了构建后步骤修改allure报告名的脚步,也就是在Jenkins生成allure报告后再修改allure报告名称的步骤,发现allure报告名称确实修改成功了,但是在Jenkins上打开allure报告还是显示的默认名称,于是又再再再经过一系列排查,发现Jenkins打开的报告其实并不是生成的allure报告目录,而是Jenkins每次构建的成果物里的allure-report.zip压缩包。

如下图所示:

Jenkins上修改方法:        

        通过上面的总结,于是便有了下面的方式,先修改allure报告目录内的名称,然后再压缩整个allure报告,覆盖成果物内的allure-report.zip文件

修改Jenkins allure报告并覆盖zip文件的代码:

import os
import shutilfrom configs.paths_config import OUT_FILES_DIR
from utils.allure_handle import AllureReportBeautifuldef get_env_from_jenkins(name, base=''):"""从Jenkins中获取全局环境变量"""return os.getenv(name) and os.getenv(name).strip() or baseProjectName = get_env_from_jenkins("JOB_NAME")  # Jenkins构建项目名称
BUILD_URL = get_env_from_jenkins("BUILD_URL")  # Jenkins构建项目URL
BUILD_NUMBER = get_env_from_jenkins("BUILD_NUMBER")  # Jenkins构建编号
ALLURE_URL = BUILD_URL + 'allure/'  # Jenkins构建的allure报告地址
JENKINS_HOME = get_env_from_jenkins("JENKINS_HOME")  # Jenkins的主目录def change_jenkins_allure_report_name():"""从环境变量中读取报告名称并修改Allure报告名称,此方法只针对Jenkins使用allure插件生成的报告"""try:# 从环境变量中读取报告名称new_name = os.getenv('ALLURE_REPORT_NAME','Allure Report')  # 如果环境变量中没有ALLURE_REPORT_NAME并且未传报告名称参数,默认使用'Allure Report'if not new_name:raise ValueError("环境变量'ALLURE_REPORT_NAME'未设置或为空。")print(f"使用Allure报告名称: {new_name}")# 设置Allure报告名称(引用的上面的那个方法)set_report_name(new_name)# 保存压缩文件目标路径(压缩文件将移动到这里)zip_path = os.path.join(JENKINS_HOME, 'jobs', ProjectName, 'builds', BUILD_NUMBER, 'archive','allure-report.zip')# 确保压缩文件不存在,如果存在先删除if os.path.exists(zip_path):os.remove(zip_path)print(f"已删除现有zip文件:{zip_path} ")# 使用shutil.make_archive压缩整个Allure Report目录并移动到目标目录(OUT_FILES_DIR参数的作用是保留原目录名称)shutil.make_archive(zip_path.replace('.zip', ''), 'zip', OUT_FILES_DIR, 'allure_report')print(f"Allure报告压缩为: {zip_path}")# 返回压缩后的文件路径return zip_pathexcept Exception as e:print(f"错误发生: {e}")return Noneif __name__ == '__main__':change_jenkins_allure_report_name()

Jenkins上构建后增加执行shell配置:

export PYTHONPATH=$WORKSPACE:$PYTHONPATH
export ALLURE_REPORT_NAME=API自动化测试报告
pwd
source /Users/wangjie/SensoroUiAutoTest/venv/bin/activate
python3 utils/jenkins_handle.py

最后大功告成,成功修改allure报告的名字,但是目前实测还是有些问题,会导致allure报告的历史数据图表没了,如下图所示:

最终方法:

        由于上面的方法虽然成功修改了Jenkins上报告名称,但是会导致后面生成的allure报告无法展示历史趋势图,于是经过又又又又又。。。。一系列的更改,就有了最终版的完美解决方案,思路是,既然上面的方法用allure-report压缩覆盖会导致新生成的报告历史趋势有问题,那我就这次不压缩覆盖了,直接在原zip压缩包内修改然后重新压缩,废话少说,代码如下:

import json
import os
import tempfile
import zipfilefrom configs.paths_config import OUT_FILES_DIRdef get_env_from_jenkins(name, base=''):"""从Jenkins中获取全局环境变量"""return os.getenv(name) and os.getenv(name).strip() or baseProjectName = get_env_from_jenkins("JOB_NAME")  # Jenkins构建项目名称
BUILD_URL = get_env_from_jenkins("BUILD_URL")  # Jenkins构建项目URL
BUILD_NUMBER = get_env_from_jenkins("BUILD_NUMBER")  # Jenkins构建编号
ALLURE_URL = BUILD_URL + 'allure/'  # Jenkins构建的allure报告地址
JENKINS_HOME = get_env_from_jenkins("JENKINS_HOME")  # Jenkins的主目录def modify_jenkins_allure_report_name_in_zip():"""直接修改Jenkins构建归档中的allure-report.zip压缩包的报告名称,然后重新压缩,相比较于上面的change_jenkins_allure_report_name方法的好处是直接在原压缩包内修改:return:"""# 从环境变量中读取报告名称new_name = os.getenv('ALLURE_REPORT_NAME','Allure Report')  # 如果环境变量中没有ALLURE_REPORT_NAME并且未传报告名称参数,默认使用'Allure Report'# 找到zip文件路径zip_path = os.path.join(JENKINS_HOME, 'jobs', ProjectName, 'builds', BUILD_NUMBER, 'archive','allure-report.zip')# 检查allure-report.zip压缩包是否存在if not os.path.exists(zip_path):raise FileNotFoundError(f"allure-report.zip压缩包未找到:{zip_path}")# 临时文件夹用于存放解压后的内容with tempfile.TemporaryDirectory() as temp_dir:# 打开并提取 zip 文件with zipfile.ZipFile(zip_path, 'r') as zip_ref:zip_ref.extractall(temp_dir)# 定义需要修改的文件路径summary_file_path = os.path.join(temp_dir, 'allure_report', 'widgets', 'summary.json')# 检查 summary.json 是否存在if not os.path.exists(summary_file_path):raise FileNotFoundError(f"在zip归档文件中找不到summary.json文件:{summary_file_path}")# 读取原始 summary.jsonwith open(summary_file_path, 'r', encoding='utf-8') as file:summary_data = json.load(file)# 修改 summary.json 的内容summary_data['reportName'] = new_name# 保存修改后的 summary.jsonwith open(summary_file_path, 'w', encoding='utf-8') as file:json.dump(summary_data, file, indent=4, ensure_ascii=False)# 创建一个新的 zip 文件,并将修改后的文件重新压缩new_zip_path = zip_path.replace('.zip', '.zip')with zipfile.ZipFile(new_zip_path, 'w', zipfile.ZIP_DEFLATED) as zip_ref:# 遍历解压后的文件夹,重新压缩成一个新的 zip 文件for foldername, subfolders, filenames in os.walk(temp_dir):for filename in filenames:file_path = os.path.join(foldername, filename)# 设置正确的 arcname,以保持 zip 文件的原有结构arcname = os.path.relpath(file_path, temp_dir)zip_ref.write(file_path, arcname)print(f"修改后重新压缩zip文件: {new_zip_path}")return new_zip_pathif __name__ == '__main__':modify_jenkins_allure_report_name_in_zip()

最后,完美解决,并且历史趋势图正常展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/504019.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于物联网的基础知识(二&a…

应急响应——Windows / Linux 排查笔记

一、基本思路流程 收集信息:收集客户信息和中毒主机信息,包括样本判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等抑制范围:隔离使受害⾯不继续扩⼤深入分析:日志分析、…

Git撤销指定commit并更新远端仓库

Git撤销指定commit并更新远端仓库 一、撤销指定commit 1.首先执行git log 命令,查看git历史提交以及commit信息: 由于需要脱敏,所以截图可能看得马赛克比较多,需要关注的就是上面的commit后跟的id,以及HEAD当前指定…

C 语言奇幻之旅 - 第16篇:C 语言项目实战

目录 引言1. 项目规划1.1 需求分析与设计1.1.1 项目目标1.1.2 功能需求1.1.3 技术实现方案 2. 代码实现2.1 模块化编程2.1.1 学生信息模块2.1.2 成绩管理模块 2.2 调试与测试2.2.1 调试2.2.2 测试2.2.4 测试结果 3. 项目总结3.1 代码优化与重构3.1.1 代码优化3.1.2 代码重构 3.…

2025最新解决方案:新买的mac鼠标和这个触控板反向

solution1 :1.打开设置,搜索 触控 点击 自然滚动 ----->解决的是 触控板 但是还是解决不了鼠标反向的问题 solution1 ultra: 下载一个免费 且纯净的 软件 Scroll Reverser for macOS 这是给出的链接,非常简单,…

黄仁勋CES 2025演讲重点内容

黄仁勋CES 2025演讲重点内容 硬件产品发布 GeForce RTX 50系列GPU: 架构与性能提升:正式发布的新一代GeForce RTX 50系列GPU采用英伟达旗舰的Blackwell架构,这是自25年前引入可编程着色技术以来计算机图形领域最重大的创新。该系列显卡在图形…

机器学习免费使用的数据集及网站链接

机器学习领域存在许多可以免费使用的数据集,这些数据集来自于学习、研究、比赛等目的。 一、综合性数据集平台 1.Kaggle 网址:Kaggle 数据集https://www.kaggle.com/datasets Kaggle是一个数据科学竞赛和社区平台,提供了大量的数据集供用…

nodejs的降级

不使用nvm,直接使用zip包和手动配置环境变量。 下载相关的zip版本的, 解压相关文件,配置系统环境变量PATH,安装的其他的都不用修改 修改系统变量中的path值,重启下电脑 注意要重启idea,如果还是无效&…

ASP.NET Core 实现微服务 - Elastic APM

这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件。APM 监控围绕对应用、服务、容器的健康监控,对接口的调用链、性能进行监控。在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂。有了调用链…

自定义EasyCode模板生成CRUD

文章目录 1.生成步骤1.定义全局逻辑删除字段名称以及删除值和未删除值2.简单三层架构模板1.概览2.Req.java3.Vo.java4.Po.java5.Mapper.java6.Mapper.xml7.Service.java8.ServiceImpl.java9.Controller.java 3.通用配置生成模板1.概览2.PageInfo.java3.PageResult.java4.SunPag…

IOS开发如何从入门进阶到高级

针对iOS开发的学习,不同阶段应采取不同的学习方式,以实现高效提升.本文将iOS开发的学习分为入门、实战、进阶三个阶段,下面分别详细介绍. 一、学习社区 iOS开源中国社区 这个社区专注于iOS开发的开源项目分享与协作,汇集了大量开…

洛谷P1617————数字转英文

题目如下 思路:将1~9的英文和20~90的英文用字符串数组存储,把下标看作对应的数字进行输出,遇到0或连续多个0就输出“and”,定义l用来看枚举到哪一位了,如果是单独输入一个“0”,则直接输出zero然后结束。否…

Kubernetes集群架构

Kubernetes集群架构 Kubernetes 集群架构控制平面组件kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-manager 节点组件kubeletkebe-proxy(可选)容器运行时 插件DNSWeb UI(Dashboard)容器资源监控集群…

esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu

最近想用esp32做一个物联网项目,踩坑N个终于有点心得,写下来避免和我一样的小白踩无谓的坑。 写在前面: 第一,大家一定要用linux系统作为编译工具,速度上是windows无法比的,不要因为不熟悉linux而选择win…

探索大型语言模型新架构:从 MoE 到 MoA

探索大型语言模型新架构:从 MoE 到 MoA 当前,商业科技公司纷纷投身于一场激烈的竞赛,不断扩大语言模型的规模,并为其注入海量的高质量数据,试图逐步提升模型的准确性。然而,这种看似顺理成章的发展路径逐渐…

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述:给你一个链表的头节点 head 和一个整数 val &#xff…

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,现已广泛应用于农林生态,资源环境等方面,成为Science、Nature论文的…

LAMP搭建

LAMP搭建 引子:本篇文章为LAMP的搭建流程,其中L(Ubuntu)、A(Apache)、M(Mysql)、P(PHP)。 一、L → Ubuntu Step 1:在Vmware Workstation中使…

基于高斯混合模型的数据分析及其延伸应用(具体代码分析)

一、代码分析 (一)清除工作区和命令行窗口 clear; clc;clear;:该命令用于清除 MATLAB 工作区中的所有变量,确保代码运行环境的清洁,避免之前遗留的变量对当前代码运行产生干扰。例如,如果之前运行的代码中…

成为LabVIEW自由开发者

成为LabVIEW自由开发者的体验可以非常丰富且具有挑战性,同时也充满了自我成长和多样化项目的机会。 ​ 1. 高度的灵活性与自由度 工作时间与地点:作为自由开发者,你可以自由选择工作时间和地点。你可以在家工作,也可以选择在咖啡…