Как создать приемочные тесты для асинхронных микросервисов

Если у меня есть микросервис, который должен создавать пользователя, но поскольку создание пользователя является сложным, он использует очередь, а пользователь фактически создается потребителем, конечная точка только принимает запрос и возвращает ОК или сбой.

Как создать приемочный тест для этого критерия приемки:
Данный: Пользователь, желающий зарегистрироваться Когда: api запрашивается для создания пользователя Потом: создать пользователя И установить идентификатор среды хостинга для нового пользователя

Для этого мне нужно подождать, пока среда действительно настроится, что занимает до 30 секунд. И если я использую сон в своем тесте, то я попаду в антипаттерн ждать и смотреть, как правильно протестировать его, не нарушая лучших практик?

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

vanillaSugar 25.09.2018 16:11
8
1
534
3

Ответы 3

наиболее правильным может быть немедленное возвращение ответа, допустим, «процесс установки запущен» (с идентификатором процесса настройки), а затем другой метод API, который «получит статус настройки» (для этого идентификатора процесса настройки), а затем продолжит , когда «установка завершена».

потому что, как и в этом случае, ничего не будет зависать на 30 секунд, ни в тестах, ни в производстве - и можно отобразить для пользователя индикатор выполнения, который указывает текущий статус, так что они будут иметь оценку, сколько времени это займет - при этом не получая создается впечатление, что что-то застряло или не будет работать.

едва ли можно тестировать асинхронно, а сам процесс настройки не будет асинхронным; а длительно выполняющиеся задачи без какого-либо индикатора состояния едва ли приемлемы для доставки - потому что это выглядит действительным только при знании того, что происходит в фоновом режиме, но не при незнании этого.

всякий раз, когда тестирование попадает в антипаттерн, это показатель того, что решение мог бы является неоптимальным.

Я не берусь говорить вам, как именно кодировать ваши приемочные тесты без более подробной информации о языке или стеке тестирования, но самое простое решение - реализовать динамическое ожидание, которое непрерывно опрашивает состояние системы для получения желаемого результата, прежде чем двигаться вперед. разорвать цикл (предполагая, что вы будете использовать какую-либо форму цикла, но это зависит от вас), когда ожидаемый / желаемый ответ был получен.

Этот «опрос» может принимать разные формы, например:

а) запрос ожидаемого обновления в базе данных (возможно, значение в таблице обновляется при создании пользователя)

б) пинговать зависимую службу до тех пор, пока вы не получите правильный «сигнал», который вы ожидаете указать на создание пользователя. Например, возможно, запрос GET к другой службе (или другой конечной точке той же службы) возвращает статус «создан» для данного пользователя, что означает, что пользователь был создан.

Без дополнительной технической информации я не могу дать вам точных инструкций, но динамический опрос - это решение, которое я использую каждый день для тестирования нашей асинхронной микросервисной архитектуры.

Имейте в виду, что это решение для динамического опроса работает в предположении, что у вас есть доступ к сервисам и / или базам данных, которые содержат индикатор, для которого вы «опрашиваете», когда пришло время продвигаться вперед с вашим тестом. . Опять же, сигнал к движению вперед - это что-то прозрачное, такое как изменение статуса для вновь созданного пользователя, существование пользователя в базе данных / таблице, внешней или внутренней по отношению к микросервису и т. д.

Некоторые другие предположения в этом сценарии:

a) достаточная нефункциональная производительность тестируемой системы, когда плохая нефункциональная производительность тестируемой системы будет ограничением.

б) отсутствие ограничений на ресурсы, так как ресурсы потребляются довольно сильно во время «опроса», так как ресурсы потребляются довольно сильно в период «опроса». (подумайте о гибкости динамических ресурсов Azure, которая со временем может оказаться дорогостоящей).

Примечание: будьте осторожны с бесконечными циклами. Вы должны вставить какое-то ограничение, которое выходит из цикла опроса (и, вероятно, приводит к провалу теста) после разумного периода времени или количества попыток по вашему усмотрению.

Создайте службу запросов, которая с учетом атрибутов пользователя (id, name и т. д.) Вернет статус пользователя.

Для критериев приемки будет 2 части

  1. Сервис create-user возвращает 200
  2. Сервис get-status возвращает 200 (вы можете вызвать его в цикле в своем тесте).

Эта услуга будет полезна в долгосрочной перспективе по разным причинам.

  1. Проверьте, сколько времени требуется для завершения асинхронного процесса.
  2. В любое время вы можете получить статус любого пользователя, в том числе проверить, действительно ли пользователь удален / деактивирован и т. д.
  3. Вы можете имитировать результаты этой службы в ходе комплексного комплексного тестирования.

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