我想并行运行所有的pytest
测试,而不是按顺序运行。
我当前的设置看起来像:
class Test1(OtherClass):
@pytest.mark.parametrize("activity_name", ["activity1", "activity2"])
@pytest.mark.flaky(reruns=1)
def test_1(self, activity_name, generate_test_id):
"""
"""
test_id = generate_random_test_id()
test_name = sys._getframe().f_code.co_name
result_triggers = self.proxy(test_name, generate_test_id, test_id, activity_name)
expected_items = ["response"]
validate_response("triggers", result_triggers, expected_items)
@pytest.mark.parametrize("activity_name", ["activity1", "activity2"])
@pytest.mark.flaky(reruns=1)
def test_2(self, activity_name, generate_test_id):
"""
"""
#same idea...
我使用pytest -v -s
运行测试。
结果是我的测试是按顺序运行的,这会花费很多时间,因为其中一些测试要等待来自远程服务器的响应(集成测试)。
有没有办法并行运行pytest?
3条答案
按热度按时间nbewdwxp1#
你想要
pytest-xdist
。我认为Qxf 2解释得很好:Qxf2 on Pytest-Xdist他们的Linux命令行对我来说有点太冗长了;我用途:
其中是并行工作线程的数量。
pqwbnv8z2#
更新:下面的解决方案是为了演示并发pytests是可能的,但pytest-parallel目前尚未维护。
pytest-xdist
对于大多数情况来说都是一个很好的解决方案,但是集成测试是特殊的。在向远程服务器发送请求之后,另一个测试可以在新的线程上启动,而不是等待响应。这是并发测试而不是并行测试。并发允许同时进行更多的测试,而内存和处理开销要少得多。我写了
pytest-parallel
插件[py3.6+]来支持并行和并发测试。下面是如何并发运行集成测试:pytest --tests-per-worker auto
zpf6vheq3#
为了并行运行pytests,你需要安装pytest-xdist。请参阅下面列出的不同并行策略,你可以使用其中任何一种(但我敢打赌,其中一种最适合你的特定情况):
示例
您可以为
--dist
(-d
)参数提供不同的值,该参数处理跨工作进程分布测试的方式,有关--dist用法的更多信息,请参阅文档。注意:一旦执行测试,socket_server.py就关闭了。建议您从单独的终端窗口运行socket server,以便进行调试
你可以引入更复杂的流程,例如在docker容器中运行测试,其中已经启动了socket服务器,类似于“pytest worker”,另一个docker容器与它们通信并充当“pytest runner”。