E2E / Интеграционное тестирование с очередями заданий - PullRequest
0 голосов
/ 01 марта 2020

Context

Я хочу выполнить интеграцию и сквозное тестирование REST API, использующего очередь заданий, поддерживаемую Redis.

Когда выполняется HTTP-запрос POST для конечной точки, такой как POST /users, моя служба поставит в очередь задание на отправку приветственного письма, другое для обработки изображений, другое для отправки уведомлений Slack и событий Google Analytics и т. д. c.

В E2E / Интеграционный тест, я не хочу издеваться над очередью заданий - я бы скорее заменил зависимости типа EmailService на FakeEmailService, который просто сохраняет электронные письма на диске и позволяет мне впоследствии утверждать о состоянии.

Issue

Однако меня беспокоит представление о том, что поскольку постановка в очередь и выполнение заданий происходит вне цикла HTTP-запросов / ответов, и поскольку они выполняются по требованию, запускается Redis. , может быть небольшая задержка между ответом POST-запроса 201 и фактической обработкой задания. Это означает, что если я попытаюсь утвердить состояние, такое как состояние электронной почты, отправляемой сразу после ответа на запрос POST, нет никаких гарантий, что задание действительно было обработано к этому времени, и вместо этого оно могло быть обработано на порядок миллисекунд позже. таким образом, тесты могут ошибочно завершиться неудачей.

Таким образом, как следует go проверить, что все побочные эффекты от обработанных заданий в рамках теста E2E / Integration на уровне UI / Endpoint / Presentational на самом деле правильные, учитывая для задержки между запросом API и выполнением задания?

Потенциальные решения

  1. Отличным решением является просто макетирование очереди заданий, но я верю в максимально возможном использовании реальных зависимостей, особенно в тестах E2E / Integration, поэтому я не рассматриваю эту опцию.
  2. В качестве альтернативы, мои тесты могут быть "спящими" от 500 мс до 1000 мс, чтобы учесть задержку между ответом HTTP и выполнением задания работником, но с десятками тестов, это сложится, так что вряд ли кажется неплохим решением.

Очереди заданий / заданий используются чрезвычайно часто, но пока я не могу понять, как go написать на них тесты Integration / E2E. Любая помощь приветствуется.

...