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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:41:42