繁体   English   中英

pytest 并行运行测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM