如何并行运行 pytest 测试(加速测试执行)?
pytest 并行跑测试用 pytest-xdist 插件:pip install pytest-xdist 后 pytest -n auto 即可按 CPU 核数并行。本文介绍用法及注意事项。
安装 pytest-xdist 插件,然后 pytest -n auto——它会按 CPU 核数启动多个 worker 并行执行测试,测试套件越大提速越明显。
安装与使用
pip install pytest-xdist
# 按 CPU 核数自动并行
pytest -n auto
# 指定 worker 数
pytest -n 4
效果
4 核机器上 -n 4 通常能把测试时间缩短到原来的 1/3~1/4(取决于测试间是否有共享资源冲突)。
注意事项
- 测试必须相互独立:并行的前提是测试之间没有依赖——不能共享可变状态、同一个数据库表、同一个临时文件等;
- 输出顺序:并行时各 worker 的输出会交错,失败报告仍正常汇总;
- 按文件分组:
--dist loadfile让同一文件的测试在同一个 worker 上跑(适合有文件级 fixture 的场景);--dist loadscope按类/模块分组;
pytest -n auto --dist loadfile
常见问题(FAQ)
Q:并行后有测试偶发失败?
A:说明测试间存在隐性共享状态(临时目录、端口、数据库)。给每个测试独立资源,或用 --dist loadscope 降低并行粒度。
Q:数据库测试能并行吗?
A:可以,但每个 worker 要用独立的测试数据库/ schema。pytest-xdist 提供 worker_id fixture(如 gw0、gw1)用于区分资源。
Q:CI 里怎么用?
A:直接在 CI 脚本里 pytest -n auto 即可;CI 机器核数会被自动检测。