如何在Pytest多参数化时忽略特定参数组合?
过滤pytest双层parametrize的指定参数组合
不用pytest.skip的话,最简洁的方式就是提前构造符合要求的参数组合列表,直接从根源上避免生成要排除的测试用例,这样它自然不会出现在测试输出里。
具体实现方式
方式一:通过列表推导式+itertools生成过滤后的组合
适合参数数量较多的场景,不用手动枚举:
import pytest import itertools # 定义基础参数集合 foo_values = [1, 2, 3] bar_values = [4, 5, 6] # 生成并过滤组合:排除foo=3且bar=4的情况 valid_params = [ (foo, bar) for foo, bar in itertools.product(foo_values, bar_values) if not (foo == 3 and bar == 4) ] @pytest.mark.parametrize("foo, bar", valid_params) def test_example(foo, bar): # 你的测试逻辑 assert foo + bar > 0
方式二:手动枚举合法组合
适合参数数量少的场景,直观易懂:
import pytest # 直接定义所有符合要求的参数对 valid_params = [ (1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 5), (3, 6) ] @pytest.mark.parametrize("foo, bar", valid_params) def test_example(foo, bar): # 你的测试逻辑 pass
优势对比
- 比
pytest.skip更干净:用skip时,被排除的组合仍会生成测试用例,只是执行时跳过,输出里会显示skipped条目;而提前构造参数的方法根本不会创建该测试用例,输出里完全看不到它的痕迹。 - 扩展性更强:后续要排除更多组合,只需在过滤条件里追加判断即可,比如
if not ((foo ==3 and bar ==4) or (foo ==2 and bar ==6)),逻辑清晰,不会让测试函数堆满skip代码。
内容的提问来源于stack exchange,提问作者eilchner
相关产品推荐
相关产品推荐

