如何在pytest的request fixture中生成多参数并自定义测试ID?
在pytest中用request fixture生成多参数并自定义测试ID
一、生成多个参数并传递给测试函数
你可以通过两种方式让fixture返回多组参数,供测试函数使用:
方式1:fixture返回多值元组,测试函数解构使用
import pytest ITERNUM = 3 @pytest.fixture(params=range(ITERNUM)) def multi_data(request): # 根据单个参数生成多组关联测试数据 yield request.param, request.param * 2 def test_multi_params(multi_data): num, double_num = multi_data print(f"num: {num}, double_num: {double_num}") assert double_num == num * 2
方式2:params直接传入多参数元组,fixture原样返回
import pytest # params中直接定义多组完整参数 @pytest.fixture(params=[(1, 2), (2, 4), (3, 6)]) def multi_data(request): yield request.param def test_multi_params(multi_data): num, double_num = multi_data print(f"num: {num}, double_num: {double_num}") assert double_num == num * 2
二、动态生成自定义测试ID
pytest的@pytest.fixture装饰器支持ids参数,你可以传入一个自定义函数,该函数接收每个param值,返回对应的个性化ID字符串,实现动态生成测试ID的需求。
单参数场景示例
import pytest ITERNUM = 3 # 自定义ID生成函数,根据参数动态生成格式 def custom_test_id(param): return f"test-name[{param}]" @pytest.fixture(params=range(ITERNUM), ids=custom_test_id) def data(request): yield request.param def test_01(data): print(data)
运行测试时,测试用例会显示为test_01[test-name[0]]、test_01[test-name[1]]等自定义格式。
多参数场景示例
如果是多参数的情况,同样可以通过ids函数解析元组生成对应ID:
import pytest def custom_multi_id(param): num, double_num = param return f"num-{num}_double-{double_num}" @pytest.fixture(params=[(1, 2), (2, 4), (3, 6)], ids=custom_multi_id) def multi_data(request): yield request.param def test_multi_params(multi_data): num, double_num = multi_data assert double_num == num * 2
此时测试用例名称会显示为test_multi_params[num-1_double-2]这类个性化格式。
内容的提问来源于stack exchange,提问作者Archie
相关产品推荐
相关产品推荐

