当前位置: 首页 > news >正文

pytest合并allure报告解决方案

背景

在执行自动化测试的过程中,为了实现自动化的高通过率,可能会反复的重试,直至大多数甚至全部用例执行通过,以此来需要人为分析的用例量,减少人力投入,提高执行效率;
在用例少或者资源消耗小,用例执行快速高效的情况下,可以每次都执行全量用例,但是一旦用例数达到一定量级,全量重试就不再适用,重试失败用例或者指定用例才能满足需求。

在前面的文章中 pytest构造测试缓存执行指定用例 提到构造测试缓存执行指定用例,或者将使用上次测试任务归档的缓存重试失败的用例,使用缓存测试的方法可以执行指定用例,大大提高执行效率。
但是反复的重试,有带来的新的问题,报告有多份,第一份报告包含全部用例数据,通过率可能又不甚理想,后续报告通过率上去了,但缺失了大部分的测试用例,可能无法全面反映测试状况。

测试任务输入描述输出
任务A无缓存,全量测试缓存A,报告A
任务B使用缓存A重试缓存B,报告B
任务C使用缓存B重试缓存C,报告C
任务D使用缓存C重试缓存D,报告D

基于上述种种问题,实践中,理想自动化测试的理想状态是:使用缓存重试失败用例,每次报告都包含全部的测试用例数据,在每份报告的用例总数不变的情况下,用例的整体通过率能够逐渐提高
本文将提供解决方案,在实践中可以有效地提升自动化测试报告的质量与效率,确保在反复重试过程中,无论是报告的完整性还是数据呈现都得到合理保障

测试前置改造

前置中增加两个变量pytest_cacheallure_result用于传递缓存与allure结果文件压缩包下载地址,通过判断是否有对应参数值进行下载解压到工作目录,参考示例脚本:

  • pytest_cache:缓存下载地址
  • allure_result:allure结果文件下载地址
# /bin/bash
# 变量参数(触发测试任务时传递)
export pytest_cache=http://10.132.1.127:8123/PytestTask/1000_pytest_cache.tar.gz 
export allure_result=http://10.132.1.127:8123/PytestTask/1000_allure-results.tar.gz # 判断是否有指定缓存,如果有就下载缓存,用例重试失败用例
if [ -n "$pytest_cache" ]; thencd ${WORKSPACE};wget ${pytest_cache} -O ./pytest_cache_old.tar.gz;tar -zxf ./pytest_cache_old.tar.gz;
fi# 判断是否有指定报告数据,如果有就下载,用于后续合并
if [ -n "$allure_result" ]; thencd ${WORKSPACE};wget ${allure_result} -O ./allure_result_old.tar.gz;tar -zxf ./allure_result_old.tar.gz;
fi

pytest测试命令

pytest测试命令必须指定参数:--last-failed --last-failed-no-failures all --alluredir ./allure-results 其中--alluredir 参数指定的值必须为/allure-results 因为后文会对其进行打包归档

  • –last-failed
    功能:此选项指示 pytest 仅运行上次测试运行中失败的测试用例。如果上次运行中有测试未通过,这个选项会让你专注于解决这些具体的失败用例,而不是每次都运行所有测试。
    应用场景:在调试时,如果你发现某些测试失败,这个选项允许你快速重试并关注那些失败的测试,而不必进行全面的测试。
  • –last-failed-no-failures all
    功能:此选项用于扩展 --last-failed 的功能。如果在上次测试中没有任何失败的测试用例,则会运行所有测试。
    应用场景:这确保了即使在上一次运行中没有失败,你也能执行整个测试套件,确保代码的完整性和正确性。
  • –alluredir ./allure-results
    功能:此选项指定了用于存储测试报告结果的目录,它用于与 Allure 报告工具兼容。执行测试后,pytest 会将测试结果(成功和失败)以 Allure 支持的格式存储到你指定的目录(在这里是 ./allure-results)。
    应用场景:这样做可以生成可视化的测试报告,便于后期查看和分析测试结果。运行完成后,可以使用 Allure 命令生成和查看测试报告,帮助更好地理解测试情况。

完整的pytest测试命令例如:pytest -v -s -l ${test_dir} -m "${mark}" --last-failed --last-failed-no-failures all -n ${concurrency} --reruns ${reruns} --timeout 7200 --show-capture=stderr --dist=worksteal --durations=30 --alluredir ./allure-results

测试后置改造

改造测试后置,主要是生成测试报告,并且将测试生成的一些文件进行打包上传归档,便于后续使用(这里的文件服务是一个单独的web服务)

# /bin/bash
# 参数变量
# 文件服务地址,用于缓存文件
export file_server=10.132.1.127:8123
# 文件服务地址上存放的目录
export save_dir=PytestTask
# 测试任务编号(正常应该是读取环境变量)
export task_num=1001# 生成报告
allure generate -c -o allure-report ./allure-results# 声明报告类型数组
report_types=("allure-report" "allure-results" "pytest_cache")# 打包文件
for report_type in "${report_types[@]}"; dotar_name="${task_num}_${report_type}.tar.gz"if [[ "$report_type" == "pytest_cache" ]]; thentar -zcf ${tar_name} ./.pytest_cacheelsetar -zcf ${tar_name} ./${report_type}fi
done# 上传文件
for report_type in "${report_types[@]}"; dofile_address="./${task_num}_${report_type}.tar.gz"curl -X POST "http://${file_server}/files/${save_dir}" -F "file=@$file_address" || echo -e "\033[31m ${file_server}服务异常,报告上传失败 \033[0m"
done# 输出下载地址
echo -e "\e[31m 归档文件下载地址: http://${file_server}/${save_dir}/${task_num}_allure-results.tar.gz \e[0m"
echo -e "\e[31m 归档报告下载地址: http://${file_server}/${save_dir}/${task_num}_allure-report.tar.gz \e[0m"
echo -e "\e[31m 归档缓存下载地址: http://${file_server}/${save_dir}/${task_num}_pytest_cache.tar.gz \e[0m"

http://www.dtcms.com/a/269286.html

相关文章:

  • 硅基流动:云服务平台初解
  • 钉钉企业内部机器人实现单聊会话互动开发指南
  • 【Netty应用】Netty的核心设计与应用
  • 机器学习(西瓜书) 第二章 模型评估与选择
  • Linux网络: socket初识
  • C++--map和set的使用
  • 网安系列【11】之目录穿越与文件包含漏洞详解
  • ULVAC爱发科RFS03D RF POWER SUPPLY INSTRUCTION MANUAL RF射频电源
  • Kotlin数值计算Long型乘Float浮点型
  • 安卓10.0系统修改定制化____recovery-from-boot.p文件的具体作用 在定制项目中的关联
  • LLVM,polly,最新测试
  • 【郑大二年级信安小学期】Day6:CTF密码学杂项工具包
  • Multi-Agent 多智能体架构解析--DeerFlow
  • 【DPDK应用篇】事件驱动架构:eventdev异步处理模型的设计与实现
  • 大数据Spark(六十二):Spark基于Yarn提交任务流程
  • C++内存泄漏排查
  • 施密特触发器Multisim电路仿真——硬件工程师笔记
  • 暑假读书笔记第三天
  • Linux信号处理全解析
  • Qt中的QProcess类
  • 【学习笔记】大数定理,频率与概率,均值与期望的区别
  • MySQL数据表设计 系统的营销功能 优惠券、客户使用优惠券的设计
  • 2025Q2大模型更新汇总(大语言模型篇)
  • Web后端开发-分层解耦
  • 【Java面试】如何保证接口的幂等性?
  • Day06_刷题niuke20250707
  • pythone相关内容一
  • Spring 如何干预 Bean 的生命周期?
  • 洛谷 P5788 【模板】单调栈
  • 龙旗科技社招校招入职测评25年北森笔试测评题库答题攻略