Рубрики
Uncategorized

#Discuss — функциональные / интегральные тесты на уровне API в архитектуре микросервисов

Обсуждение о лучших практиках для функциональных испытаний уровня API на архитектуре микросервисов. Теги с обсуждением, дежоптом, тестированием.

Привет. Рассмотрим проект около 10 микросервисов, некоторые очень простые без внешних зависимостей и других более сложных, в зависимости от 2 или 3 других услуг:

Как бы вы обратитесь к функциональному тестированию/интеграционному тестированию API уровня для каждой службы?

Задний план:

  • Все услуги разработаны одной и той же командой разработки. (сейчас)
  • Команда разработки — обычная команда Scrum (~ 5 API Devs)
  • Прямо сейчас мы используем упрощенную версию потока GIT. (Функция филиала -> Разработка -> Мастер). Тогда конечная цель — стать ближему рабочему процессу CI/CD, но это займет время.
  • Устройства тесты и статический анализ запускаются на каждом PR, блокируя слияние, если не удалось.
  • Базовый набор тестов Frontend E2E, охватывающий критические случаи использования.

Некоторые возможные подходы:

Запустите тесты на каждом PR?

Имеет смысл для функциональных испытаний также выполняться на каждом PR?

Запуск тестов на каждом PR позволит определить проблемы ранее, но будет более сложным для OPS, поскольку им нужно будет создавать новый экземпляр в тесте обслуживания, а также все необходимые зависимости, такие как базы данных. Инструменты, такие как Куберанеты, могут помочь на этом, но все же, его дополнительная работа для команды OPS.

Мы можем использовать приспособления данных или аналогичные, чтобы заполнить базы данных с тестовыми данными, но как насчет обслуживания зависимостей? Издеваться надзависимые услуги или порождайте реальный экземпляр этой услуги?

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

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

Запустите тесты на специальные «тесты интеграции»?

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

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

Смесь обоих

Это было бы, вероятно, идеальное решение, но это может быть более сложным для поддержания и занять больше времени для реализации.

  • На каждом PR создайте экземпляр в разделе «Экземпляр службы» плюс все необходимые структуры данных (EX: База данных)

  • Услуги, которые в тесте обслуживания зависит от того, должно быть издеваться.

  • Есть тестирование контракта для обнаружения изменений в разрыв.

  • Отказ от этого теста заблокирует сливание PR до фиксированного.

  • После успешного слияния есть интеграционная тестовая среда, в которой все службы работают и управляют там тесты.

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

Давайте начнем обсуждение. Как вы думаете, что будет лучшим подходом?

Я знаю, что функциональные тесты и интеграция являются различными видами испытаний, и, вероятно, имеет смысл иметь смысл, а затем оба (аналогично третьему сценарию), но имейте в виду ограничения. Как вы думаете, должен быть приоритетом? Функциональная или интеграция? Мы не Netflix, и мы хотели бы иметь самый простой возможный рабочий процесс, который даст нам больше уверенности на выпусках к конечной цели CI/CD.

Оригинал: «https://dev.to/brpaz/discuss—api-level-functional—integration-tests-in-a-microservices-architecture-4eh9»