py.test с 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 ответа
Так вот код после подсказки Армина:)
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, то есть распечатки правильно распространяются на родительский процесс и отображаются только в случае сбоя отдельного теста (или py.test запускается с -s).