Тестирование 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
Вместо этого выполните цикл с двумя условиями, одним из которых вам нужно, в вашем случае проверьте состояние, и тем, который выйдет из цикла, если первый никогда не будет выполнен, как счетчик.