pytest收集到带marker标记测试用例但未执行、被取消选择如何解决?
问题产生原因
- 标记名称不匹配:测试用例上装饰的标记名称、pytest.ini中注册的标记名称、命令行
-m参数后填写的标记名称三者拼写/大小写不一致,是最常见的原因。 - 配置项冲突:pytest.ini、pyproject.toml等配置文件中
addopts字段配置了默认的标记过滤规则,和你命令行输入的-m规则存在逻辑冲突,导致匹配到的用例被二次过滤。 - 用例被强制跳过:目标测试用例同时添加了
@pytest.mark.skip、@pytest.mark.skipif等跳过装饰器,即使用标记匹配到也不会执行。 - 文件匹配错误:当前执行路径下的
myfile.py不是你修改了标记配置的目标文件,存在同名文件混淆的情况。
解决思路
- 首先执行以下命令查看标记匹配的用例收集结果:
pytest myfile.py -m marker_name -v --collect-only
如果输出中没有显示你要执行的目标用例,直接核对三个位置的标记拼写:用例上方@pytest.mark.后的名称、pytest.ini中markers下的注册名称、命令行-m后的名称,确保三者完全一致。
2. 如果收集结果中有目标用例但仍然不执行,检查pytest配置文件中的addopts字段,是否存在-m "not xxx"这类过滤规则,你可以在命令行添加--no-addopts参数忽略默认配置重试:
pytest myfile.py -m marker_name -v -s --disable-warnings --no-addopts
- 打开
myfile.py查看目标测试用例的装饰器,确认没有额外添加跳过类装饰器,或者修改跳过条件符合当前运行环境。 - 直接打开当前执行路径下的
myfile.py,确认文件内容和你编辑的目标文件一致,避免路径错误导致执行了旧文件。
内容的提问来源于stack exchange,提问作者Chins Kuriakose
相关产品推荐
相关产品推荐

