pytest+allure生成测试报告
一、简介
Allure优势:
- Allure 简单易用,支持同目前绝大多数测试框架集成,如 JUnit、Pytest、Cucumber、TestNG、Mocha 等;
- 原生提供了中文支持;
- Allure 生成的自动化测试报告层次丰富,界面美观,体现了现代测试报告的发展趋势。
二、Allure 下载安装
1、官网下载https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.13.2/
2、下载.zip文件解压到 pytest 目录中,然后设置环境变量,cmd 输入 allure 查看环境变量是否设置成功。
3、下载allure-pytest,用来生成 Allure 测试报告所需要的数据。
pip3 install allure-pytest
三、实例演示
1、编写一段pytest框架的测试代码
import os
import pytest
import allure
@pytest.fixture(scope='function')
def login():
print('模拟登陆操作')
yield
print('登陆完成')
@allure.feature('购买a')
def test_1(login):
'''购买物品a
'''
print('测试用例test_1')
@allure.feature('购买b')
def test_2():
'''购买物品b'''
print("测试用例test_2")
if __name__ =="__main__":
# 执行pytest单元测试,生成 Allure 报告需要的数据存在 /temp 目录
pytest.main(['test1.py','-s','--alluredir', './temp'])
# 执行命令 allure generate ./temp -o ./report --clean ,生成测试报告
os.system('allure generate ./temp -o ./report --clean')
2、执行后生成Allure报告:
打开 index.html ,测试报告如下:
3、@allure 装饰器中的一些功能点:
1)想对你的用例集分层,增加可读性,可以使用以下三个装饰器,写在类或方法前面:
- @allure.epic :敏捷里的概念,定义史诗
- @allure.feature :用于定义被测试的功能,被测产品的需求点
- @allure.story : 用于定义被测功能的用户场景,即子功能点
@allure.epic('这是一个测试')
@allure.feature('购物车')
@allure.story('加购商品')
def test(login):
'''将苹果加入购物车'''
print("测试用例")
2)想对单个用例添加标题和用例描述,增加可读性,使用以下两个装饰器:
@allure.description :添加测试用例描述,参数类型为str,与使用''' '''效果类似。如果想传html,请使用 @allure.description_html
@allure.title :修改单个测试用例标题,支持传递关键字参数
@allure.description('这里是描述信息')
@allure.title('这里是标题')
def test_3(login):
'''将苹果加入购物车'''
print("测试用例")
3)动态生成功能,以下方法都支持动态生成,也可以覆盖装饰器 @allure 的内容
allure.dynamic.feature
allure.dynamic.link
allure.dynamic.issue
allure.dynamic.testcase
allure.dynamic.story
allure.dynamic.title
allure.dynamic.description
@allure.description('测试用例描述')
@allure.title('测试标题')
def test_4():
allure.dynamic.description('动态描述')
allure.dynamic.title('动态标题')
print("测试用例")
4)如果想对每个测试用例进行非常详细的步骤信息说明,提高可读性,可以使用以下两个方法:
- allure.step :对每个测试用例进行步骤说明
- allure.attach :输出内容
先看下 allure.attach(body, name=None, attachment_type=None, extension=None) 定义,参数如下
- body:要显示的内容(附件)
- name:附件名字
- attachment_type:附件类型,是 allure.attachment_type 里面的其中一种
- extension:附件的扩展名
也可以使用文件路径:allure.attach.file( source, body, name=None, attachment_type=None, extension=None),source为文件路径,其他参数和上述一致
@allure.description('测试用例描述111')
@allure.title('测试标题111')
def test_5():
url="http://www.baidu.com"
h=requests.get(url=url)
with allure.step('请求'):
allure.attach('{}'.format(url),name='get请求')
with allure.step('响应'):
allure.attach('{}'.format(h.status_code), name='状态码')
with allure.step('断言'):
assert h.status_code == 200
allure.attach('OK', name='断言')
4、一些常用命令
1)generate 命令行参数
作用:
生成 allure 的html 报告
allure generate [options] allure 结果目录
命令选项:
-o,--report-dir,--output :生成allure报告的目录;默认执行当前目录下的allure-report;没有目录则自动生成
--config:allure命令行配置路径,如果指定会覆盖--profile和--configDirectory
--configDirectory:allure命令行配置目录
--profile:allure命令行配置文件
-c,--clean:删除allure报告生成的目录,就是-o跟的目录
示例:allure generate ./temp -o ./report --clean
2)open 命令行参数
作用:
打开生成的 allure 报告,就是打开 generate 命令生成的报告
open [options] allure 报告目录
命令选项:
-h,--host:该host将用于启动报告的web服务器
-p,--port:该port将用于启动报告的web服务器
示例:allure open -h 127.0.0.1 -p 8883 ./report
3)serve 命令行参数
作用:
启动 allure 服务,打开 allure 报告
serve [options] allure 结果目录
注:allure 结果目录就是运行 pytest 命令,--alluredir 跟的那个目录
pytest -sq --alluredir= ./allure
命令选项:
--config:allure命令行配置路径,如果指定会覆盖--profile和--configDirectory
--configDirectory:allure命令行配置目录
--profile:allure命令行配置文件
-h,--host:该host将用于启动报告的web服务器
-p,--port:该port将用于启动报告的web服务器
4)浏览器打开 allure 报告的两种方式
allure serve
# 执行 pytest,指定 allure 结果目录
pytest -sq --alluredir=./allure
# 打开 allure 报告
allure serve ./allure
allure generate + allure open
# 执行 pytest,指定 allure 结果目录
pytest -sq --alluredir=./allure
# 生成 allure 的 html 报告
allure generate -c -o ./allure-report ./allure
# 打开 allure 报告
allure open ./allure-report
5)其他
1、使用 --clean-alluredir 如果已经存在报告,就先清空它,不添加此命令,可保留历史数据,与历史运行数据做对比
pytest.main(['test1.py','-s','--alluredir', './temp','--clean-alluredir'])
2、--allure-no-capture 不加载 logging/stdout/stderr 文件到报告
参考文献:https://www.cnblogs.com/shenh/p/11577908.html
- 下一篇:pytest–编写钩子函数