1、使用paramtrize传参优点
减少代码编写量,提高测试用例的编写效率,但若paramtrize传参的参数过长时会影响用例名称显示:
这样使得测试用例名称不够美观,那么如何使用paramtrize传参使得用例名称美观而数据又能在测试函数内部使用将至关重要。
源码实现:
import pytest
import allure
testdata = [{
'CaseId': 33, 'url': '/saas-api/stock/out-ticket/save', 'CaseName': '保存p1', 'yapi_id': 1471, 'req_query': '{}',
'req_body': '{"operator":@{employee_id.0},"in_out_time":"${now_time}",\n "parts_items":@{data_list.0}}', 'saveKey': None,
'jsonDone': '["message"]', 'expect': '["操作成功"]', 'sheetName': '首页-采购单'},
{
'CaseId': 33, 'url': '/saas-api/stock/out-ticket/save', 'CaseName': '保存p1', 'yapi_id': 1471,
'req_query': '{}',
'req_body': '{"operator":@{employee_id.0},"in_out_time":"${now_time}",\n "parts_items":@{data_list.0}}',
'saveKey': None,
'jsonDone': '["message"]', 'expect': '["操作成功"]', 'sheetName': '首页-采购单'},
]
@pytest.mark.parametrize('index', list(range(len(testdata))))
def test_001(index):
items = testdata[index]
# 对items的其他操作, 发送请求、数据处理,断言···
assert 1
实现效果:
*使用paramtrize中ids也可动态控制测试用例名称,但用例展示长度依旧会纯在问题
import pytest
import allure
testdata = [{
'CaseId': 33, 'url': '/saas-api/stock/out-ticket/save', 'CaseName': '保存p1', 'yapi_id': 1471, 'req_query': '{}',
'req_body': '{"operator":@{employee_id.0},"in_out_time":"${now_time}",\n "parts_items":@{data_list.0}}', 'saveKey': None,
'jsonDone': '["message"]', 'expect': '["操作成功"]', 'sheetName': '首页-采购单'},
{
'CaseId': 33, 'url': '/saas-api/stock/out-ticket/save', 'CaseName': '保存p1', 'yapi_id': 1471,
'req_query': '{}',
'req_body': '{"operator":@{employee_id.0},"in_out_time":"${now_time}",\n "parts_items":@{data_list.0}}',
'saveKey': None,
'jsonDone': '["message"]', 'expect': '["操作成功"]', 'sheetName': '首页-采购单'},
]
@pytest.mark.parametrize('index', testdata, ids=['测试用例名称1','测试用例名称2'])
def test_001(index):
# 对items的其他操作, 发送请求、数据处理,断言···
assert 1
*使用@allure.title(’{title}’)动态生成
import pytest
import allure
testdata = [('测试用例名称1',{
'CaseId': 33, 'url': '/saas-api/stock/out-ticket/save', 'CaseName': '保存p1', 'yapi_id': 1471, 'req_query': '{}',
'req_body': '{"operator":@{employee_id.0},"in_out_time":"${now_time}",\n "parts_items":@{data_list.0}}', 'saveKey': None,
'jsonDone': '["message"]', 'expect': '["操作成功"]', 'sheetName': '首页-采购单'}),
('测试用例名称2', {
'CaseId': 33, 'url': '/saas-api/stock/out-ticket/save', 'CaseName': '保存p1', 'yapi_id': 1471,
'req_query': '{}',
'req_body': '{"operator":@{employee_id.0},"in_out_time":"${now_time}",\n "parts_items":@{data_list.0}}',
'saveKey': None,
'jsonDone': '["message"]', 'expect': '["操作成功"]', 'sheetName': '首页-采购单'})
]
@allure.title('{title}')
@pytest.mark.parametrize('title, testdata', testdata, ids=['测试用例名称1','测试用例名称2'])
def test_001(title, testdata):
assert 1