关于python:pytest run并行测试

pytest run tests parallel

我想并行运行所有的pytest测试,而不是按顺序运行。

我当前的设置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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命令行对我来说有点过于冗长;我使用:

1
pytest -n <NUM>

其中是并行工作数。


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

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

pytest --tests-per-worker auto