pytest ./testcase 能直接运行指定目录下所有符合规则的测试文件,因其默认递归扫描子目录,自动识别 test_.py 或 _test.py 文件,无需配置或脚本,且不依赖 __init__.py。

直接用 pytest ./testcase 就能运行指定文件夹下所有符合规则的测试文件,不用写任何额外配置或 Python 脚本。
为什么 pytest ./testcase 能直接跑通
pytest 默认会递归扫描目录,只要子路径里有符合命名规则的文件(如 test_*.py 或 *_test.py),就自动识别为测试模块。它不关心你有没有 __init__.py,也不强制要求包结构。
- 默认只扫描
test_*.py和*_test.py文件,其他名字的 .py 文件会被忽略 - 如果目录下有子目录,也会进去继续找,除非你用
--ignore显式排除 - 不会执行
conftest.py里的函数,但会加载其中的 fixture 和 hook
pytest ./testcase 常见失败原因
命令敲了却没跑任何用例,大概率是路径或命名踩了坑:
- 路径写错:比如
./test_case实际是./testcase,Linux/macOS 区分大小写,Testcase≠testcase - 文件名不合规:写了
login.py或api_tests.py,但 pytest 默认只认test_api_tests.py或api_tests_test.py - 目录为空或全是
__pycache__、.git这类非 Python 文件 - 当前工作目录不对:你在项目根目录外执行,而
./testcase是相对路径,得先cd进去或改用绝对路径
想限制只扫一级子目录,不递归进更深的嵌套
pytest 没有原生 “只扫一层” 的开关,但可以用 --ignore 配合通配符绕过:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 假设
./testcase下有unit/、integration/、unit/test_a.py、unit/utils/test_helper.py - 你只想跑
./testcase/unit/test_a.py,不想进unit/utils/,就加:pytest ./testcase --ignore=./testcase/unit/utils - 也可以用
-p no:doctest避免误触发 doctest,但这和目录深度无关
真正要精确控制扫描粒度,得靠 pytest.ini 里的 testpaths + python_files 组合,但那是全局行为,不适合单次命令行临时调整。
和 pytest.main() 中传路径的区别
在 Python 脚本里调用 pytest.main(['-vs', './testcase']) 和命令行效果一致,但要注意:
- 路径是相对于该 Python 脚本所在位置,不是相对于当前 shell 工作目录
- 如果你在
run.py里写pytest.main(['-vs', './testcase']),而run.py在项目根目录,那就没问题;但如果run.py在scripts/目录下,./testcase就会变成scripts/./testcase,大概率报错 - 建议统一用绝对路径或
os.path.join(os.path.dirname(__file__), '../testcase')来构造
最稳的方式,还是直接在终端进到项目根目录,然后敲 pytest ./testcase —— 路径清晰、无歧义、不依赖脚本位置。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










