场景:当自动化测试使用excel测试用例驱动时,动态显示模块名和用例标题就很有用。
allure.dynamic.feature allure.dynamic.link allure.dynamic.issue allure.dynamic.testcase allure.dynamic.story allure.dynamic.title allure.dynamic.description
https://blog.csdn.net/lixiaomei0623/article/details/120273737
python读取excel测试用例数据
一、allure报告动态参数化展示模块名和用例标题
使用@pytest.mark.parametrize 参数化完成数据驱动时,如果标题写死或者使用别名的方式 这样在报告中的可读性也不高。
如何更美观的展示报告,增加报告的可读性呢,我们需要把从excel中获取到的sheetName作为动态的模块名,caseName作为每条用例的名称。
方法一:allure.dynamic 动态属性
只需要增加一行代码,如下图所示
allure.dynamic.title(step_name)
import allure
import pytest
from util import excel_readUtil
list_step = excel_readUtil.HandleExcel(filename='C://Users//YM520//Desktop//caseqq.xlsx', sheetname='test00').get_cases()
@allure.epic('项目名称01')
@allure.feature('登录模块') # 一般用在类上方
@allure.title('测试用例标题')
@allure.story('登录成功')
# @allure.severity(allure.severity_level.CRITICAL
@pytest.mark.parametrize('case_yy', list_step)
def test_login(case_yy):
step_name = case_yy.get('stepN', None)
allure.dynamic.title(step_name)
with allure.step('输入用户名'):
print('请输入用户名')
user = input()
with allure.step('输入密码'):
print('请输入密码')
password = input()
with allure.step('点击登录按钮'):
print('点击登录按钮')
# 这里假设有一个名为click_login的函数可以模拟点击登录按钮
# click_login(user, password)
with allure.step('检查是否登录成功'):
# assert check_login(user)
assert user != password
上边用的是下边这种方式:pytest 结合 allure 描述用例的时候我们一般使用 @allure.title
和 @allure.description
描述测试用例的标题和详情。
在用例里面也可以动态更新标题和详情,使用allure.dynamic方法实现。
allure.dynamic 动态属性
feature 模块
allure.dynamic.feature(feature_name)
功能点 story
allure.dynamic.story(case_story)
用例标题 title
allure.dynamic.title(case_title)
title 用例标题
用例标题也可以被动态更新(feature/story 不会被动态更新,而是新增)
@allure.title("This title will be replaced in a test body")
def test_with_dynamic_title():
assert 2 + 2 == 4
allure.dynamic.title('After a successful test finish, the title was replaced with this line.')
allure.dynamic支持的常用方法,灵活使用能够重外部数据控制测试用例的详细展示内容
方法 | 效果 | 实现pytest效果 |
feature | 测试用例模块 | @pytest.mark.feature |
story | 测试的功能 | @pytest.mark.story |
tag | 测试用例自定义标记 | @pytest.mark.自定义标记(smoke) |
severity | 标记用例等级(五个等级) | 一般使用自定义mark标记 |
description | 用例的描述信息 | @allure.description |
方法二:动态展示用例标题:
参数化
参数化时候,可以使用@allure.title给用例不同标题
@allure.title("Parameterized test title: adding {param1} with {param2}")
@pytest.mark.parametrize('param1,param2,expected', [
(2, 2, 4),
(1, 2, 5)
])
def test_with_parameterized_title(param1, param2, expected):
assert param1 + param2 == expected
也可以在用例里面使用allure.dynamic.title更新用例的标题
import pytest
import allure
def login(username, password):
'''登录'''
print("输入账号:%s" % username)
print("输入密码:%s" % password)
# 返回
return {"code": 0, "msg": "success!"}
# 测试数据
test_datas = [
({"username": "yoyo1", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"),
({"username": "yoyo2", "password": "123456"}, "failed!", "输入错误账号,密码,登录失败"),
({"username": "yoyo3", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"),
]
@allure.story("登录用例")
@pytest.mark.parametrize("test_input,expected,title",
test_datas
)
def test_login(test_input, expected, title):
'''测试登录用例'''
# 获取函数返回结果
result = login(test_input["username"], test_input["password"])
# 断言
assert result["msg"] == expected
allure.dynamic.title(title)
二、allure报告中allure.title 在动态参数后如何去掉后方的参数化显示
动态参数化后的报告,所有参数都默认显示出来,把用例标题的样式给挤乱了。
如何解决?
1.解决方法如下 ,修改第三方包包的listener.py文件。
找到python目录下 \Lib\site-packages\allure_pytest\listener.py 文件
(/usr/local/python3/lib/python3.7/site-packages/allure_pytest/listener.py )
(如果在python目录未找到,就在当前项目的虚拟环境下边找到这个文件)
将下图中红色部分test_result.parameters.extend([]) 中参数改成空列表就行了