2016-11-16 3 views
3

Я использую BDD (Behat) для функционального тестирования в своем проекте. Теперь у меня есть проблема при тестировании функции со слишком большим количеством фоновых заданий. Пример:BDD-тестирование со слишком большим количеством фоновых заданий?

Scenario: Import issue at the first time 
    Given I have a issue package "1602.zip" 
    When I upload issue "1602.zip" 
    Then I have to wait until it is finished 
    And I can see list of articles are imported 
    And status of issue is "1" 

«Тогда я должен ждать, пока она не будет закончена» содержит:

  • Сервера 1 получил загруженный файл, вставить некоторые метаданные в базу данных и отметьте статус «импорт» , затем загрузите zip-файл в s3
  • Сервер 2 загрузите файл с s3 и обработайте активы, такие как PDF, изображения, затем запишите все после обработки и загрузите на s3 снова.
  • Сервер 3 скачать результат почтовый пакет (сделано сервером 2) от s3, и начать импортировать выпуск (импорт PDF, изображения, статьи ...)

"И я могу увидеть список статьи импортируются «Я вызываю API на сервер, чтобы получить список статей этой проблемы.

Так как вы можете видеть, потому что во время импорта, у нас слишком много фоновых заданий (с использованием Resque), так что я должен ждать, пока она не будет завершена проверка состояния выдачи:

while ($status != 1) { 
    $status = getStatusOfIssue(123); 
    if (1 === $status) { 
     break; 
    } 
} 

Проблема заключается в том Я не знаю, сколько времени мне нужно ждать, потому что это зависит от размера пакета проблем, большего размера - более длительного времени для ожидания. Итак, в этой ситуации, что мне делать?

+0

В чем состоит «Я должен подождать, пока это не закончится»? и что «я вижу список статей импортированы» чеки? – lauda

ответ

1

Как правило, вам нужно использовать условное ожидание, чтобы проверить что-то, что вам известно (подождите несколько секунд до).

условие может быть:
- статус запроса
- элемент отображается на странице
- не отображается/элемент страницы

Подсказка: вы должны избегать использования только while и используйте цикл do-while вместо 2 условий, в которых вы нуждаетесь, в вашем случае проверьте статус, и тот, который выйдет из цикла, если первый никогда не будет выполнен, как счет.

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