跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Python怎么指定测试目录_命令行传入路径或在pytest.ini中配置testpaths指定默认文件夹

pytest命令行指定测试目录最直接:传什么路径就从哪找测试文件;testpaths仅在无命令行路径时生效,定义默认搜索起点,不覆盖显式路径,且各起点仍递归查找。 pytest 命令行指定测试目录:最直接的写法 直接在终端里跑
pytest
时,路径就是测试目录本身——不是“配置”,而是“执行目标”。你传什么路径,它就从那里开始找测试文件。 运行当前目录下所有测试:
pytest
只跑
tests/
目录:
pytest tests/
同时跑多个目录:
pytest tests/ integration/
指定具体文件或函数:
pytest tests/test_api.py::test_login
注意:
pytest
默认只识别
test_*.py
或
*_test.py
文件,且函数名要以
test_
开头。路径末尾加不加
/
没影响,但别写成
tests/*.py
—— 那是 shell 展开,不是 pytest 的 glob 匹配逻辑。 pytest.ini 中用 testpaths 控制默认搜索范围
testpaths
不是“强制只在这些目录里跑”,而是“当没给命令行路径时,从这些目录里找测试”。它只影响默认行为,不覆盖命令行显式传入的路径。 在项目根目录建
pytest.ini
,内容如下:
[tool:pytest] testpaths = tests unit_tests
这样执行
pytest
(不带参数)就会依次扫描
tests/
和
unit_tests/
;但如果你敲
pytest legacy/
,它照样进
legacy/
,完全忽略
testpaths
。 立即学习 “ Python免费学习笔记(深入) ”; Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载
testpaths
值之间用空格分隔,不能用逗号或换行 路径是相对于
pytest.ini
所在位置的相对路径 如果目录不存在,pytest 会静默跳过,不会报错 常见错误:testpaths 不生效?先看配置文件名和位置 pytest 只认特定名字的配置文件,且优先级严格:命令行 >
pyproject.toml
>
pytest.ini
>
tox.ini
>
setup.cfg
。很多人写了
pytest.ini
却没生效,是因为: 文件名写成了
setup.py
、
config.ini
或大小写错误(比如
Pytest.ini
) 文件放在了子目录里,而你在父目录执行
pytest
—— 它只向上查找,不向下搜 项目里存在
pyproject.toml
,且里面定义了
[tool.pytest.ini_options]
,那
pytest.ini
就被无视了 用
python -m pytest
启动时,当前工作目录(
pwd
)决定配置文件查找起点,不是脚本所在目录 testpaths 和 python path、addopts 搭配时的坑
testpaths
只管“去哪找测试文件”,不管“怎么导入它们”。如果测试文件里 import 了项目代码,而项目模块不在 Python 路径里,照样报
ModuleNotFoundError
。 确保
pythonpath
或
addopts = --import-mode=importlib
配置到位(尤其用
src/
结构时)
testpaths
和
addopts = -xvs
共存没问题,但别把路径塞进
addopts
—— 比如
addopts = tests/
是无效的,会被忽略 Windows 下路径分隔符用
/
或
\
都可以,但别混用;Linux/macOS 必须用
/
真正容易被忽略的是:testpaths 不改变 pytest 的递归行为——它只是列出起点目录,每个起点内部仍会递归进入子目录找测试。所以
testpaths = tests
等价于
pytest tests/
,而不是“只扫 tests/ 下一层”。

相关文章