Рандомизация порядка выполнения тестов с помощью носовых тестов

У меня есть набор тестов, которые, как я недавно обнаружил, имеют (неправильное) отношение порядка. Все они должны быть независимыми.

Похоже, что Nose каждый раз запускает тесты в одном и том же порядке, что само по себе не раскрывает эти зависимости, если только не произойдет магия и мне не удастся внедрить что-то, что приведет к сбою (не мой любимый метод программирования).

Как я могу поручить носу рандомизировать порядок выполняемых тестов?


person Paul Nathan    schedule 12.12.2012    source источник


Ответы (2)


Нет встроенного способа сделать это. Я осмотрелся и обнаружил вот этот плагин для носа, предназначенный для рандомизации тестового порядка:

https://github.com/my8bird/nose-randomize

Судя по исходникам, это работает только для тестов, наследуемых от unittest.TestCase. Если это не сработает для вас, вы, безусловно, можете использовать его в качестве отправной точки для написания своего собственного.

Если вы просто хотите, чтобы один раз выявлял зависимости, вы можете передать список тестов носу. Ленивый метод будет заключаться в том, чтобы получить список ваших тестов и пройти все перестановки одну за другой:

nosetests /path/to/testA.py /path/to/testB.py /path/to/testC.py
nosetests /path/to/testA.py /path/to/testC.py /path/to/testB.py
nosetests /path/to/testB.py /path/to/testA.py /path/to/testC.py
nosetests /path/to/testB.py /path/to/testC.py /path/to/testA.py
nosetests /path/to/testC.py /path/to/testA.py /path/to/testB.py
nosetests /path/to/testC.py /path/to/testB.py /path/to/testA.py

Это может занять всю ночь, но вы, по крайней мере, будете знать, в чем ваши проблемы.

Надеюсь, это поможет вам начать.

person Rachel Sanders    schedule 14.12.2012
comment
В любом случае, наверное, лучше сделать это так. Если вы обнаружите зависимости тестового порядка, будет очень сложно разобраться в них, если каждый раз порядок будет разным. Я бы также рекомендовал проверить опцию --with-id; может быть проще переставить по идентификаторам тестов, чем по полным дескрипторам тестов (путь:класс:метод). - person dbn; 18.12.2012
comment
Я думаю, что этот плагин немного лучше — он позволяет вам установить начальное значение, а также сообщит какое семя используется для каждого прогона - person Matt; 17.03.2015

вы можете запустить затем по порядку, указав полный путь к тестовому набору с именем класса

./nose <<testcasename>>:<<classname>>.testcase_name1 <<testcasename>>:<<classname>>.testcase_name2
        <<testcasename>>:<<classname>>.testcase_name4

скопируйте этот путь в файл bat.cfg и запустите с ./nose -c bat.cfg

person RICHA AGGARWAL    schedule 19.09.2014