(allure报告定制)动态显示模块名和用例标题
场景:当自动化测试使用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([]) 中参数改成空列表就行了