You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对pytest fixture进行多参数参数化并解决相关运行报错

问题修复方案

第一个报错原因

你定义的parametrize参数名只有2个(get_settings、expected),但每个测试用例的元组里填了3个值,参数数量不匹配才报错。这个问题和get_user无关,get_user是独立fixture,会自动注入不需要写在parametrize的参数名列表里。

第二个报错原因

你后来把TOKEN_KEY和TOKEN_PASSWORD打包成元组传给get_settings的request.param,但fixture里直接把整个元组赋值给了两个Settings字段,Settings要求这两个字段是字符串类型,传入元组自然触发pydantic类型校验失败。

完整修复步骤

1. 修改fixture,拆分request.param的打包参数

把request.param里打包的两个参数拆出来分别赋值给对应字段:

@pytest.fixture
def get_settings(request):
    with mock.patch("helpers.helpers.get_settings") as mocked_settings:
        # request.param是传入的(TOKEN_KEY, TOKEN_PASSWORD)元组,拆分赋值
        token_key, token_pwd = request.param
        mocked_settings.return_value = Settings(
            TOKEN_KEY=token_key,
            TOKEN_PASSWORD=token_pwd
        )
        yield

2. 修改parametrize参数配置

每个测试用例的元组按「get_settings打包参数、expected预期值」的顺序写,数量和参数名对应:

# 第一个参数给get_settings的是(FAKE_TOKEN_KEY, '')元组,第二个是预期值None
# 第二个用例给get_settings的是(FAKE_TOKEN_KEY, '1')元组,第二个是预期值None
@pytest.mark.parametrize('get_settings, expected', [
    ((FAKE_TOKEN_KEY, ''), None),
    ((FAKE_TOKEN_KEY, '1'), None)
], indirect=["get_settings"])
def test_generate_new_token(get_user, get_settings, expected):
    assert generate_new_token(user=get_user) == expected

内容的提问来源于stack exchange,提问作者Ghasem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:15:03