В чем разница между REST и брокерами сообщений, их плюсы и минусы
Что проверяют
Понимаете ли вы разницу между синхронным вызовом и обменом сообщениями, и умеете ли тестировать второе. Для тестировщика это вопрос про то, где искать результат операции.
Как отвечать
REST это синхронный запрос и ответ поверх HTTP: клиент вызывает сервис и ждёт результат. Брокер (Kafka, RabbitMQ) это посредник: отправитель кладёт сообщение и продолжает работу, получатель читает его позже.
Плюсы REST: простая отладка, результат виден сразу, коды ответов и тела запросов легко смотреть в браузере и в инструментах вроде Postman, всё покрывается автотестами напрямую. Минусы: недоступность получателя означает ошибку прямо сейчас, всплеск нагрузки бьёт по вызываемому сервису, длинные операции приходится держать открытым соединением.
Плюсы брокера: сглаживает всплески, переживает недоступность потребителя, позволяет нескольким подписчикам получать одно событие, естественно масштабируется. Минусы: результат появляется не сразу, отладка сложнее, порядок и повторы становятся отдельной темой.
Что из этого следует для тестирования, и это самое ценное в ответе:
- проверка не заканчивается на «запрос принят»: нужно дождаться результата в системе-получателе или в базе;
- проверяется идемпотентность: повторная доставка сообщения не должна создавать второй заказ;
- проверяются очередь недоставленных сообщений, повторы и поведение при недоступном потребителе;
- тесты нестабильны из-за времени: нужны ожидания с условием, а не фиксированные паузы;
- полезно уметь читать очередь напрямую и публиковать в неё тестовое сообщение.
Где спотыкаются
Считают тест пройденным по коду 202 от отправителя.
Ставят паузы в тестах вместо ожидания появления результата.
Не проверяют, что будет при повторной доставке, хотя брокеры обычно гарантируют доставку «хотя бы один раз», то есть дубли неизбежны.