如何并行运行 pytest 测试(加速测试执行)?

pytest 并行跑测试用 pytest-xdist 插件:pip install pytest-xdist 后 pytest -n auto 即可按 CPU 核数并行。本文介绍用法及注意事项。

最佳实践
如何并行运行 pytest 测试(加速测试执行)?封面

安装 pytest-xdist 插件,然后 pytest -n auto——它通常按检测到的物理核数启动多个 worker;收益取决于负载、启动开销和共享资源,不保证测试越多提速越明显。

安装与使用

pip install pytest-xdist

# 按 CPU 核数自动并行
pytest -n auto

# 指定 worker 数
pytest -n 4

效果

应测量串行与并行用时;CPU、数据库、I/O 瓶颈或 worker 启动成本都可能限制甚至抵消收益,不能承诺固定加速比例。

注意事项

  1. 测试必须相互独立:并行的前提是测试之间没有依赖——不能共享可变状态、同一个数据库表、同一个临时文件等;
  2. 输出顺序:worker 捕获输出通常随报告汇总;-s/--capture=no 不能像串行那样直接透传各 worker 的标准输出;
  3. 按文件分组:--dist loadfile 让同一文件的测试在同一个 worker 上跑(适合有文件级 fixture 的场景);--dist loadscope 按类/模块分组;
pytest -n auto --dist loadfile

常见问题(FAQ)

Q:并行后有测试偶发失败?
A:可能是测试间存在隐性共享状态(临时目录、端口、数据库)。给每个测试独立资源,可按需用 --dist loadscope 分组,但它不是全局资源锁;不同组/worker 仍可能争用同一数据库或端口。

Q:数据库测试能并行吗?
A:可以,但可为每个 worker 使用独立的测试数据库/schema,或实施能保证并发正确性的其他隔离策略。pytest-xdist 提供 worker_id fixture(如 gw0、gw1)用于区分资源。

Q:CI 里怎么用?
A:直接在 CI 脚本里 pytest -n auto 即可;需核对 CI 容器资源限额和检测结果,必要时明确 -n 数量,避免超额占用。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台