我有一个测试类,我想用它来测试多个设备。我正在为设备使用参数化,并使用 pytest-xdist 来并行运行它们。我遇到的问题是负载平衡可以在正在运行测试的设备上启动新测试,导致新测试失败。有没有办法让每个工作人员从 xdist 开始只使用其中一个参数运行测试,例如 d1 的 worker1 运行测试,然后为其他工作人员和设备退出相同的测试?
例子:
@pytest.mark.parametrize('device', ['d1', 'd2', 'd3', 'd4'])
class MyTestClass:
def test_1(self, device)
def test_2(self, device)
def test_3(self, device)
def test_4(self, device)
我的 pytest 命令是
pytest -n4
. 虽然 test_1 在 d1 上运行,但在 d1 上无法执行其他任何操作,但测试需要按此顺序运行,这也是因为硬件 d4 比其他 3 个设备需要更长的时间来运行某些测试。例如,worker 4 使用 d4 启动 test_1,然后另一个 worker 完成其测试并使用 d4 启动 test_2,导致 test_2 失败。我曾尝试将 --dist 命令与 loadscope 一起使用。
我想到的唯一其他解决方案是将每个设备分成一个单独的测试文件,但这似乎是太多重复的代码。
提前致谢。