pytest 如何跳过(排除)某些目录不收集测试?
pytest 排除目录用 --ignore=路径 参数,可多次使用;在 pytest.ini 的 addopts 中配置可永久生效。norecursedirs 可排除按模式匹配。
命令行用 --ignore=目录名 排除;想每次自动生效,把 --ignore 写进 pytest.ini 的 addopts 中。
命令行排除
# 排除单个目录
pytest --ignore=somedirectory
# 排除多个目录
pytest --ignore=somedirectory --ignore=someotherdirectory
配置文件永久生效
# pytest.ini
[pytest]
addopts = --ignore=somedirectory --ignore=someotherdirectory
之后直接 pytest 就会自动排除这些目录。
按模式排除:norecursedirs
[pytest]
norecursedirs = node_modules dist build .venv
norecursedirs 接受目录名模式(支持通配符),匹配的目录在收集阶段就被跳过,不递归进入。pytest 默认已排除 .git、venv、node_modules 等常见目录。
排除单个文件
pytest --ignore=test_legacy.py
# 或在 conftest.py 中
collect_ignore = ["test_legacy.py"]
常见问题(FAQ)
Q:--ignore 和 --deselect 有什么区别?
A:--ignore 在收集阶段就跳过整个目录/文件;--deselect 是收集完成后排除具体的测试用例(格式 文件::用例名)。
Q:虚拟环境目录会被收集吗?
A:pytest 默认排除 venv、.venv 等,但如果自定义了目录名,建议加进 norecursedirs。
Q:--ignore 的路径是相对哪的?
A:相对当前工作目录。建议从项目根目录运行 pytest,路径写相对根目录的路径。