先把怎么使用用文字说明一下,方便大家查询。
这里就不每次都截图了,最后我们放一个整体报告截图。
1、史诗(项目名称):
代码语言:javascript复制@allure.epic("项目名")
2、特性(模块名称):
代码语言:javascript复制@allure.feature("模块名称")
3、分组(接口名称):
代码语言:javascript复制@allure.story("接口名称:登录")
4、测试用例标题:
方式一:【适用于一个方法对应一个用例】
代码语言:javascript复制@allure.title("用例标题")
方式二:写在方法里【适用于一个方法对应多个用例——数据驱动】
代码语言:javascript复制allure.dynamic.title("测试用例标题")
5、用例优先级【默认normal】
代码语言:javascript复制block:中断缺陷:致命bug:用户数据丢失、系统崩溃
critical:临界缺陷:严重bug:功能未实现
normal:一般缺陷:一般bug:条件查询有误,数据未响应
minor:次要缺陷:提示bug:颜色、页面变形、错别字
trivial:轻微bug:必填项没有提示
代码语言:javascript复制@allure.severity(allure.severity_level.级别)
如果一个类下所有用例级别都是相同的,可以在类上面进行标记
6、用例描述
方式一
代码语言:javascript复制@allure.description("用例描述")
方式二:在代码里
代码语言:javascript复制allure.dynamic.description("用例描述")
方式三:在代码里添加注释
代码语言:javascript复制"""
注释内容
"""
7、用例链接
接口地址【有点问题】
代码语言:javascript复制@allure.link(url="url", name="接口地址")
bug地址
代码语言:javascript复制@allure.issue("url", name="bug地址")
测试用例地址
代码语言:javascript复制@allure.testcase("url", name="用例地址")
8、测试步骤
方法一:装饰器,当一个方法里有多个步骤时就不好用了
代码语言:javascript复制@allure.step("步骤一")
方法二:方法里写
代码语言:javascript复制with allure.step("步骤一"):
同时写时装饰器名称就会变成文件夹/折叠名,然后下面的步骤都在这个文件夹/折叠里。一般用不着这样,去掉装饰器方式就行。
9、附件定制
代码语言:javascript复制allure.attach()
# 参数
body:附件内容
name:文件名
attachment_type:文件扩展名
web/ui自动化:
代码语言:javascript复制with open("/Users/macbook/Desktop/file.jpg", mode="rb") as fp:
allure.attach(body=fp.read(), name="selenium错误截图", attachment_type=allure.attachment_type.JPG)
接口自动化:
代码语言:javascript复制allure.attach(body="api.weixin.qq.com", name="请求地址", attachment_type=allure.attachment_type.TEXT)
allure.attach(body="/api/get_token", name="请求路径", attachment_type=allure.attachment_type.TEXT)
当做了封装以后,以上截图或者接口返回信息都可以通过调用返回值进行填充,这里只是举例子。
代码
代码语言:javascript复制# coding: utf-8
import os
import allure
import pytest
@allure.epic("项目名称:allure报告定制化")
@allure.feature("模块名称:商品管理模块")
class TestReg():
@pytest.fixture(scope="function", autouse=True)
def test_login(self):
print("先登录")
yield
print("退出")
@allure.story("接口名称:登录")
@allure.title("用例1")
@allure.severity(allure.severity_level.MINOR)
@allure.description("用例描述test_01")
@allure.link(url="api.weixin.qq.com", name="接口地址")
@allure.issue(url="api.weixin.qq.com", name="bug地址")
@allure.testcase(url="api.weixin.qq.com", name="用例地址")
@allure.step("测试步骤文件夹名")
def test_01(self):
with allure.step("步骤一"):
print("操作步骤一")
with allure.step("步骤二"):
print("操作步骤二")
with allure.step("步骤三"):
print("操作步骤三")
# 接口自动化错误截图
allure.attach(body="api.weixin.qq.com", name="请求地址", attachment_type=allure.attachment_type.TEXT)
allure.attach(body="/api/get_token", name="请求路径", attachment_type=allure.attachment_type.TEXT)
# web/UI自动化错误截图
with open("/Users/macbook/Desktop/file.jpg", mode="rb") as fp:
allure.attach(body=fp.read(), name="selenium错误截图", attachment_type=allure.attachment_type.JPG)
@allure.story("接口名称:登录")
@allure.title("用例2")
@allure.severity(allure.severity_level.CRITICAL)
def test_02(self):
"""
这样也能加用例描述
test_02
:return:
"""
print("登录后第二个操作")
@allure.epic("项目名称:allure报告定制化")
@allure.feature("模块名称:商品管理模块2")
class TestReg1():
@pytest.fixture(scope="function", autouse=True)
def test_login1(self):
print("先登录")
yield
print("退出")
@allure.story("接口名称:登录2")
@allure.title("方法名1")
def test_011(self):
print("登录后的操作")
@allure.story("方法名/模块名称2")
@allure.title("方法名")
def test_021(self):
print("登录后第二个操作")
报告截图
注意:从报告可以看出,相同的模块名称会自动放到一个分类折叠下
我们在项目中建议大家用allure.dynamic.xxx模式写在代码里面,不然做数据驱动时多个用例的名称都是一样的。