首页 文章

pytest run并行测试

提问于
浏览
18

我想并行运行所有 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?

2 回答

  • 1

    你想 pytest-xdist . 我认为Qxf2解释得很好:Qxf2 on Pytest-Xdist

    他们的Linux命令行对我的口味有点过于冗长;我用:

    pytest -n <NUM>
    

    其中<NUM>是并行工作者的数量 .

  • 18

    pytest-xdist对于大多数情况来说是一个很好的解决方案,但集成测试很特别 . 向远程服务器发送请求后,可以在新线程上启动另一个测试,而不是等待响应 . 这是并发测试而不是并行测试 . 并发允许一次更多的测试,更少的内存和处理开销 .

    我写了pytest-parallel插件[py3.6]来启用并行和并发测试 . 以下是如何同时运行集成测试:

    pytest --tests-per-worker auto

相关问题