2016-12-30 6 views
0

У меня много «длинных тестов», где я должен ждать некоторого относительно большого таймаута (минуты). Например, я вызываю некоторый API в тесте, подождите 15 минут и после этого проверяю веб-страницу на предмет изменений.Как приостановить тест py.test и выполнить некоторые другие тесты во время ожидания?

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

Единственное решение, которое я вижу - организовать тесты (с крючками pytest_collection_modifyitems):

  1. Выполнить первые части (до 15 минут пауза) всех длинных тестов (назовем API в конечном примере тест выше)
  2. Выполнить все короткие тесты
  3. (необязательно) немного подождать, если (2) занимает менее 15 минут
  4. Выполнить второй части (после паузы) всех длинных тестов (проверка веб-страницы в приведенном выше примере)

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

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

UPD xdist не очень помогает - даже если я могу контролировать, как он распараллеливает тесты (в каких группах, которые запускаются одновременно), мне пришлось бы запускать все длительные тесты параллельно, потому что я хочу сделать что-то полезное во времени ожидания, а не просто ждать (15 минут * (количество длинных тестов))/(количество xdist процессов).

Кажется, единственный способ - запланировать основную петлю pytest для этого. Таким образом, он будет запускать тесты асинхронно. Но я даже не знаю, с чего начать это делать.

+0

Кажется, что вы хотите выполнить несколько действий параллельно. В этом случае вам может потребоваться использовать https://docs.python.org/2/library/multiprocessing.html или https://docs.python.org/2/library/thread.html#module-thread – Andersson

+0

Спасибо , очень хорошая идея! Для запуска вторых частей в виде потоков с простым сном внутри потоков. Но я не понимаю, что «сантехника» должна возвращать результаты в py.test. Кажется, мне нужно подождать в каком-то месте в главной теме py.test для всех этих дополнительных потоков, чтобы закончить, но в каком месте? И как передать все утверждения из дополнительных потоков в основной? Я думал, что для этого есть библиотека, особенно для py.test. – MasterAndrey

ответ

0

Существует pytest-xdist plugin for pytest, что позволяет проводить параллельное тестирование. То есть ваши тесты будут выполняться одновременно несколькими процессами (на нескольких процессорах) одновременно. Это точно не зависит от того, что вы просите, это не приостанавливает длительные тесты, но это позволяет запускать другие тесты одновременно с выполнением длительных тестов.

Если вы можете отредактировать свой вопрос, чтобы описать, что вы подразумеваете под «первыми частями» и «вторыми частями» тестов, я мог бы дать лучший ответ.

+0

Благодарим вас за идею. Сейчас я не понимаю, как xdist может помочь с моей проблемой. Я отредактировал вопрос, чтобы рассказать об этом. – MasterAndrey

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

  • Нет связанных вопросов^_^