Skip to main content
 首页 » 编程设计

python之使用 py.test xdist 控制测试的分布

2025年05月04日8youxin

我有几千个测试要并行运行。测试都是编译后的二进制文件,返回代码为 0 或非零(失败时)。它们的一些未知子集尝试使用相同的资源(文件、端口等)。每个测试都假定它是独立运行的,并且只在资源不可用时报告失败。

我正在使用 Python 使用子进程模块启动每个测试,并且连续运行效果很好。我研究了 Nose 的并行化,但我需要自动生成测试(将 1000 多个二进制文件中的每一个都包装到使用子进程的 Python 类中)并且 Nose 的多处理模块不支持并行化自动生成的测试。

我最终选择了 PyTest,因为它可以使用 xdist 插件通过 SSH 在远程主机上运行自动生成的测试。

但是,据我所知,xdist 似乎不支持对测试分发方式进行任何类型的控制。我想给它一个 N 台机器的池,并在每台机器上运行一个测试。

PyTest/xdist 可以实现我想要的吗?如果没有,是否有一种工具可以满足我的需求?

请您参考如下方法:

我不确定这是否有帮助。但是如果你提前知道你想如何划分你的测试,而不是让 pytest 分发你的测试,你可以使用你的持续集成服务器为每台不同的机器调用不同的 pytest 运行。使用 -k 或 -m 选择测试的子集,或者简单地指定不同的测试目录路径,您可以控制哪些测试一起运行。