Allure 测试报告
🍰 一款轻量级的开源自动化测试报告生成框架,支持绝大部分测试框架,例如:TestNG、JUnit、PyTest、UnitTest等。
1 allure框架
- allure框架
- allure2下载:allure-2.20.1.zip,JDK1.8版本,
pip install allure-pytest
安装Python依赖。 - 添加变量:控制面板—>用户账户—>更改环境变量—>Path—>添加
...\allure-2.20.1\bin
。 - Python依赖包含allure-pytest和allure-python-commons两个包,生成与allure2兼容的报告数据。
- allure2下载:allure-2.20.1.zip,JDK1.8版本,
1 |
|
- 报告结构介绍
- Overview:总览。
- Categories:用例类别,默认failed和error,可快速查看哪些用例执行是failed和error的。
- Suites:即所有用例的层级关系,可以依据package、module、class和method来查找用例。
- Graphs:测试结果的图形化展示,包括分布图等。
- Timeline:测试用例的执行顺序,包括执行时间。
- Behaviors:依据epic、feature、story进行用例分组。
- Packages:按package、module进行测试用例的分组。
1-1 添加环境变量
- 添加环境变量
- Overview的ENVIRONMENT
- 在生成xml格式的报告数据文件夹中,创建一个
environment.properties
文件。 - 同理也可以在生成xml格式的报告数据文件夹中创建一个
environment.xml
文件。
- 在生成xml格式的报告数据文件夹中,创建一个
- 环境变量添加完成后,需要重新执行命令
allure serve report\xml
,在本地浏览器中重新打开报告才能生效。
- Overview的ENVIRONMENT
(1) environment.xml
1 |
|
(2) environment.properties
1 |
|
1-2 自定义缺陷分类
- 自定义缺陷分类
- Categories:在生成xml格式的报告数据文件夹中创建一个
categories.json
文件。 - Json文件参数说明
- name:必填,类别名称,可以是中文。
- messageRegex:可选,用例运行的错误消息,默认
".*"
,可以通过正则表达式进行匹配。 - traceRegex:可选,用例运行错误消息的堆栈跟踪,默认
".*"
,可以通过正则表达式匹配。 - matchedStatuses:可选,用例运行状态,默认
["failed","broken","passed","skipped","unknown"]
。 - 如果用例运行结果的状态在列表中,并且错误消息和堆栈跟踪都与之模式相匹配,则测试结果属于该类别。
- Categories:在生成xml格式的报告数据文件夹中创建一个
1 |
|
2 allure注释说明
- allure注释说明
@allure.step()
:测试用例的步骤,参数传什么,在allure中步骤名就显示什么。@allure.attach()
:显示不同类型的附件,补充测试结果,可依据自身情况调整。@allure.title()
:自定义用例标题,支持占位符传递关键字参数,标题更具可读性。@allure.description()
:为测试用例添加详细的描述,并且将其展示到测试报告中。- 访问链接:将测试报告与bug管理工具或测试管理系统进行关联。
@allure.link()
:访问网址的链接。@allure.issue()
:访问缺陷的链接。@allure.testcase()
:访问用例链接。
- BDD风格的标记:行为驱动开发(BDD),在测试驱动开发(TDD)基础上发展而来的一种软件开发方法。
@allure.epic()
:相当于module级的标签,敏捷里面的概念。@allure.feature()
:相当于class级的标签,epic是feature的父级。@allure.story()
:相当于method级的标签,feature是story的父级。
@allure.severity()
:划分测试用例的等级,并展示到测试报告内。- 测试套件:已有BDD风格的标记,测试套件不常用,可以做简单了解。
@allure.suite()
:是与当前测试套件同级的测试套件。@allure.sub_suite()
:当前测试套件的子级测试套件。@allure.parent_suite()
:当前测试套件的父级测试套件。
2-1 用例步骤
1 |
|
2-2 用例补充
- 用例补充
allure.attach(body, name, attachment_type, extension)
:用于未想要导入现成的附件情况。allure.attach.file(source, name, attachment_type, extension)
:用于已有对应的附件情况。- body(显示内容)、name(附件名)、source(附件路径)。
- extension(附件扩展名)、attachment_type(附件类型)。
- 附件类型
- text
TSV = ("text/tab-separated-values", "tsv")
HTML = ("text/html", "html")
、CSV = ("text/csv", "csv")
TEXT = ("text/plain", "txt")
、URI_LIST = ("text/uri-list", "uri")
- image
PNG = ("image/png", "png")
、BMP = ("image/bmp", "bmp")
JPG = ("image/jpg", "jpg")
、GIF = ("image/gif", "gif")
TIFF = ("image/tiff", "tiff")
、SVG = ("image/svg-xml", "svg")
- video
MP4 = ("video/mp4", "mp4")
OGG = ("video/ogg", "ogg")
WEBM = ("video/webm", "webm")
- application
PCAP = ("application/vnd.tcpdump.pcap", "pcap")
XML = ("application/xml", "xml")
、JSON = ("application/json", "json")
PDF = ("application/pdf", "pdf")
、YAML = ("application/yaml", "yaml")
- text
1 |
|
2-3 用例标题
1 |
|
2-4 用例描述
- 用例描述
- 在用例函数声明的下方使用
""" """
,使用@allure.description()
装饰器。 - 使用
@allure.description_html()
装饰器添加html描述,类似attach传html。
- 在用例函数声明的下方使用
1 |
|
2-5 访问链接
1 |
|
2-6 BDD风格的标记
1 |
|
2-7 用例等级的划分
- 用例等级的划分
- blocker:阻塞缺陷,功能未实现。
- critical:严重缺陷,功能点缺失。
- normal:一般缺陷,边界情况,格式错误。
- minor:次要缺陷,界面错误及UI需求不符。
- trivial:轻微缺陷,必须项无提示,或提示不规范。
1 |
|
2-8 测试套件的使用
- 测试套件的使用
- 未被suite修饰时,一个py文件和一个class默认就是一个测试套件。
- 关系为py包含class套件,py和class下都可有它们各自的测试用例。
- 被suite修饰的类和方法,会被认为是和当前文件同级的测试套件。
- 如果类和类内方法同时被修饰,类修饰会被类内方法的修饰替代。
1 |
|
3 命令行参数介绍
- 命令行参数介绍
pytest --alluredir=./report/xml test_file.py
:执行test_file.py
文件用例。- 当多次执行不同文件用例时,报告存放的路径保持一致,那么报告数据将会累加。
- 使用
--clean-alluredir
命令行参数生成的报告,可以清空报告的历史执行记录。 - 命令:
pytest --alluredir=./report/xml test_file.py --clean-alluredir
。
allure -h
:查看参数帮助文档。- generate:生成allure的html报告。
- serve:启动allure服务,打开报告。
- open:打开用generate生成的报告。
- 浏览器打开allure报告的两种方式
pytest -sq --alluredir=./report/xml
:执行测试用例文件,并指定结果目录。allure serve ./report/xml
:打开allure测试报告。allure generate -c -o ./report/xml ./report/html
:生成allure的html报告。allure open ./report/html
:打开allure测试报告。
4 用例标题动态化
- 用例标题动态化
- 使用参数化,报告默认的用例标题为用例名称,可读性差。
- 参数化使用ids,会保留用例名称,也无法完全解决可读性差的问题。
- 若使用
@allure.title()
装饰器写死用例标题,后期维护成本较高。 - 将parametrize参数化数据驱动与
@allure.title()
装饰器结合使用,更加高效便捷。
4-1 参数化
1 |
|
4-2 参数化id
1 |
|
4-3 参数化ids
1 |
|
4-4 固定标题
1 |
|
4-5 参数化与装饰器结合
1 |
|
5 dynamic动态标记
- dynamic动态标记
allure.dynamic.issue
、allure.dynamic.link
、allure.dynamic.testcase
。allure.dynamic.story
、allure.dynamic.feature
、allure.dynamic.description
。allure.dynamic.title
、allure.dynamic.severity
、allure.dynamic.description_html
。
5-1 更改标题
1 |
|
5-2 添加描述
1 |
|
5-3 参数化设置
1 |
|
5-4 结合其他特性
1 |
|
6 pytest-xdist插件
- pytest-xdist插件
- 为了让自动化测试用例可分布式执行,节省时间,引入pytest-xdist插件。
- pytest-xdist属于进程级别的并发,分布式执行测试用例的设计原则如下。
- 用例之间相互独立:保证用例之间没有依赖关系,可以完全独立运行。
- 用例没有执行顺序:保证随机顺序的执行测试用例,都可以正常执行。
- 用例之间互不影响:保证用例的运行结果不会影响到其他的测试用例。
- 命令窗口下安装pytest-xdist插件:
pip install pytest-xdist
。 - 原理
- xdist通过产生一个或多个由master控制的workers来工作,再按master的指示运行用例。
- 每个workers负责执行收集到的完整测试用例集,master本身是不执行任何测试用例的。
- 命令
- 指定CPU的具体个数:
pytest -s -n num
,-n
可以用--numprocesses
代替。 - 使用与当前计算机CPU内核一样多的进程,速度提升大:
pytest -s -n auto
。
- 指定CPU的具体个数:
1 |
|
6-1 conftest.py
1 |
|
6-2 test_case.py
1 |
|
6-3 test_case1.py
1 |
|
6-4 test_case2.py
1 |
|
6-5 test_case3.py
1 |
|
6-6 两种执行方式
1 |
|
7 插件的文件锁问题
- 插件的文件锁问题
- 优点
- xdist插件充分利用机器多核CPU的优势,提高了资源利用率。
- 将常用的功能放到fixture,更是提高了代码的复用性和维护性。
- 缺点
- 接口自动化时,通常会将接口放到fixture中,并设置
scope=session
,全局只运行一次。 - 此时若使用xdist插件进行分布式执行,
scope=session
的fixture将无法保证只运行一次。
- 接口自动化时,通常会将接口放到fixture中,并设置
- 尽管没有内置支持确保
scope=session
的fixture只执行一次,但可通过文件锁进行进程间的通信来实现。- 使用xdist指定n个线程执行用例时,使用文件锁,fixture实际只执行一次。
- 其他n-1个进程通过进程间读取共享缓存文件的方式,复用fixture的数据。
- 优点
1 |
|
7-1 未用文件锁
1 |
|
7-2 使用文件锁
1 |
|
7-3 test_case1.py
1 |
|
7-4 test_case2.py
1 |
|
7-5 test_case3.py
1 |
|
7-6 执行情况分析
1 |
|
8 重复执行用例插件
- 重复执行用例插件
- pytest-repeat是一个pytest插件,安装命令:
pip install pytest-repeat
。 - 可以重复执行单个测试用例,或多个测试用例,也可以自定义重复执行的次数。
- pytest-repeat是一个pytest插件,安装命令:
1 |
|
8-1 重复直到失败
1 |
|
8-2 repeat装饰器
1 |
|
8-3 命令参数说明
- 命令参数说明
--repeat-scope
:覆盖默认的用例执行顺序,类似于fixture的scope。- function:默认,范围针对每个用例重复执行,然后再执行下一个用例。
- class:以类为用例的集合单位,重复执行类里面的用例,再执行下一个用例。
- module:以模块为集合单位,重复执行模块里面的用例,再执行下一个用例。
- session:重复整个测试会话,即所有测试用例都执行一次,然后再执行第二次。
1 |
|
Allure 测试报告
https://stitch-top.github.io/2023/05/01/ce-shi-kuang-jia/tf03-allure/tf01-allure-ce-shi-bao-gao/