Можно ли использовать Nose для одновременного запуска одного теста несколько раз?

Можно ли использовать nose для одновременного запуска одного теста (во всех несколько процессов) и объединить результат в один результат прохождения/непрохождения?

У нас есть необходимость запускать один и тот же тест несколько раз одновременно, чтобы гарантировать, что блокировка ресурсов не будет затронута. Если нос не может этого сделать, существует ли конкретный шаблон тестирования/проектирования для достижения этой цели?


person Phillip B Oldham    schedule 03.11.2010    source источник
comment
Так что да, можно запустить один тест одновременно. Можете ли вы более подробно описать агрегирование в один проход/непрохождение? Вы хотите пометить один тест как «выполнять много раз», а другие — как «выполнять один раз» в том же наборе? Должно быть легко, если так.   -  person TryPyPy    schedule 12.01.2011


Ответы (2)


Можно запускать тесты одновременно с Nose:

Используя подключаемый модуль Nose.plugin.multiprocess, вы можете распараллелить тестовый прогон для настраиваемого количества рабочих процессов. Хотя это может ускорить выполнение тестов с привязкой к ЦП, в основном это полезно для тестов с привязкой к вводу-выводу, которые тратят большую часть своего времени на ожидание поступления данных откуда-то еще и могут извлечь выгоду из распараллеливания.

Я адаптировал плагин для запуска одного теста параллельно, как вы хотите. Загрузите с http://paste.pocoo.org/show/319470/ и сохраните как nose/plugins/repeat.py . Затем в nose/plugins/builtin.py добавьте строку ('nose.plugins.repeat', 'RepeatMultiProcess'), к builtins. Звоните так:

c:\python27\python nose-1.0.0\selftest.py --repeat-processes=2 --repeat-times=3 test2.py

Примечание: поддержка установки/разборки может быть нарушена. Если это так, исправление простое, см. комментарий в строке

person TryPyPy    schedule 12.01.2011
comment
Вы неправильно поняли - мне нужно запустить один единственный тест несколько раз одновременно. - person Phillip B Oldham; 12.01.2011
comment
Я правильно понял, это встроенный способ запуска нескольких процессов. Я пытаюсь понять, как использовать его для параллельного запуска одного и того же теста. - person TryPyPy; 12.01.2011
comment
Действительно, мой хак работает, но почему-то кажется, что один тест всегда запускается только один раз. Отладка... - person TryPyPy; 12.01.2011
comment
Обе ваши исходные ссылки теперь не работают. Можете ли вы поместить исходный код в суть на github или что-то в этом роде? - person slacy; 08.06.2012

Это похоже на то, что вам нужно в самом определении теста, потому что вы хотите утверждать агрегацию результатов. Я бы взглянул на использование многопроцессорности в тесте. Создайте пул для параллельного выполнения вашего кода. Вы можете использовать Queue для объединения результатов.

person dietbuddha    schedule 12.01.2011