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

如何在pytest parametrize测试中复用@NotNull相关冗余测试用例

解决pytest参数化测试冗余问题

方案:封装复用NotNull约束测试用例

你可以通过定义一个返回固定测试用例的函数,直接在@pytest.mark.parametrize中调用它,同时可以和其他约束的测试用例拼接,完全保留parametrize的灵活性。

1. 封装NotNull测试用例函数

先写一个生成NotNull注解对应测试用例的函数:

def get_not_null_cases():
    # 格式:(输入值, 预期错误列表)
    return [
        (None, ["NULL_VIOLATION"]),
        (True, []),
        (False, [])
    ]

2. 在parametrize中复用并混合其他约束测试用例

比如你要同时测试NotNull和Size约束,就可以把NotNull的用例和Size的用例拼接起来,直接传入parametrize的参数列表:

import pytest
from your_module import YourController
from your_constants import NULL_VIOLATION, SIZE_VIOLATION

def get_not_null_cases():
    return [
        (None, [NULL_VIOLATION]),
        (True, []),
        (False, [])
    ]

# Size约束的测试用例
size_cases = [
    ("short", []),
    ("a" * 20, [SIZE_VIOLATION])  # 假设长度超过限制
]

@pytest.mark.parametrize("input_value, expected_errors", get_not_null_cases() + size_cases)
def test_controller_constraints(input_value, expected_errors):
    # 实例化Controller并执行校验逻辑
    controller = YourController()
    errors = controller.validate_input(input_value)
    assert errors == expected_errors

3. 单独测试NotNull约束的场景

如果只需要测试NotNull,直接传入函数返回值即可:

@pytest.mark.parametrize("input_value, expected_errors", get_not_null_cases())
def test_controller_not_null_constraint(input_value, expected_errors):
    controller = YourController()
    errors = controller.validate_input(input_value)
    assert errors == expected_errors

这种方式既封装了重复的NotNull测试用例,又保留了@pytest.mark.parametrize的所有特性,完全可以和其他约束的测试用例灵活组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:10:18