You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过py.test将API测试分发至多台远程机器并行执行?

实现pytest多机分布式并行执行API测试

刚好我之前处理过类似的大规模API测试并行需求,pytest-xdist其实完全支持多台远程机器的分布式执行,只要正确配置参数,就能实现你要的「用50台机器跑1000个测试,总耗时接近单批测试耗时」的效果,下面给你一步步拆解方案:

核心原理

pytest-xdist的--tx参数可以多次指定,每一个--tx就代表一个远程执行「槽位」——不管是同一台机器的多个进程,还是不同机器的进程,都可以通过这个参数添加。我们只需要给每台远程机器分配若干槽位,就能让测试用例自动分发到所有节点并行执行。

前置准备

在开始之前,确保所有远程机器满足以下条件:

  • 安装了与本地完全相同版本的Python、pytest和pytest-xdist
  • 安装了API测试所需的所有依赖库(比如requests、pytest-html等)
  • 本地机器可以通过无密码SSH登录所有远程机器(这是最便捷的方式,避免每次输入密码)
  • 所有远程机器的系统环境尽量一致(避免因环境差异导致测试失败)

具体执行命令

假设你有50台远程机器,IP从192.168.1.101到192.168.1.150,希望每台机器同时运行2个测试进程(充分利用远程机器的CPU),那么执行命令如下:

pytest -d \
--tx ssh=test_user@192.168.1.101//numprocesses=2 \
--tx ssh=test_user@192.168.1.102//numprocesses=2 \
...
--tx ssh=test_user@192.168.1.150//numprocesses=2 \
--rsyncdir ./my_api_tests ./my_api_tests \
./my_api_tests

参数解释:

  • -d:后台运行分布式测试
  • --tx ssh=test_user@xxx//numprocesses=2:指定通过SSH连接到远程机器,在该机器启动2个测试进程
  • --rsyncdir ./my_api_tests ./my_api_tests:把本地的my_api_tests目录同步到所有远程机器的同路径下(确保远程机器能拿到最新的测试代码)
  • 最后一个./my_api_tests:指定要执行的测试目录

简化命令的技巧

如果机器数量多,手动写50个--tx太麻烦,可以:

  1. 在本地~/.ssh/config中给每个远程机器配置别名:
    Host node1
        HostName 192.168.1.101
        User test_user
    Host node2
        HostName 192.168.1.102
        User test_user
    ...
    
  2. 用脚本生成--tx参数列表,比如用Python或Shell脚本循环生成,然后拼接到pytest命令中。

额外优化建议

  • 批量部署环境:如果有大量远程机器,建议用Ansible这类自动化工具批量安装Python、依赖库和pytest,避免手动操作
  • 测试用例拆分:确保测试用例是无状态的(API测试一般都满足),这样xdist可以随机分发,最大化并行效率
  • 结果汇总:pytest-xdist会自动把所有远程节点的测试结果汇总到本地控制台,失败的用例详情也会完整展示,无需额外处理
  • 资源监控:可以在远程机器上监控CPU/内存使用情况,调整每台机器的numprocesses参数,避免资源过载

替代方案(如果需要更灵活的集群管理)

如果你的测试规模持续扩大,还可以考虑用pytest-forked结合Kubernetes这类容器编排工具,把每个测试用例打包成容器,调度到集群中执行,不过对于1000个测试的规模,用pytest-xdist+SSH的方案已经完全足够,成本更低。

内容的提问来源于stack exchange,提问作者sridhar249

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:08:20