测试报告 pytest-allure插件
什么是allure
- 是一个轻量级、灵活的、支持多语言的测试报告工具
- 多平太、奢华的report框架
- 可以为dev/qa提供详尽的测试报告、测试步骤、log
- 为管理层提供high level统计报告
- java语言开发的、支持pytest、javascript、php、ruby
- 可以集成到jenkins
下载安装
windows安装
- jdk1.8+
- 解压到allure-commandline目录
- 进入到bin目录,运行allure.bat
- 添加环境变量
# 添加到PATH
# 添加完后可能需要重启pycharm或者电脑,可以使用echo %path% 打印环境变量
\安装路径\allure-commandline\bin
- cmd下验证安装
allure --version
- 安装扩展包
pip install allure-pytest
Mac安装
- 解压下载的
zip
包到目录下:/Users/xxx/Goshawk
unzip -d /Users/xxx/Goshawk allure-commandline-2.25.0.zip
- 添加环境变量
vim ~/.bash_profile
# allure-commandline-2.25.0
export PATH=$PATH:/Users/xxx/Goshawk/allure-2.25.0/bin
# 添加完记得保存 :wq
# 生效环境变量
source ~/.bash_profile
- 验证安装
# 输出版本号即成功
allure --version
生成测试报告
指定测试报告目录
- 在测试执行期间收集结果
pytest [测试文件/目录] -s -q --alluredir=./result/(--alluredir这个选项用于指定测试结果的路径)
# --alluredir=指定测试数据目录和运行结果
# test.py为测试用例文件(可以不加,也可以放测试用例目录)
pytest test.py --alluredir=../result/report/1
或者
# 想要打印出测试用例详细、PASSED以及进度条加-v
pytest -v test.py --alluredir=../result/report/1
-
查看测试报告
- 方式一:测试完成后,查看实际报告,在线看报告,会直接打开默认浏览器展示
# 指定测试报告目录 # 将测试数据转化测试报告 allure serve ../result/report/1
-
方式二:从结果生成报告,这是一种启动tomcat的服务,需要两个步骤:生成报告,打开报告
- 生成报告
allure test.py serve ../result/report/1 # 注意:覆盖路径加--clean(清空已有的报告,避免覆盖时出错) allure generate ../result/report/1 -o ../result/report/1 --clean # 执行后生成以下文件夹和文件
- 打开报告
allure open -h 127.0.0.1 -p 8883 ../result/report/1
每次用例执行之前先清空allure的报告记录
pytest -v test_calc.py --alluredir=../report/1
pytest test_calc.py --alluredir=./report/1 --clean-alluredir
allure serve ../report/1
allure装饰器
用例描述
@allure.feature() 标注模块名称/添加标识(功能点描述)
@allure.story() 标注feature功能模块下的分支功能/用户故事
@allure.step() 标注操作步骤
用法
- @allure.step() 只能以装饰器的形式放在类或者方法上面
- with allure.step(): 可以放在测试用例方法里面,但测试步骤的代码需要被该语句包含,如下代码
@allure.story("密码缺失")
def test_login_failure(self):
with allure.step("点击用户名"):
print("输入用户名")
with allure.step("点击密码"):
print("输入密码")
print("点击登录")
with allure.step("点击登录之后登录失败"):
asser '1' == 1
print("登录失败")
pass
@allure.issue() 对应bug管理系统里面的链接/关联bug
@allure.link("http://www.baidu.com")
def test_with_link():
print("这是一条加了链接的测试用例")
pass
# 效果如图2
# 可以使用此种方式链接到测试用例管理系统上,测试用例名使用name参数,比如:name="登录用例"
@allure.link("http://www.baidu.com",name="链接")
def test_with_link():
print("这是一条加了链接的测试用例")
pass
# 使用此种方式链接到bug管理系统上,140为bug_id,后面一串是bug的说明/描述
# 地址需要在执行命令的时候给
# --allure-link-pattern=issue:http://www.mytesttracker.com/issue/{}
# 完整命令如下
# pytest test.py ----allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} --alluredir=../result/report/1
@allure.issue('140','Pytest-flaky test retries shows like test steps')
def test_with_issue_link():
pass
TEST_CASE_LINK='https://github.com/qameta/allure-integrations/issues/8#'
@allure.issue(TEST_CASE_LINK,'Test case title')
def test_with_testcase_link():
pass
图2
@allure.attach() 添加图片、文本信息、html
-
场景
- 前端自动化测试经常需要附加图片、文本信息、附件、视频、代码块或者html,在适当的地方、适当的时机截图
-
解决
- @allure.attach 显示许多不同类型的提供的福建、可以补充测试、步骤或测试结果
-
步骤
- 在测试报告里附加网页
# allure.attach(body(内容),name,attachment_type,extension): # allure.attach('<head></head><body>首页</body>','这是错误也的结果信息',allure.attachment_type.HTML)
- 在测试报告里附加图片
# allure.attach.file(source,name,attachment_type,extension): # allure.attach.file("./result/b.png",attachment_type=allure.attachment_type.PNG)
-
举个例子
-
代码
- 添加文本信息
import allure def test_attach_text(): allure.attach("这是一个文本",attachment_type=allure.attachment_type.TEXT) # 执行运行 # pytest -v test_calc.py --alluredir=../report/1 # allure serve ../report/1
-
+ 添加html代码块
```python
import allure
def test_attach_html():
allure.attach("<body>这是一段html body块</body>","html测试块",attachment_type=allure.attachment_type.HTML)
```
+ 添加图片
```python
# 错误演示,使用文件时需要到allure.attach.file方法
import allure
def test_attach_photo):
allure.attach("../report/photo/a.jpg",name="这是图片",attachment_type=allure.attachment_type.JPG)
```
+ 执行以下命令
```python
pytest -v test_calc.py --alluredir=../report/1
allure serve ../report/1
```
注意:此时图片展示不出来的时候
+ 解决图片展示不出来的问题,可以去查看attach源码
使用文件的时候需要用到file方法
```python
# 正确用法
import allure
def test_attach_photo):
allure.attach.file("../report/photo/a.jpg",name="这是图片",attachment_type=allure.attachment_type.JPG)
# 执行命令
pytest -v test_calc.py --alluredir=../report/1
allure serve ../report/1
```
效果如图
allure特性
@allure.feature与@allure.story的关系
- feature相当一个功能,一个大的模块,将case分类到某个feature中,报告中behaviore中显示,相当于testsuite
- story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构,报告在features中显示,相当于testcase
- feature与story类似于父子关系
@allure.epic与@allure.feature的关系
- epic与feature类似父子关系
@allure.story与@allure.title的关系
- story与title类似父子关系
@allure.step
- 测试过程中每个步骤,一般放在具体逻辑方法中
- 可以放在关键步骤中,在报告中显示
- 在app,web自动化测试当中,建议没切换到一个新的页面当做一个step
@allure.issue
-
关联bug
- 执行的时候需要加个参数
--allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} # 完整命令如下 pytest test.py ----allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} --alluredir=../result/report/1
@allure.testcase
- 关联测试用例(可以直接给测试用例的地址链接)
@allure.epic() epic描述(敏捷里面的概念、定义史诗,往下是feature)
@allure.epic('测试API接口'.center(30,'*'))
class TestHttpbin:
"""测试模块httpbin"""
def test(self):
"""所有用例执行前的条件"""
print("测试用例")
# 执行参数加上
--allure-epics=EPICS_SET
Comma-separated list of epic names. Run tests that
have at least one of the specified feature labels.
pytest --alluredir=../result/report/1 --allure-epics=epic对大Story的一个描述性标签
@allure.suite() 测试套件/测试(集)套件,不用报告默认显示py文件名
allure.tag() 测试用例标记 (用于给用例打个标记)
allure.title(“用例标题”) 测试用例的标题(重命名html报告名称)
@alluredescription() 用例描述
运行
只运行一个模块(添加)
@allure.feature("登录模块")
class TestLogin():
@allure.story("登录成功")
def test_login_success(self):
print("登录测试用例:登录成功")
pass
@allure.story("用户名缺失")
def test_login_failure(self):
print("登录测试用例:登录成功")
pass
执行命令
pytest test.py --allure-features '登录模块'
按重要性级别进行一定范围测试
-
场景
- 通常测试有P0、冒烟测试、验证上线测试。按重要性界别来分别执行的,比如上线要吧主流程和重要模块都跑一遍
-
解决
- 通过附加pytest.mark标记
- 通过allure.feature或者allure.story
- 也可以通过 allure.severity 来附加标记
- 级别:Trivial:不重要,Minor:不太重要,Normal:正常问题,Critical:严重,Blocker:阻塞
-
步骤
-
在方法、函数和类上面加
@allure.severity(allure.severity_level.TRIVIAL)
-
执行时
pytest -s -v 文件名 --allure-severities normal,critical
Blocker级别:中断bug(客户端程序没有响应,无法执行下一步操作) Critical级别:临界bug(功能点缺失) Normal级别:普通bug(数值计算错误) Minor级别:次要bug(界面错误与UI需求不符) Trivial级别:轻微bug(必输项没有提示,或者提示不规范,建议性等)
-
-
举个例子
- 代码如下
@allure.severity(allure.severity_level.TRIVIAL) def test_with_trivial_severity(): pass @allure.severity(allure.severity_level.NORMAL) def test_with_normal_severity(): pass @allure.severity(allure.severity_level.NORMAL) class TestClassWithNormalSeverity(object): def test_inside_the_normal_severity_test_class(self): pass @allure.severity(allure.severity_level.CRITICAL) def test_inside_the_normal_severity_test_class_with_overriding_critical_severity(self): pass
- 在命令行执行
# 多个级别用逗号隔开 pytest test.py --alluredir=../result/report/1 --allure-severities normal,critical
- 在pycharm右键使用run运行,需要配置Additional Arguments
整理运行方式
# 选择运行你要执行epic的用例
pytest --alluredir ./report/allure --allure-epics=epic对大Story的一个描述性标签
# 选择运行你要执行features的用例
pytest --alluredir ./report/allure --allure-features=模块2
# 选择运行你要执行story的用例
pytest --alluredir ./report/allure --allure-stories="用户故事:1"
多并发运行
安装补充
使用库:pytest4.0,pytest-allure-adaptor
注意不要安装allure-pytest该库,否则会出现option names {'alluredir'} already added错误
1,安装PowerShell (win10自带有,其他系统自行安装)
2,打开PowerShell,输入命令:
set-executionpolicy remotesigned -s cu
再输入
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
输入scoop help 可查看scoop命令列表
3,在PowerShell命令窗口输入 scoop install allure
4,进入存放用例py文件的目录下,执行
py.test --alluredir=reports
存放用例的目录中会多一个reports文件夹,里面是各种txt和json文件
再执行
allure generate reports
存放用例的目录中会多一个allure-reports文件夹,更新allure-reports文件夹内容使用
allure generate reports --clean