官网:http://allure.qatools.ru
文档:https://docs.qameta.io/allure/#
首页中展示了本次测试的测试用例数量、成功用例、失败用例、跳过用例的比例、测试环境,SUITES,FEATURES BY STORIES等基本信息,当与Jenkins做了持续置成后,TREND区域还将显示,历次测试的通过情况。
首页的左边栏,还从不同的维度展示测试报告的其他信息。
进入Behaviors页面,这个页面按照FEATURES和 STORIES展示测试用例的执行结果。
allure测试报告将每一个测试脚本,作为一个Suite。在首页点击Suites区域下面的任何一条Suite,都将进入Suites页面。
这个页面,以脚本的目录结构展示所有测试用例的执行情况。
这个页面展示了本次测试结果的统计信息,比如测试用例执行结果状态、测试用例重要等级分布、测试用例执行时间分布等。
在Suites页面上点击任何一条测试用例,Suites页面的右侧将展示这条用例的详细执行情况。
从这个页面可以看到测试用例执行的每一个步骤,以及每个步骤的执行结果,每一个步骤都可以添加附件,作为重要信息补充。从这里,对于失败的测试用例,可以一目了然看到原因。
brew install allure
sudo apt-add-repository ppa:qameta/allure
sudo apt-get update
sudo apt-get install allure
注意:allure2需要在java的环境下,jdk1.8级以上
安装插件:pip install allure-pytest
运行:
- 在测试执行期间收集结果:pytest --alluredir=./results
(–alluredir这个选项用于指定存储测试结果的路径)
查看测试报告
方式一:测试完成后查看实际报告,在线看报告,会直接打开默认浏览器展示当前报告
allure serve /tmp/my_allure_results
方式二:从结果生成报告,这是一个启动tomcat的服务,需要两个步骤:生成报告,打开报告
allure generate ./results -o ./report --clean
allure open -h 127.0.0.1 -p 8083 ./report
**场景:**希望在报告中看到测试功能,子功能或场景,测试步骤,包括测试附加信息。
解决:@feature
, @story
, @step
, @attach
步骤:
- import allure
- 功能上加上@allure.feature("功能名称")
- 子功能上加上@allure.story("子功能名称")
- 步骤上加上@allure.step(“步骤细节”)
- @allure.attach("具体文本信息")
,需要附加的信息,可以是数据,文本,图片,视频,网页
- 如果只是测试登录功能运行的时候可以加限制过滤:
- pytest 文件名 --allure_features "购物车功能" --allure-stories "加入购物车"
@allure.feature
与@allure.story
的关系
- feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告 中behaviore中显示,相当于testsuite。
- story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构,报告在feature中显示,相当于testcase。
- feature与story类似于父子关系。
@allure.step()
只能以装饰器形式放在类或者方法上。with allure.step()
,可以放在测试用例方法里面,但测试步骤得代码需要被该语句包含。代码:
import pytest
import allure
@allure.feature("登录模块")
class TestLogin:
@allure.story("登录成功")
def test_login_success(self):
print("这是登录成功的用例1")
@allure.story("登录成功")
def test_login_success2(self):
print("这是登录成功的用例2")
@allure.story("登录失败")
def test_login_fail(self):
print("这是登录失败的用例")
@allure.story("登录失败")
def test_login_fail2(self):
with allure.step("点击用户名"):
print("输入用户名")
with allure.step("点击密码"):
print("输入密码")
with allure.step("点击登录"):
print("进行登录")
with allure.step("断言"):
assert "1" == 1
print("登录失败")
生成测试结果:
# 生成测试结果
pytest test_main.py --alluredir=./results
# 运行指定feature/story的测试用例
pytest test_main.py --allure_features "登录模块" --allure-stories "登录成功"
# 直接使用默认浏览器打开测试报告
allure serve ./results
# 或者生成测试报告,再打开测试报告
allure generate ./results -o ./report --clean
allure open -h 127.0.0.1 -p 8083 ./report
查看测试报告:
--allure-link-pattern=issue:http://xxxx/issue/{}
示例:
import pytest
import allure
@allure.feature("登录模块")
@allure.link(url="http:www.baidu.com", name="百度链接")
class TestLogin:
@allure.story("登录成功")
@allure.testcase(url="http://www.baidu.com", name="百度链接")
def test_login_success(self):
print("这是登录成功的用例1")
# 执行用例时加上这个:--allure-link-pattern=issue:http://xxxx/issue/{}
# 点击 "这是一个issue"就会跳转到:http://xxxx/issue/140
@allure.issue("140", "这是一个issue")
def test_login_success2(self):
print("这是登录成功的用例1")
场景:通过测试有P0,冒烟测试,验证上线测试。按重要性级别来分别执行,比如上线要把主流程和重要模块都跑一遍。
解决:
- 通过附加pytest.mark.标记
- 通过@allure.feature
, @allure.story
- 通过@allure.serverity
来附加标记
- Trivial 不重要 (轻微缺陷,必输项无提示或者提示不规范)
- Minor 不太重要 (次要缺陷,界面错误与UI需求不符)
- Normal 正常问题 (普通缺陷,数值计算错误)
- Critical 严重 (临界缺陷,功能点缺失)
- Blocker 阻塞 (中断缺陷,客户端程序无响应,无法执行下一步操作)
步骤:
- 在方法/函数和类上面加@allure.severity(allure.severity_level=TRIVIAL)
- 执行时:pytest -s -v 文件名 --allure-severities normal,critical
注意:
用例的优先级为就近原则。如果类设置的优先级是Normal, 但是类中的方法设置的优先级是Critical,那么这个类在运行Critical优先级的时候才会运行。
代码:
import pytest
import allure
@allure.feature("登录模块")
@allure.severity(allure.severity_level.NORMAL)
class TestLogin:
@allure.story("登录成功")
def test_login_success(self):
print("这是登录成功的用例1")
@allure.severity(allure.severity_level.CRITICAL)
def test_login_success2(self):
print("这是登录成功的用例2")
@allure.severity(allure.severity_level.NORMAL)
def test_login_success3(self):
print("这是登录成功的用例3")
生成测试结果:
pytest test_main.py --alluredir=./results --allure-severities normal
**场景:**前端自动化测试经常需要提供附加图片或html,在适当地方,适当的时机截图。
解决:@allure.attach显示许多不同类型的提供的附件,可以补充测试,步骤或测试结果。
步骤:
allure.attach(body(内容),name,attachment_type, extension)
allure.attach("首页", "这是错误页的结果信息", allure.attachment_type.HTML)
allure.attach.file(source, name, attachment_type, extention)
allure.attach.file("./results/b.png", attachment_type=allure.attachment_type.PNG)
代码:
import pytest
import allure
@allure.feature("登录模块")
class TestLogin:
@allure.story("登录成功")
def test_login_success(self):
allure.attach("这是一个纯文本", attachment_type=allure.attachment_type.TEXT)
print("这是登录成功的用例1")
def test_login_success2(self):
allure.attach("这是一段html body块", attachment_type=allure.attachment_type.HTML)
print("这是登录成功的用例2")
def test_login_success3(self):
allure.attach.file(r"E:/Users/Flora.Chen/Pictures/logo1.png", name="这是一个图片", attachment_type=allure.attachment_type.PNG)
print("这是登录成功的用例3")