[英]pytest run tests parallel
我想并行而不是顺序运行我所有的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 吗?
你想要pytest-xdist
。 我认为 Qxf2 解释得很好: Pytest-Xdist 上的 Qxf2
不过,他们的 Linux 命令行对于我的口味来说有点过于冗长; 我使用:
pytest -n <NUM>
其中 <NUM> 是并行工作线程的数量。
pytest-xdist
在大多数情况下是一个很好的解决方案,但集成测试是特殊的。 向远程服务器发送请求后,可以在新线程上启动另一个测试,而不是等待响应。 这是并发测试而不是并行测试。 并发允许以更少的内存和处理开销同时进行更多的测试。
我编写了pytest-parallel
插件 [py3.6+] 来启用并行和并发测试。 以下是同时运行集成测试的方法:
pytest --tests-per-worker auto
为了并行运行 pytests,您需要安装pytest-xdist 。 请参阅下面列出的不同并行策略,您可以使用其中任何一种(但我可以打赌,其中一种最适合您的特定情况):
pip install pytest-xdist
# The most primitive case, sending tests to multiple CPUs:
pytest -n NUM
# Execute tests within 3 subprocesses.
pytest --dist=each --tx 3*popen//python=python3.6
# Execute tests in 3 forked subprocess. Won't work on windows.
pytest --dist=each --tx 3*popen//python=python3.6 --boxed
# Sending tests to the ssh slaves
pytest --dist=each --tx ssh=first_slave --tx ssh=seconds_slave --rsyncdir package package
# Sending tests to the socket server, link is available below.
python socketserver.py :8889 &
python socketserver.py :8890 &
pytest --dist=each --tx socket=localhost:8889 --tx socket=localhost:8890
您可以为--dist
( -d
) 参数提供不同的值,该参数处理跨工作人员分发测试的方式,有关--dist用法的更多信息,请参阅文档。
注意:一旦执行测试, socket_server.py就会关闭。 我建议您从单独的终端窗口运行套接字服务器以进行调试
您可以引入更复杂的流程,例如在 docker 容器内运行测试,其中已启动套接字服务器类型的“pytest worker”和另一个与它们通信并充当“pytest runner”的 docker 容器。
pytest-xdist对我不起作用,因为我的测试等待来自AWS的粘合作业的99.9999999%的时间完成,并且我使用的是具有2个核心的CodeBuild环境,所以我一次只能运行2个测试。
@kevelend的方法对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.