目前我知道的多线程并行执行用例有 xdist 和 parallel,但是怎么做到区分测试用例进行多线程执行? 比如现在有两个测试类,TestClassA 和 TestClassB,我想启动 2 个线程分别执行 A 和 B, 我在用 xdist 时,执行命令 pytest -n 2 的时候怎么保证一个 worker 分到的都是 A 下面的用例,另一个都是 B 下面的用例
Xdist 好像可以设置不同的 group,你查一下
好的,感谢。我查到了,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 下的用例:
-m
-n
pytest -n 2 -m a pytest -n 2 -m b
第一个命令会启动两个 worker 并执行标记为 @pytest.mark.a 的用例,而第二个命令会启动另外两个 worker 并执行标记为 @pytest.mark.b 的用例。
@pytest.mark.a
@pytest.mark.b
这样就可以实现不同的测试类在多线程中并行执行的需求了。请注意确保已安装 pytest-xdist 插件:pip install pytest-xdist。
pip install pytest-xdist