使用py.test在多台机器上并行运行测试

时间:2018-01-04 15:19:56

标签: pytest

我知道UI测试可以使用selenium网格在多台机器上并行运行。 API测试怎么样?

我查看了pytest-xdist插件,它可以使用py.test -n NUM在本地计算机上并行运行测试,它会将测试发送到多个CPU并并行运行。如果我们想要并行运行的测试数量远远超过机器上的CPU数量,那么这可能不会那么有效和快速。例如:如果机器有4个CPU,我们希望并行运行50个测试。

似乎在远程机器上运行测试我们需要做类似

的事情
py.test -d --tx socket=192.168.1.102:8888 --rsyncdir mypkg mypkg

我想知道是否有办法将测试分发到多个远程计算机并并行运行它们。例如:如果我有1000个测试和50个远程计算机,那么我希望每台远程计算机同时运行1个或多个测试,以便测试完成得更快。这意味着,所有1000次测试都将在20次或更少测试的时间内完成。

感谢。

1 个答案:

答案 0 :(得分:1)

看起来您需要load分发模式,然后是--tx参数的多次调用:

py.test --dist=load --tx socket=192.168.1.110:8888 --tx socket=192.168.1.111:8888 --tx socket=192.168.1.112:8888 --rsyncdir mypkg mypkg

我确定您在运行测试时已经查看了python进程的CPU使用情况。如果您正在做我期望您正在做的事情(针对具有高响应时间的单个网络服务实例运行集成测试套件),您的测试套件不受CPU限制,但实际上是I / O绑定的。对于这种类型的工作负载,CPU使用率可能看起来很高,但实际上包括测试运行器等待来自被测系统的响应所花费的时间。

在并行化这种类型的测试套件时,我遇到的最大问题是订单测试完成有时很重要,并且当并行测试运行时,由于响应的变化,它们在串行运行时以不同的顺序完成时间,导致间歇性和难以排除测试失败。

如果单个计算机上的多个内核不会发生这种情况,那么这是一个好的迹象,表明您的计划可行。话虽如此,因为保留任何主机池都需要运营开销 - 修补更新,处理配置,配置和网络,更不用说其他意外问题了,我建议你尝试不同的东西。

我认为您应该考虑重构您的测试代码以使用异步IO而不是设置测试网格。当您正确执行此操作时,多个测试将能够同时在一个核心上运行。你的系统管理员(可能是你!)会感谢你。

相关问题