Модель бессерверных приложений AWS

AWS SAM — это набор инструментов для написания инфраструктуры в виде кода и ее развертывания в облаке.

Это руководство поможет вам создать надежные интеграционные тесты для вашей бессерверной инфраструктуры AWS SAM в соответствии с передовыми отраслевыми практиками.

Тестирование с пользовательскими лямбда-событиями

Функции AWS Lambda можно тестировать с помощью настраиваемых событий, которые изолируют поведение функции. В интерфейсе командной строки SAM для этого есть встроенный инструмент, и вот как его использовать:

$ sam local invoke ExampleLambdaFunction -e ../lambda/events/example-event.json

Тело события должно быть строковым JSON. Вы можете попробовать nodeJS JSON.stringify() для форматирования тела тестового события.

Создайте функции Lambda перед вызовом события, если вы внесли изменения:

$ sam build

Тестирование с SAM Local

Интерфейс командной строки SAM позволяет запускать функции API Gateway и Dockerized Lambda, что позволяет проверять шлюз API с помощью HTTP-клиента. Это может быть полезно при настройке CORS или локальном запуске внешнего интерфейса без усложнения вызовов API и выполнения Lambda, которые могут увеличить счет AWS.

Вот сценарий, который я использую для локального запуска SAM:

См. документацию здесь относительно опций SAM CLI.

Интеграционное тестирование

Интеграционное тестирование является важной частью надежного цикла разработки серверной части.

Интеграционные тесты помогают:

  • Функциональное тестирование
  • Разработка через тестирование
  • Непрерывное развертывание — интеграционные тесты можно запускать в конвейере развертывания перед слиянием изменений или развертыванием.
  • Протестируйте уровни связи между API, Lambda и БД.
  • Регрессионное тестирование — при достаточном функциональном охвате интеграционные тесты повышают уверенность в том, что изменения не имели непреднамеренных побочных эффектов.

Следующие советы помогут с настройкой интеграционных тестов.

Запустите базу данных на LocalStack

LocalStack — это инструмент, который имитирует сервисы AWS, такие как DynamoDB, S3, SQS и другие.

Есть несколько способов запуска LocalStack (Docker, Docker Compose, CLI), но я предпочитаю Docker Compose для подобных случаев с множеством параметров конфигурации.

Следующая конфигурация запускает DynamoDB и S3:

Обратите внимание на конфигурацию networks. Это позволяет контейнерам Lambda Docker подключаться к контейнерам LocalStack.

Вы заметите, что сеть создана в файле run-sam-stack-local.sh. Скрипт также сообщает AWS SAM о сети, используя параметр docker-network.

Используйте существующую тестовую среду, например Jest.

Jest — это восхитительный фреймворк для тестирования Javascript, который можно настроить для запуска сценария глобальной установки до того, как будут запущены какие-либо тесты. Глобальная установка может запускать LocalStack в фоновом режиме:

Я не рекомендую останавливать LocalStack в глобальном скрипте разрыва, так как это замедлит тестирование. Вместо этого оставьте его в фоновом режиме, чтобы обеспечить непрерывное тестирование во время разработки.

Чтобы включить global-setup.js, включите его в конфигурацию Jest, как показано ниже:

У вас может возникнуть соблазн также активировать run-sam-stack-local.sh в глобальной настройке.

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

Заполните базы данных перед каждым набором тестов

Для запуска интеграционных тестов необходимо создать и заполнить базу данных.

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

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

В Jest есть хороший механизм для этого, методы beforeAll и afterAll могут быть реализованы вместе с тестовой группой:

Ресурсы

Want to Connect?
I hope you’ve found this article helpful! Subscribe to my newsletter or connect on Twitter or LinkedIn.