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

问题描述 投票:0回答:1

我知道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次或更少测试所需的时间内完成。

谢谢。

pytest
1个回答
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而不是设置测试网格。当您正确执行此操作时,多个测试将能够同时在一个核心上运行。你的系统管理员(可能是你!)会感谢你。

© www.soinside.com 2019 - 2024. All rights reserved.