Тестирование BDD со слишком большим количеством фоновых заданий?

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

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 загружает полученный zip-пакет (выполненный сервером 2) из ​​s3 и начинает импортировать выпуск (импорт pdf, изображений, статей...)

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

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам