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.pswp.cn/bicheng/87958.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87958.shtml

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

相关文章

Pr插件图文安装教程

Pr插件图文安装教程 Adobe Premiere Pro,简称Pr,是由Adobe公司开发的一款视频编辑软件。Adobe Premiere有较好的兼容性,且可以与Adobe公司推出的其他软件相互协作。这款软件广泛应用于广告制作和电视节目制作中,是视频编辑爱好者…

[netty5: HttpObjectEncoder HttpObjectDecoder]-源码解析

在阅读该篇文章之前,推荐先阅读以下内容: [netty5: HttpObject]-源码解析[netty5: MessageToMessageCodec & MessageToMessageEncoder & MessageToMessageDecoder]-源码分析[netty5: ByteToMessageCodec & MessageToByteEncoder & Byte…

uniapp的navigator跳转功能

接下来&#xff0c;我将围绕一个常见的电商小程序来构建一系列连贯的使用场景。在这个过程中&#xff0c;我们将把 <navigator> 组件的所有关键属性和方法都串联起来&#xff0c;并详细解释它们在每个环节所扮演的角色和作用。 核心场景&#xff1a;构建一个电商小程序的…

v-for的用法及案例

目录 一.v-for的用法 1.举例1 2.举例2 二.购物车案例 1.代码 2.存在的问题&#xff1a;复选框错位 3.解决方案&#xff1a; 赋值给key属性一个唯一的值 一.v-for的用法 1.举例1 <template><view><view v-for"(item,index) in 10" :key"…

BigQuery对象引用(ObjectRef)全面指南:一站式整合结构化与非结构化多模态数据分析

引言 企业需要同时管理有组织表格中的结构化数据&#xff0c;以及日益增长的非结构化数据&#xff08;如图片、音频和文档&#xff09;。传统上&#xff0c;联合分析这些多样化数据类型非常复杂&#xff0c;通常需要使用不同的工具。非结构化媒体通常需要导出到专门的服务进行…

【开源品鉴】FRP源码阅读

frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透&#xff0c;支持多种协议和 P2P 通信功能&#xff0c;目前在 GitHub 上已有 80k 的 star。本文将深入探讨其源码&#xff0c;揭示其背后的实现原理。1. 前言 frp 是一款高性能的反向代理应用&#xff0c;专注于内网…

day048-系统负载高排查流程与前后端分离项目

文章目录 0. 老男孩思想1. 系统负载高排查流程1.1 进程/线程相关命令1.1.1 jps1.1.2 jstack1.1.3 jmap1.1.4 top -Hp pid 1.2 排查流程图 2. 前后端分离项目2.1 项目说明2.2 负载均衡2.3 数据库配置2.3.1 安装数据库服务2.3.2 配置数据库环境 2.4 后端配置2.5 四层负载均衡配置…

Spring Boot 牵手EasyExcel:解锁高效数据处理姿势

引言 在日常的 Java 开发中&#xff0c;处理 Excel 文件是一个极为常见的需求。无论是数据的导入导出&#xff0c;还是报表的生成&#xff0c;Excel 都扮演着重要的角色。例如&#xff0c;在企业的财务管理系统中&#xff0c;需要将每月的财务数据导出为 Excel 报表&#xff0…

【ARM AMBA AXI 入门 21 -- AXI partial 访问和 narrow 访问的区别】

文章目录 Overview一、定义区别二、AXI 信号层面对比三、举例说明示例一:Partial Access示例二:Narrow Access四、硬件/系统处理角度五、AXI 总线接口信号举例对比Partial Write 事务:Narrow Write 事务(32-bit Master on 64-bit Bus):六、总结对比表七,软件判断判断 Pa…

使用Ideal创建一个spring boot的helloWorld项目

说明&#xff1a;本篇将介绍如何使用Ideal2024.2.1去创建一个spring boot的helloWorld项目&#xff0c;本篇将包含创建的详细步骤以及spring boot项目的目录结构说明&#xff0c;创建过程中的选项说明等。详细步骤如下&#xff1a;第一步&#xff1a;点击文件——新建——项目&…

国内Ubuntu访问不了github等外网

各位小伙伴们&#xff0c;大家好呀。 大家是不是经常遇到访问不了外网的情况呀。 在Ubuntu中可以这样做。 访问这个网站网站测速-Ping检测-Trace查询-Dig查询-路由跟踪查询-tools.ipip.net&#xff0c; 对于github.com&#xff0c;在这个网站输入github.com&#xff0c;会返…

PDF转换工具,即开即用

在办公室里&#xff0c;这句话被反复验证。每天面对成堆的Word和Excel文件&#xff0c;将它们转换成PDF格式是常有的事。可之前用过的工具&#xff0c;不是一次只能转一个&#xff0c;就是操作繁琐得让人头疼。记得有次赶项目&#xff0c;需要把二十多个文档转成PDF&#xff0c…

2. 你可以说一下 http 版本的发展过程吗

你可以说一下 http 版本的发展过程吗 总结&#xff1a;0.9&#xff1a;只能发送 get&#xff0c;无状态。1.0&#xff1a;新增 post&#xff0c;请求头&#xff0c;状态码&#xff0c;cookie。1.1&#xff1a;新增 put/delete/options/patch&#xff0c;keep-alive&#xff0c…

04-Linux驱动模块的自动加载

概述 上一节&#xff0c;我们讲述了Linux驱动开发的基本的模块代码编写和手动执行模块加载的操作&#xff0c; 这一节&#xff0c;我们讲述嵌入式设备上使用Sysvint引导方式下如何开机自动加载模块的步骤。感兴趣的同学看下使用systemd引导方式的开启自动加载模块的步骤 操作…

【牛客算法】游游的整数切割

文章目录 一、题目介绍1.1 题目链接1.2 题目描述1.3 输入描述1.4 输出描述1.5 示例二、解题思路2.1 核心算法设计2.2 性能优化关键2.3 算法流程图三、解法实现3.1 解法一:基础遍历法3.1.1 初级版本分析3.2 解法二:奇偶预统计法(推荐)3.2.1 优化版本分析四、总结与拓展4.1 关…

笔记本电脑忽亮忽暗问题

关于笔记本电脑忽亮忽暗的问题这个问题困扰了我大半年&#xff0c;最后忽然找到解决方法了---主要的话有三种可能性1.关闭显示器自动调亮的功能2.关闭节能模式自动调亮功能3.调整显卡的功率&#xff0c;关闭自动调亮功能一开始一直都是尝试的第一种方法&#xff0c;没解决。。。…

Qt的顶部工具栏在多个界面使用

Qt的工具栏在多个界面使用1、前言2、创建一个工具栏类2.1 新建一个工具栏类3、提升工具栏类3.1登录界面添加工具栏3.2 创建工具栏对象4、总结1、前言 今天遇到了个问题&#xff0c;顶部的工具栏&#xff0c;像软键盘&#xff0c;时间显示和退出按钮那些&#xff0c;想在多个界…

C#和SQL Server连接常用通讯方式

C#和SQL Server连接通讯 在 C# 中与 SQL Server 建立数据库连接&#xff0c;主要通过 ADO.NET 技术实现。以下是几种常见的连接方式及相关实践&#xff1a; ADO.NET 全面指南&#xff1a;C# 数据库访问核心技术 ADO.NET 是 .NET Framework 中用于数据访问的核心组件&#xf…

安卓10.0系统修改定制化____实现自动开启 USB 调试​的步骤解析 列举常用的几种修改方法

对于安卓开发者、测试人员,甚至是喜欢折腾手机的数码爱好者来说,USB 调试是一个非常重要的功能。它能让手机与电脑相连,实现应用安装、系统调试、数据传输等操作。但每次连接手机都要手动去设置里开启 USB 调试,实在麻烦。其实,通过修改安卓 10.0 的 ROM,就能让手机自动开…

Redisson详细教程 - 从入门到精通

目录 1. 什么是Redisson 2. 为什么要用Redisson 3. 环境准备和配置 4. 基础使用方法 5. 分布式数据结构 6. 分布式锁详解 7. 分布式服务 8. 实际应用场景 9. 最佳实践 10. 常见问题解答 总结 1. 什么是Redisson 简单理解 想象一下,Redis就像一个超级强大的"内…