带有 XDIST 的 py.test 不会执行使用随机值参数化的测试



有没有人注意到pytest和xdist的以下奇怪行为。

当尝试运行使用某些随机选择的值进行参数化的测试时,测试实际上不会运行。如果不使用 xdist,则执行相同的测试没有任何问题。

以下代码可用于重现此问题。

import pytest
import random
PARAMS_NUMBER = 3
PARAMS = []
for i in range(PARAMS_NUMBER):
    PARAMS.append(random.randrange(0, 1000))
@pytest.mark.parametrize('rand_par', PARAMS)
def test_random_param(rand_par):
    assert 500 > rand_par

没有xdists,它可以正常工作。

使用 xdist 时,根本不执行任何测试,输出如下

============================= test session starts =============================
platform win32 -- Python 2.7.3 -- py-1.4.24 -- pytest-2.6.2
plugins: xdist
gw0 [3] / gw1 [3] / gw2 [3] / gw3 [3]
scheduling tests via LoadScheduling
==============================  in 1.93 seconds ===============================

我正在使用的版本:

  • 蟒蛇 2.7.3
  • pytest 2.6.2
  • pytest-xdist 1.11

附加说明:

对于一些旧版本(xdist 1.8 和 pytest 2.4.X 或 2.5.X 不记得确切了(,xdist 在断言时停止了 dsession.py

assert collection == col

提前感谢您提供任何帮助,如何解决它或至少解决它:)

所以这是 Armins 提示之后的代码:)

import pytest
import random
PARAMS_NUMBER = 3
PARAMS = []
for i in range(PARAMS_NUMBER):
    PARAMS.append(1000)
@pytest.mark.parametrize('rand_par', PARAMS)
def test_random_param(rand_par):
    par_val = random.randrange(0, rand_par)
    assert 500 > par_val

它使用随机选择的值运行测试3次。

更新:我为 xdist 项目创建了一个问题,并在为用户返回合理信息的含义中解决了这个问题。

更多信息可以在这里找到 py.test 与 xdist 不执行使用随机值参数化的测试

解决方法是使用可重现(但无意义(的值进行参数化,例如 0 到 PARAMS_NUMBER-1 之间的所有数字。 然后,每个测试都可以在运行时单独选择一个随机值。 为了知道它选择了哪个随机值(在崩溃时重现(,每个测试都应该首先打印它。 至少这是我对一些非 xdist 测试所做的;我希望它也适用于 xdist,即打印被正确传播到父进程,并且仅在单个测试失败时显示(或使用 -s 运行 py.test(。

最新更新