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