我们学习了如何编写自动化测试脚本,也能顺利执行并展示结果了,可是我们如何向其他干系人展示测试结果呢??而且尽量优雅美观,不光有数据,还要有图表的那种。来,介绍一个测试报告框架Allure
allure官网:
https://docs.qameta.io/
时间充裕且英文好的同学可以直接看官网,任何你想知道的内容都可以在官网上查到,如果时间不充足且英文不太好的同学可以截下来看看我的笔记,入门是没问题的。如果再想进阶,还是得去官网。
allure简介
- allure是一个轻量级、灵活的,支持多语言的测试报告工具
- 多平台的,奢华的report框架
- 可以为dev/qa提供详尽的测试报告,测试步骤及log
- 有可以为管理层提供高水平的统计报告
- Java语言开发的,支持pytest、JavaScript、PHP、ruby等
- 可以集成到Jenkins
allure安装
-
win/mac通用安装方法
-
下载地址:
https://repo1.maven.org/maven2/io/qameta/allure/allure-commandline/
- 下载allure2.7.zip包
- 解压->进入bin目录->运行allure.bat
- 把bin目录加入PATH环境变量
-
下载地址:
-
mac可以使用brew安装:
-
brew install allure
-
-
文档:
https://docs.qameta.io/allure/
安装插件allure-pytest
虽然已经成功安装了allure,但是是没有办法单独使用的,需要结合pytest使用,所以还需要下载插件allure-pytest
插件要在python环境下安装,所以使用
pip install allure-pytest
allure常用的特性
一、 对测试用例分组
- 场景:希望在报告中看到测试功能、子功能或场景、测试步骤、包括测试附加信息
- 解决:添加装饰器@allure.feature、@allure.story、@allure.step、@allure.attach
-
步骤:
1.import allure
2.功能上加@allure.feature,一般是在类上
3.子功能上加@allure.story,一般是在方法上、
4.步骤上加@allure.step、
5.打印具体的文本信息加@allure.attach,需要附加的信息,可以是数可据,文本,图片,视频、网页等 -
执行
可以根据feature或者story过滤用例执行。如果对参数不熟悉,可以使用
pytest --help|grep allure
获取,如下:(allure-env) Yujin:allure yujin$ pytest --help|grep allure --allure-severities=SEVERITIES_SET --allure-epics=EPICS_SET --allure-features=FEATURES_SET --allure-stories=STORIES_SET --allure-ids=IDS_SET Comma-separated list of IDs. --allure-link-pattern=LINK_TYPE:LINK_PATTERN --alluredir=DIR Generate Allure report in the specified directory (may --clean-alluredir Clean alluredir folder if it exists --allure-no-capture Do not attach pytest captured logging/stdout/stderr to
用法如下:
-
根据feature过滤:
pytest test_allure.py --allure-features="登录模块" -vs
-
根据story过滤:
pytest test_allure.py --allure-stories="登录失败" -vs
-
如果希望执行多个story或者feature,多个story名或feature名中间加“,”即可
pytest test_allure.py --allure-stories="登录失败","登出失败" -vs
但是注意,–allure-features和–allure-stories同时使用时,如果–allure-features中的用例包括了–allure-stories的用例,则只执行–allure-features的用例;如果不包含,则同时执行–allure-features和–allure-stories的用例
是的,通过
pytest -m
参数也可以实现分组运行测试用例的目的,但是为例在测试用例中展示,结合allure特性更直观
二、allure特性 – testcase
场景:自动话测试用例执行失败了,希望关联手工测试的地址,方便测试人员定位bug
解决:添加@allure.testcase(TEST_CASE_LINK,“地址描述”)
@allure.feature("搜索模块")
class TestSearch:
@allure.step("步骤1,打开应用")
def start_app(self):
return True
@allure.step("步骤2,输入搜索关键字")
def send_key(self):
return True
@allure.step("步骤3,展示搜索结果")
def show_result(self):
return True
@allure.story("搜索成功")
def test_search_succ(self):
self.start_app()
self.send_key()
self.show_result()
assert True
@allure.testcase("www.baidu.com", "测试用例连接地址")
@allure.story("搜索失败")
def test_search_fail(self):
self.start_app()
self.send_key()
self.show_result()
assert False
测试报告中展示测试链接
三、按重要级别进行一定范围的测试用例执行
场景:通常测试有冒烟测试、验证上线测试等场景,安重要性级别来分别执行,比如上线前要把猪流程和重要模块都跑一遍
解决:通过在方法、函数和类上添加allure.severity来附加标记
- Trivial 不重要,轻微缺陷(如必输项无提示,或者提示不规范)
- Minor 不太重要,次要缺陷(如界面错误与UI需求不符)
- Normal 正常,普通缺陷(数值计算错误等)
- Critical 严重(如功能点缺失)
-
Blocaker 阻塞(如客户端程序无响应,无法执行下一步操作等)
执行:
pytest 文件名 --allure-severities=normal -vs
问题:如果类上标注是normal级别,类里的方法标注是critical级别,那执行normal级别的用例时会执行那些用例呢??
答案:会执行normal类里未标注级别或者标注级别是normal的用例。
四、给测试用例重命名
场景:测试用例的名字默认展示的是测试用例的方法名,可以给测试用例起一个名字,方便其他同学阅读测试报告。
解决:添加@allure.title标记
类似于实现@pytest.mark.parametrize的ids功能
五、前端自动化测试截图
场景:前端自动化测试经常需要附加图片、视频、html等,在适当的地方适当的时机截图并保存添加到测试报告中。
解决:@allure.attach添加不同类型的附件,可以补充测试,步骤或测试结果
步骤:上代码:
# 截图并在报告中添加图片
def save_png(self, filename,name=None):
"""
:param filename: 图片路径
:param name: 添加到报告中到图片名称
:return:
"""
self.driver.save_screenshot(f"{rootdir}/screenshot/{filename}.png")
allure.attach.file(f"{rootdir}/screenshot/{filename}.png", name=name,attachment_type=allure.attachment_type.PNG)
# 报告中添加各种类型的文件
class TestAttach:
def test_attach_text(self):
allure.attach("这是一段文本",attachment_type=allure.attachment_type.TEXT)
def test_attach_html(self):
allure.attach("这是body",attachment_type=allure.attachment_type.HTML)
def test_attach_png(self):
allure.attach.file("./images/001.png",name="这是测试结果截图1",attachment_type=allure.attachment_type.PNG)
def test_attach_video(self):
allure.attach.file("./images/002.mp4",name="这是测试结果截图",attachment_type=allure.attachment_type.MP4)
这里使用的文件都是写死的文件,会在web/app的UI自动化里补充如何截图及重命名。
运行
结合allure的特性运行测试用例并收集测试结果
–alluredir参数用于执行存放测试结果路径,测试结果文件为json格式或者txt格式
pytest test_allure.py --alluredir=./result
查看报告
收集到测试结果后查看测试报告的方式有两种:
-
方式一:直接看报告
allure serve ./result
测试完成后查看实际报告,在线看报告,会直接打开默认浏览器并展示当前报告
-
方式二:从结果生成报告
这是一个启动tomcat的服务,需要两个步骤:生成报告、打开报告- 生成报告:
allure generate ./result -o ./report --clean
allure generate
默认将测试报告存在allure-report目录下,如果希望存放在其他的目录下,添加
-o
参数
注意
--clean
参数是覆盖路径,如果不添加此参数会在原有报告上叠加-
打开报告
会在指定host和port上打开测试报告
allure open -h 127.0.0.1 -p 8883 ./report
测试报告分析
代码示例
feature 、story、step通过在方法上添加装饰器的形式定义,这种方法实现了对测试用例分层,推荐使用这种方法。
@allure.feature("搜索模块")
class TestSearch:
@allure.step("步骤1,打开应用")
def start_app(self):
return True
@allure.step("步骤2,输入搜索关键字")
def send_key(self):
return True
@allure.step("步骤3,展示搜索结果")
def show_result(self):
return True
def test_search(self):
self.start_app()
self.send_key()
self.show_result()
step还可以在测试用例中定义,如代码:
@allure.feature("登出模块")
class TestLogout:
@allure.story("登出成功")
def test_logout_success(self):
with allure.step("步骤1,进入【我的】页面"):
print("进入我的页面")
with allure.step("步骤2、点击退出按钮"):
print("点击退出按钮")
with allure.step("步骤3、退出成功"):
print("退出成功")
print("这是登出:测试用例,登出成功")
@allure.story("登出失败")
def test_logout_fail(self):
with allure.step("步骤1,进入【我的】页面"):
print("进入我的页面")
with allure.step("步骤2、点击退出按钮"):
print("点击退出按钮")
with allure.step("步骤3、退出失败"):
print("退出失败")
print("这是登出:测试用例,登出失败")