如何用pytest筛选带参数标记的测试?含反向筛选与非字符串参数处理
pytest带参数自定义标记的命令行筛选技巧
1. 筛选带my_marker且参数为this的测试
你之前用pytest -m 'my_marker == "this"'无效,是因为with_args传入的参数并不直接等同于标记本身的值,而是存在标记对象的args(位置参数)或kwargs(关键字参数)属性里。正确的筛选命令要结合这两个属性:
pytest -m 'my_marker and mark.args[0] == "this"'
如果你的标记用的是关键字参数(比如@pytest.mark.my_marker.with_args(val='this')),就改成:
pytest -m 'my_marker and mark.kwargs.get("val") == "this"'
2. 反向筛选:选中所有未标记that的测试
逻辑为「要么没有my_marker标记,要么有my_marker但参数不是that」,对应的命令可以写成两种形式:
# 形式1:直接排除符合条件的测试 pytest -m 'not (my_marker and mark.args[0] == "that")' # 形式2:明确指定符合要求的测试 pytest -m 'not my_marker or (my_marker and mark.args[0] != "that")'
3. 标记参数为非字符串(布尔值/整数)的处理
如果参数是布尔值、整数这类非字符串类型,筛选时不需要加引号,直接用对应类型的判断逻辑即可:
- 布尔值示例(标记为
@pytest.mark.my_marker.with_args(True)):
pytest -m 'my_marker and mark.args[0] is True'
- 整数示例(标记为
@pytest.mark.my_marker.with_args(2024)):
pytest -m 'my_marker and mark.args[0] == 2024'
内容的提问来源于stack exchange,提问作者Jir
相关产品推荐
相关产品推荐

