pytest学习和使用22-allure特性 丨总览中的Environment、Categories设置以及Flaky test使用
创始人
2025-06-01 06:36:17
0

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>BrowserChromeBrowser.Version111.0.5563.65EnvTestIP192.168.1.133Allure-Pytest.Version2.8.12

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)

相关内容

热门资讯

oppo安卓版系统设置,全面解... 亲爱的手机控们,你是不是也和我一样,对OPPO安卓版系统的设置充满了好奇?想要让你的OPPO手机更加...
安卓系统是什么cp,CP架构下... 你有没有想过,你的手机里那个默默无闻的安卓系统,其实就像是一个超级贴心的CP(情侣搭档)呢?没错,就...
系统垃圾清理大师 安卓,安卓手... 手机里的垃圾文件是不是让你头疼不已?别急,今天我要给你介绍一位安卓系统里的“清洁小能手”——系统垃圾...
安卓系统分为几层,安卓系统分层... 你知道吗?安卓系统,这个陪伴我们手机生活的“小助手”,其实它内部结构可是相当复杂的呢!今天,就让我带...
系统最像苹果的安卓,揭秘最像苹... 你有没有发现,现在的安卓手机越来越像苹果了?没错,就是那个以简洁设计和流畅体验著称的苹果。今天,就让...
安卓更新13系统游戏,性能升级... 你知道吗?最近安卓系统又来了一次大变身,那就是安卓13系统!这次更新可是带来了不少惊喜,尤其是对那些...
安卓系统开机出错了,安卓系统开... 手机突然开不了机了,这可怎么办?别急,让我来帮你分析一下安卓系统开机出错的那些事儿。一、安卓系统开机...
vovg是安卓系统吗,安卓系统... 你有没有听说过Vovg这个操作系统?最近,这个名词在数码圈里可是引起了不小的热议呢!很多人都在问,V...
谷歌终止安卓系统更新,影响与未... 你知道吗?最近科技圈可是炸开了锅,因为谷歌突然宣布了一项重大决定——终止对某些安卓系统的更新!这可不...
塞班系统比安卓好,超越安卓的卓... 你知道吗?在手机操作系统的大战中,塞班系统和安卓系统一直是你争我斗的态势。但你知道吗?塞班系统在某些...
安卓系统手机便宜测评,深度测评... 你有没有想过,为什么安卓系统手机总是那么便宜呢?是不是觉得它们质量不好?别急,今天我就要带你深入了解...
安卓怎么扫描门禁系统,安卓设备... 你有没有想过,家里的门禁系统竟然也能用手机轻松搞定?没错,就是那个你每天进出都离不开的安卓手机!今天...
安卓系统账号注册过程,安卓系统... 你终于决定加入安卓系统的大家庭啦! 想必你对这个系统充满了期待,不过别急,注册账号可是第一步哦!今天...
日产天籁的安卓系统,智能驾驶体... 你有没有注意到,最近开车的朋友们都在议论纷纷,说他们的日产天籁换了个新玩意儿——安卓系统!这可不是什...
安卓系统怎么下载闹钟,安卓系统... 你有没有发现,每天早晨闹钟一响,整个人就像被电击了一样,瞬间清醒?没错,闹钟可是我们生活中不可或缺的...
手机系统设置铃声安卓,个性化定... 手机里那首动听的铃声,是不是让你每次听到都忍不住嘴角上扬呢?今天,就让我带你一起探索安卓手机系统设置...
安卓电脑双系统平板,畅享多模态... 你有没有想过,一台平板电脑既能满足你办公的需求,又能让你畅享娱乐时光?现在,有一种神奇的设备——安卓...
创维电视安卓系统2.3,回顾经... 你有没有发现家里的创维电视有点儿“老态龙钟”了?别急,别急,今天就来给你揭秘一下这款电视的“内心世界...
如何破解车载安卓系统,轻松解锁... 如何破解车载安卓系统:揭秘背后的技术与风险在当今这个数字化飞速发展的时代,汽车已经不仅仅是一种交通工...
安卓机上的windows系统,... 你有没有想过,把Windows系统的强大功能搬到安卓机上?想象那可是个让人眼前一亮的操作体验呢!今天...