问答 有人知道怎么在 pytest 设置分布式用例执行策略吗?

Mr.Shuo · 2023年08月04日 · 最后由 大海 回复于 2023年08月04日 · 5830 次阅读

目前我知道的多线程并行执行用例有 xdist 和 parallel,但是怎么做到区分测试用例进行多线程执行?
比如现在有两个测试类,TestClassA 和 TestClassB,我想启动 2 个线程分别执行 A 和 B,
我在用 xdist 时,执行命令 pytest -n 2 的时候怎么保证一个 worker 分到的都是 A 下面的用例,另一个都是 B 下面的用例

共收到 3 条回复 时间 点赞

Xdist 好像可以设置不同的 group,你查一下

Jerry li 回复

好的,感谢。我查到了,mark 标记有个 xdist_group 可以设置

要实现你描述的场景,可以使用 pytest 的自定义标记(marker)和 pytest-xdist 插件的功能来区分测试用例进行多线程执行。

首先,你可以在测试类 TestClassA 和 TestClassB 上分别使用不同的自定义标记,比如 "@pytest.mark.a" 和 "@pytest.mark.b":

import pytest

@pytest.mark.a
class TestClassA:
    def test_case_a1(self):
        assert 1 + 1 == 2

    def test_case_a2(self):
        assert 2 * 2 == 4

@pytest.mark.b
class TestClassB:
    def test_case_b1(self):
        assert 3 - 1 == 2

    def test_case_b2(self):
        assert 4 / 2 == 2

然后,在测试命令中使用 -m 参数来筛选指定的标记,并结合 -n 参数来指定使用的 worker 数量。此时,你可以使用以下命令来启动两个线程分别执行 TestClassA 和 TestClassB 下的用例:

pytest -n 2 -m a
pytest -n 2 -m b

第一个命令会启动两个 worker 并执行标记为 @pytest.mark.a 的用例,而第二个命令会启动另外两个 worker 并执行标记为 @pytest.mark.b 的用例。

这样就可以实现不同的测试类在多线程中并行执行的需求了。请注意确保已安装 pytest-xdist 插件:pip install pytest-xdist

Mr.Shuo 关闭了讨论 08月07日 16:09
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册