如何在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
相关产品推荐
相关产品推荐

