pytest学习和使用22-allure特性 丨总览中的Environment、Categories设置以及Flaky test使用

news/2024/5/14 18:29:47/文章来源:https://blog.csdn.net/NoamaNelson/article/details/129665459

22-allure特性 丨总览中的Environment和Categories设置

  • 1 Environment设置
    • 1.1 设置方法
    • 1.2 创建文件
  • 2 Categories设置
    • 2.1 设置方式
    • 2.2 创建文件
  • 3 关于Flaky test
    • 3.1 Flaky test介绍
    • 3.2 产生Flaky Tests的原因
    • 3.3 Flaky安装
    • 3.4 Flaky使用
    • 3.5 小结
      • 小结1
      • 小结2

  • 如下图,我们可以看到allure报告的总览,里边的一些特性是可以自定义设置的。
    在这里插入图片描述

1 Environment设置

  • Environment可以理解为环境变量;
  • 默认为空;
  • 可以自己设置。

1.1 设置方法

  • 在存放测试报目录下创建environment.properties或者environment.xml文件;
  • 而测试报告目录是使用--alluredir指定的目录,比如:
--alluredir allure-results
  • 比如之前提到的用例:
pytest -n auto --alluredir=allure-results test_xdist.py

在这里插入图片描述

1.2 创建文件

  • environment.properties
Browser=Chrome
Browser.Version=111.0.5563.65
Env=Test
IP=192.168.1.133
Allure-Pytest.Version=2.8.12
  • 运行后查看Environment
    在这里插入图片描述
  • 或者创建environment.xml
environment><parameter><key>Browser</key><value>Chrome</value></parameter><parameter><key>Browser.Version</key><value>111.0.5563.65</value></parameter><parameter><key>Env</key><value>Test</value></parameter><parameter><key>IP</key><value>192.168.1.133</value></parameter><parameter><key>Allure-Pytest.Version</key><value>2.8.12</value></parameter>
</environment>

2 Categories设置

  • Categories即分类,测试用例结果的分类;
  • 默认有两种分类:
# Product defects 产品缺陷(测试结果:failed)
# Test defects 测试缺陷(测试结果:error/broken)
  • 可以自定义分类。

2.1 设置方式

  • environment方式一样,在allure-results目录中创建categories.json文件

2.2 创建文件

在这里插入图片描述

[{"name": "Ignored tests", "matchedStatuses": ["skipped"] },{"name": "Infrastructure problems","matchedStatuses": ["broken", "failed"],"messageRegex": ".*bye-bye.*" },{"name": "Outdated tests","matchedStatuses": ["broken"],"traceRegex": ".*FileNotFoundException.*" },{"name": "Product defects","matchedStatuses": ["failed"]},{"name": "Test defects","matchedStatuses": ["broken"]}
]
  • 参数说明:
name:分类名称
matchedStatuses:测试用例的运行状态,默认["failed", "broken", "passed", "skipped", "unknown"]
messageRegex:测试用例运行的错误信息,默认.* ,通过正则匹配
traceRegex:测试用例运行的错误堆栈信息,默认.*  ,通过正则匹配
  • 写一个用例,验证下:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/20
# 文件名称:test_yyy.py
# 作用:allure特性categories验证
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport pytest
import timeclass TestCase01():def test_case_01(self):time.sleep(1)print("case01$$$$$$$$$$$$$$$$$$$$$")assert 1 == 2def test_case_02(self):time.sleep(1)print("case02$$$$$$$$$$$$$$$$$$$$$")assert 3 == 3def test_case_03(self):time.sleep(1)print("case03$$$$$$$$$$$$$$$$$$$$$")assert "is" in "is_you"def test_case_04(self):time.sleep(1)print("case04$$$$$$$$$$$$$$$$$$$$$")assert 5 < 10def test_case_05(self):time.sleep(1)print("case05$$$$$$$$$$$$$$$$$$$$$")assert 222 == 333def test_case_06(self):time.sleep(1)print("case06$$$$$$$$$$$$$$$$$$$$$")assert 444 > 666class TestCase02():def test_case_07(self):time.sleep(1)print("case07$$$$$$$$$$$$$$$$$$$$$")assert 10/2 == 5.0def test_case_08(self):time.sleep(1)print("case08$$$$$$$$$$$$$$$$$$$$$")assert "num" in "num_list"def test_case_09(self):time.sleep(1)print("case08$$$$$$$$$$$$$$$$$$$$$")assert "num1" in "num_list"if __name__ == '__main__':pytest.main(["-s", "test_yyy.py"])
  • 运行命令:
pytest -n auto --alluredir=allure-results test_yyy.py
  • 运行命令:
allure serve allure-results
  • 查看结果:
    在这里插入图片描述
    在这里插入图片描述

3 关于Flaky test

3.1 Flaky test介绍

  • Flaky test在被测对象和测试条件都不变的情况下,有时候失败、有时候成功的测试;
  • 实际上就是不稳定的测试,或者随机失败(随机成功)的测试;
  • 标记成Flaky是为了当用例失败的情况下,我们能获取足够详细的信息。

3.2 产生Flaky Tests的原因

  • 异步等待;
  • 并发;
  • 资源泄露;
  • 远程服务;
  • 测试依赖性。

3.3 Flaky安装

pip3 install pytest-ignore-flaky
C:\Users\Administrator>pip3 install pytest-ignore-flaky
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pytest-ignore-flakyDownloading https://pypi.tuna.tsinghua.edu.cn/packages/22/bf/4a670d28c8c37569e26536c068d83b37a01aea9fff9a45a03ae3be5344b9/pytest_ignore_flaky-2.0.0-py3-none-any.whl (3.9 kB)
Requirement already satisfied: pytest>=6.0 in d:\python37\lib\site-packages (from pytest-ignore-flaky) (6.2.4)
Requirement already satisfied: py>=1.8.2 in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (1.10.0)
Requirement already satisfied: colorama in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (0.4.4)
Requirement already satisfied: attrs>=19.2.0 in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (20.3.0)
Requirement already satisfied: atomicwrites>=1.0 in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (1.4.0)
Requirement already satisfied: iniconfig in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (1.1.1)
Requirement already satisfied: importlib-metadata>=0.12 in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (2.1.1)
Requirement already satisfied: toml in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (0.10.2)
Requirement already satisfied: packaging in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (20.8)
Requirement already satisfied: pluggy<1.0.0a1,>=0.12 in d:\python37\lib\site-packages (from pytest>=6.0->pytest-ignore-flaky) (0.13.1)
Requirement already satisfied: zipp>=0.5 in d:\python37\lib\site-packages (from importlib-metadata>=0.12->pytest>=6.0->pytest-ignore-flaky) (1.2.0)
Requirement already satisfied: pyparsing>=2.0.2 in d:\python37\lib\site-packages (from packaging->pytest>=6.0->pytest-ignore-flaky) (2.4.7)
Installing collected packages: pytest-ignore-flaky
Successfully installed pytest-ignore-flaky-2.0.0

3.4 Flaky使用

  • 再写一个用例:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/20
# 文件名称:test_yyy.py
# 作用:allure特性categories验证
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport pytest
import timeclass TestCase01():def test_case_01(self):time.sleep(1)print("case01$$$$$$$$$$$$$$$$$$$$$")assert 1 == 2def test_case_02(self):time.sleep(1)print("case02$$$$$$$$$$$$$$$$$$$$$")assert 3 == 3def test_case_03(self):time.sleep(1)print("case03$$$$$$$$$$$$$$$$$$$$$")assert "is" in "is_you"def test_case_04(self):time.sleep(1)print("case04$$$$$$$$$$$$$$$$$$$$$")assert 5 < 10def test_case_05(self):time.sleep(1)print("case05$$$$$$$$$$$$$$$$$$$$$")assert 222 == 333def test_case_06(self):time.sleep(1)print("case06$$$$$$$$$$$$$$$$$$$$$")assert 444 > 666class TestCase02():def test_case_07(self):time.sleep(1)print("case07$$$$$$$$$$$$$$$$$$$$$")assert 10/2 == 5.0def test_case_08(self):time.sleep(1)print("case08$$$$$$$$$$$$$$$$$$$$$")assert "num" in "num_list"@pytest.mark.flakydef test_case_09(self):time.sleep(1)print("case08$$$$$$$$$$$$$$$$$$$$$")assert "num1" in "num_list"if __name__ == '__main__':pytest.main(["-s", "test_yyy.py"])
  • 使用命令直接运行用例:
pytest -n auto --alluredir=allure-results test_yyy.py
========================================== short test summary info ===========================================
FAILED test_yyy.py::TestCase01::test_case_06 - assert 444 > 666
FAILED test_yyy.py::TestCase01::test_case_01 - assert 1 == 2
FAILED test_yyy.py::TestCase01::test_case_05 - assert 222 == 333
FAILED test_yyy.py::TestCase02::test_case_09 - AssertionError: assert 'num1' in 'num_list'
==================================== 4 failed, 5 passed, 1 rerun in 5.99s ====================================
  • 从上发现被我们使用@pytest.mark.flaky标记的用例,断言是失败的,也正常标准失败:
    在这里插入图片描述
    在这里插入图片描述
  • 命令行加上代码:--ignore-flaky重新运行:
pytest -n auto --alluredir=allure-results test_yyy.py --ignore-flaky

在这里插入图片描述

  • 发现被标记的用例变成了xfailed而不是失败了:
    在这里插入图片描述
    在这里插入图片描述

3.5 小结

小结1

  • 默认情况下, @pytest.mark.flaky 装饰器标记的测试用例默认会执行;
  • 当用例执行结果成功时正常执行正常显示用例结果;
  • 当用例执行结果失败时,测试用例默认失败重跑一次。

小结2

  • pytest命令行参数 --ignore-flaky 运行 @pytest.mark.flaky 标记的测试用例:当用例执行成功时执行结果显示正常;
  • 当用例执行失败时执行结果显示XFAIL(skip flaky test failure)

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

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

相关文章

开始学习HTML5

HTML5 简介 HTML5是HTML最新的修订版本&#xff0c;2014年10月由万维网联盟&#xff08;W3C&#xff09;完成标准制定。 HTML5的设计目的是为了在移动设备上支持多媒体。 HTML5简单易学。 什么是 HTML5? HTML5 是下一代 HTML 标准。 HTML , HTML 4.01的上一个版本诞生于 1…

如何将3张图片横向拼在一起

如何将3张图片横向拼在一起&#xff1f;遇到这个情况你可能马上就会说出很多图片处理的app&#xff0c;比如用某秀秀来操作&#xff0c;但是也有很多时候某秀秀也处理不了的。当我们的图片非常大&#xff0c;图片数量很多&#xff0c;图片的格式不是jpg那种通用的格式&#xff…

如何监控和诊断JVM堆内和堆外内存使用?

第26讲 | 如何监控和诊断JVM堆内和堆外内存使用&#xff1f; 上一讲我介绍了 JVM 内存区域的划分&#xff0c;总结了相关的一些概念&#xff0c;今天我将结合 JVM 参数、工具等方面&#xff0c;进一步分析 JVM 内存结构&#xff0c;包括外部资料相对较少的堆外部分。 今天我要…

Java栈和队列·下

Java栈和队列下2. 队列(Queue)2.1 概念2.2 实现2.3 相似方法的区别2.4 循环队列3. 双端队列 (Deque)3.1 概念4.java中的栈和队列5. 栈和队列面试题大家好&#xff0c;我是晓星航。今天为大家带来的是 Java栈和队列下 的讲解&#xff01;&#x1f600; 继上一个讲完的栈后&…

视听场景理解经典任务

文章目录1. 视听场景理解简介2. 主要任务2.1 Audio-visual Event Localization (AVE) 2.2 Audio-visual Video Parsing &#xff08;AVVP&#xff09;2.3 Audio-visual Question Answering &#xff08;AVQA&#xff09;2.4 Audio-visual Segmentation &#xff08;AVS&#xf…

STM32中systick中断的优先级

1、systick中断的优先级 systick为内核外设中断&#xff0c;与普通外设中断的优先级有些区别&#xff0c;并没有抢占优先级和子优先级的说法。 对于M3来说内核外设的中断优先级由内核SCB这个外设的寄存器&#xff1a;SHPRx&#xff08;x1.2.3&#xff09;来配置。 内核外设的中…

佳明安夺(Garmin Enduro)续航简单测试

文章目录&#xff08;一&#xff09;结论&#xff08;二&#xff09;测试条件&#xff08;2.1&#xff09;Garmin Connect APP 日历&#xff08;2.2&#xff09;具体运动记录&#xff08;2.3&#xff09;步数情况&#xff08;三&#xff09;补充和探讨&#xff08;3.1&#xff…

信捷PLC通过EtherCat与松下伺服通讯时的断电重启时会产生巨大异响的Bug原因及解决办法

信捷PLC支持ethercat通讯协议,可以和支持ethercat的从站通讯,像伺服驱动器或IO站点等。 其中,信捷XLH系列PLC在与松下伺服驱动器通讯时,有一个比较严重的问题,就是PLC断电再上电时,有时候会出现bug,这个bug的现象是,使用PLC的指令方式去控制伺服轴动作时,会产生巨大的…

kali内置超好用的代理工具proxychains

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。所以可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。…

Mybatis的课程总结

1.mybatis Mybatis主要是对代码进行少写&#xff0c;分别加入核心配置文件和mapper映射文件&#xff0c; 核心配置文件主要是为了连接数据库&#xff0c;mapper映射文件是为了编写sql语句 1.如何配置mybatis ①先创建一个moudle ②然后配置jar包 ③然后进行mybatis的分层 bean…

pcb成型板aoi检测,6种PCB板常用的检测方法

6种PCB板常用的检测方法&#xff0c;主要包括&#xff1a;PCB板人工目测、PCB板在线测试、PCB板功能测试、自动光学检测、自动X光检查、激光检测系统1、PCB板人工目测使用放大镜或校准的显微镜&#xff0c;利用操作人员视觉检查来确定电路板合不合格&#xff0c;并确定什么时候…

我们再次看看 ARB 女巫空投策略,做到知彼知己,不敢说百战不殆

女巫检测选项该项目旨在从 Arbitrum 空投中删除 Sybil 地址&#xff0c;确保只有合法用户才能收到空投代币。方法我们使用链上数据来识别同一用户拥有的相关地址&#xff0c;并使用来自 Nansen、Hop 和 OffChain Labs 的数据删除实体地址&#xff0c;例如网桥、交易所和智能合约…

Verilog学习之触发器与modelsim仿真

目录 一、前言 二、触发器介绍 三、测试文件代码 一、前言 ​ ​本文将学习常见类型触发的verilog编写&#xff0c;结合仿真结果来熟悉。 二、触发器介绍 ​ ​触发器在verilog中的作用主要是具有存储作用&#xff0c;由时钟信号来触发改变存储内容&#xff0c;较常见…

银河麒麟v10系统硬盘挂载

一、查看磁盘 近期由于centos系统停止更新用户服务器要更换银河麒麟v10&#xff0c;拿到服务器后使用lsblk -f或fdisk -l命令查看磁盘名称 可以看到sdb200G就是要挂载的硬盘&#xff0c;还没有uuid需要初始化才可以挂载。 二、分区 分区命令&#xff1a; fdisk /dev/【你的…

【LeetCode每日一题】——面试题17.21.直方图的水量

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时间频度】八【代码实现】九【提交结果】一【题目类别】 双指针 二【题目难度】 困难 三【题目编号】 面试题17.21.直方图的水量 四【题目描述】 给定一个直方图(也称…

Java解题--练习解题阶段(无序阶段)-ALGO-1006 拿金币

题目算法训练 拿金币资源限制内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s问题描述有一个N x N的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以…

什么是装箱?什么是拆箱?装箱和拆箱的执行过程?常见问题?

参考答案 1、什么是装箱&#xff1f;什么是拆箱&#xff1f; 装箱&#xff1a;基本类型转变为包装器类型的过程。 拆箱&#xff1a;包装器类型转变为基本类型的过程。 //JDK1.5之前是不支持自动装箱和自动拆箱的&#xff0c;定义Integer对象&#xff0c;必须 Integer i new…

MATLAB | R2023a更新了哪些好玩的东西

R2023a来啦&#xff01;&#xff01;废话不多说看看新版本有啥有趣的玩意和好玩的特性叭&#xff01;&#xff01;把绘图放最前面叭&#xff0c;有图的内容看的人多。。 1 区域填充 可以使用xregion及yregion进行区域填充啦&#xff01;&#xff01; x -10:0.25:10; y x.^…

<Linux>环境变量

环境变量 文章目录环境变量一、基本概念二、常见环境变量三、查看环境变量的方法四、测试PATH五、测试HOME六、测试SHELL七、环境变量相关的命令八、环境变量的组织方式九、命令行参数十、通过代码获得环境变量十一、通过系统调用获取环境变量十二、环境变量通常是具有全局属性…

Docker简单上手

Docker 笔记 文章目录Docker 笔记[toc]一、Docker简介docker版本docker 架构二、Docker常用命令docker镜像命令docker容器命令提交docker镜像到阿里云仓库搭建私有docker镜像库三、容器数据卷四、阿里云容器部署1.Tomcat部署2.MySQL部署3.Redis部署一、Docker简介 ​ Docker是…