我们学习了如何编写自动化测试脚本,也能顺利执行并展示结果了,可是我们如何向其他干系人展示测试结果呢??而且尽量优雅美观,不光有数据,还要有图表的那种。来,介绍一个测试报告框架Allure allure官网:https://docs.qameta.io/ 时间充裕且英文好的同学可以直接看官网,任何你想知道的内容都可以在官网上查到,如果时间不充足且英文不太好的同学可以截下来看看我的笔记,入门是没问题的。如果再想进阶,还是得去官网。
allure简介
- allure是一个轻量级、灵活的,支持多语言的测试报告工具
- 多平台的,奢华的report框架
- 可以为dev/qa提供详尽的测试报告,测试步骤及log
- 有可以为管理层提供高水平的统计报告
- Java语言开发的,支持pytest、JavaScript、PHP、ruby等
- 可以集成到Jenkins
allure安装
安装插件allure-pytest
虽然已经成功安装了allure,但是是没有办法单独使用的,需要结合pytest使用,所以还需要下载插件allure-pytest 插件要在python环境下安装,所以使用pip install allure-pytest
allure常用的特性
一、 对测试用例分组
- 根据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添加不同类型的附件,可以补充测试,步骤或测试结果 步骤:上代码:
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
查看报告
收集到测试结果后查看测试报告的方式有两种:
测试报告分析
代码示例
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("这是登出:测试用例,登出失败")
|