是否有人注意到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 ===============================
我使用的版本:
附加说明:
对于一些旧版本(xdist 1.8和pytest 2.4.X或2.5.X不记得确切),xdist在dsession.py中停止断言
assert collection == col
提前感谢任何帮助如何解决或至少解决它:)
答案 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