Модель бессерверных приложений 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
могут быть реализованы вместе с тестовой группой:
Ресурсы
- https://aws.amazon.com/serverless/sam/
- https://aws.amazon.com/api-gateway/
- https://aws.amazon.com/lambda/
- https://www.postman.com/
- https://marketplace.visualstudio.com/items?itemName=humao.rest-clien
- https://jestjs.io/
- https://localstack.cloud/
- https://github.com/testjavascript/nodejs-integration-tests-best-practices
Want to Connect? I hope you’ve found this article helpful! Subscribe to my newsletter or connect on Twitter or LinkedIn.