2010-11-03 3 views
10

Можно ли использовать nose для запуска одного теста одновременно (через несколько процессов) и суммировать результат с одним результатом/неудачей?Можно ли использовать Нос для запуска одного теста несколько раз, одновременно?

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

+1

Итак, да, можно одновременно запустить один тест. Можете ли вы описать агрегацию в один проход/неудачу более подробно? Вы хотите отметить один тест как «запустить много раз», а другие - «запустить один раз» в одном и том же пакете? Должно быть легко, если так. – TryPyPy

ответ

9

Можно run tests concurrently with nose:

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

Я адаптировал плагин для запуска одного теста параллельно, как вы хотите. Скачать с 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 

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

+0

Вы неправильно поняли - мне нужно запускать * один тест * несколько раз одновременно. –

+0

Я не понял, что это встроенный способ запуска «через несколько процессов». Я пытаюсь понять, как использовать его для параллельного запуска одного и того же теста. – TryPyPy

+0

Действительно, мой взлом работает, но как-то один тест, кажется, всегда запускается только один раз. Отладка ... – TryPyPy

11

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

Смежные вопросы