带有xdist的py.test没有执行使用随机值参数化的测试

时间:2014-09-21 11:21:43

标签: python pytest xdist

是否有人注意到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 ===============================

我使用的版本:

  • python 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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

所以这是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 with xdist is not executing tests parametrized with random values

相关问题