首页/开发/软件测试速查/pytest 并行执行(xdist)
自动化测试66 条

pytest 并行执行(xdist)

pytest-xdist 用 -n 把用例分发到多个 worker 进程并行执行,-n auto 按核数分配;--dist 提供 loadfile、loadscope 等分发策略,可让同文件用例落到同一进程。

软件测试速查开发更新于 2026-10-13

xdist 是什么

pytest-xdist 是 pytest 的并行执行插件:-n 启动多个 worker 子进程,主进程把用例分发到各 worker 执行,最后汇总结果与统计。直接收益是压缩大型回归套件的墙钟时间;前提是用例互相隔离,否则并行只会把顺序依赖暴露成随机失败。除并行外,--dist 还能控制聚合方式,把同文件、同模块的用例固定到同一 worker,缓解共享资源冲突。

基本信息

适用平台Python 3.8+,pytest 6/7/8 通用
安装pip install pytest-xdist
关键参数-n 进程数(auto 按 CPU 核数),--dist 分发策略
运行模型每个 worker 为独立进程,内存与夹具状态不共享

典型使用场景

  • 大型回归套件串行耗时过长,用并行把反馈压回可接受范围
  • CI 单机多核环境按核数分配 worker,缩短流水线等待
  • 与 -x/--maxfail 组合,快速失败快速反馈
  • 用 --dist loadfile/loadscope 把共享夹具的用例聚到同一进程
  • 本地提交前用 -n auto 跑全量,替代选择性抽样

常用命令

常用命令
pytest -n auto                          # 按逻辑 CPU 核数启动 worker
pytest -n 4 --dist loadfile             # 4 进程,同文件用例固定在同一个 worker
pytest -n 4 --dist loadscope            # 按模块/类聚合,共享模块级夹具
pytest -n auto --dist worksteal         # 空闲 worker 窃取队列,缓解长尾(较新版本)
pytest -n 4 -x --maxfail=2              # 并行下尽早中止,保留失败现场
pytest -n 0                             # 临时关闭并行,覆盖 addopts 中的设置

--dist 策略对照

策略行为适用
load(默认)动态把待执行用例派给空闲 worker无聚合需求的常规套件
loadscope同一模块或类的用例归同一 worker依赖模块级共享夹具
loadfile同一文件的用例归同一 worker文件内存在共享状态
worksteal空闲 worker 从其他队列窃取用例用例耗时差异明显,避免长尾空闲
loadgroup按 xdist_group 标记分组需要自定义聚合粒度
worker 数不是越大越快:本地 CPU、被测服务与数据库都会成为瓶颈。先取串行基线,再按 2、4、8 梯度找拐点,同时观察被测系统资源。
session 级夹具会在每个 worker 各执行一次:把建库、起容器、写共享文件放进夹具会造成重复执行与资源冲突;共享资源应移到测试外,或按 worker 命名隔离。

易错点

  • 用并行掩盖顺序依赖:串行通过、并行随机失败后调低并行度了事,依赖问题原样保留
  • 并行度拉满导致被测系统过载,响应劣化被误判为框架问题;应结合资源监控确定 -n
  • session 级夹具在每个 worker 重复执行:数据库被反复初始化、端口被抢占,表现为随机连接失败
  • 共享固定账号与固定文件名在多 worker 下互相覆盖;改用 tmp_path 与按 worker 派生数据
  • 只看是否通过不看耗时分布:worker 忙闲不均时总时长不降,需调整分发策略

数据来源与参考

  • pytest-xdist 官方文档(pytest-xdist.readthedocs.io)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌