网站空间流量不够,以数字域名为网址的网站,影视制作宣传片公司,wordpress显示自定义分类文章数量背景#xff1a; 最近使用Jenkins搭建自动化测试环境时#xff0c;使用Jenkins的allure插件生成的报告#xff0c;一直显示默认ALLURE REPORT#xff0c;想自定义成与项目关联的名称#xff0c;如图所示#xff0c;很明显自定义名称显得高大上些#xff0c;之前…背景 最近使用Jenkins搭建自动化测试环境时使用Jenkins的allure插件生成的报告一直显示默认ALLURE REPORT想自定义成与项目关联的名称如图所示很明显自定义名称显得高大上些之前已经更换过本地allure报告的名称了发现在Jenkins上不生效这次就一起说说两种更改方式 本地修改方法 最开始想到的办法是本地通过代码直接修改生成的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, encodingutf-8) as f:params json.load(f)# 修改报告名称params[reportName] new_name# 将修改后的内容写回summary.jsonwith open(title_filepath, w, encodingutf-8) as f:json.dump(params, f, ensure_asciiFalse, indent4)通过这种方式发现本地能修改成功并且本地打开allure也能正常显示修改后的报告名称。但是上传代码后发现在Jenkins上的allure报告并未被修改成功。
通过一系列的排查终于找到问题所在
Jenkins是通过allure插件生成的报告并不是我代码里执行生成allure报告的代码生成的所以它是在整个测试过程结束后插件自动生成的allure代码所以我修改allure报告的代码执行后相当于是修改的之前生成的报告后面插件又生辰本次的执行结果报告覆盖了我的修改所以没生效通过问题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 Reportif 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(fAllure报告压缩为: {zip_path})# 返回压缩后的文件路径return zip_pathexcept Exception as e:print(f错误发生: {e})return Noneif __name__ __main__:change_jenkins_allure_report_name()
Jenkins上构建后增加执行shell配置需要下载PostBuildScript插件才能在构建后步骤中增加执行shell步骤
export PYTHONPATH$WORKSPACE:$PYTHONPATH
export ALLURE_REPORT_NAMEAPI自动化测试报告
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(fallure-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, encodingutf-8) as file:summary_data json.load(file)# 修改 summary.json 的内容summary_data[reportName] new_name# 保存修改后的 summary.jsonwith open(summary_file_path, w, encodingutf-8) as file:json.dump(summary_data, file, indent4, ensure_asciiFalse)# 创建一个新的 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()
最后完美解决并且历史趋势图正常展示