Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Минимум кода для автоматизации интеграционных т...

SECR 2019
November 14, 2019

Минимум кода для автоматизации интеграционных тестов в микросервисном приложении

Дмитрий Волочаев
Инженер-программист, Аурига
SECR 2019

Я поделюсь опытом автоматизации интеграционных тестов в микросервисном веб-приложении.

Вы сможете автоматизировать запуск локального тестового окружения для вашего микросервиса. Это сразу же ускорит вашу работу. Еще вы сможете тестировать взаимодействие вашего сервиса с Amazon AWS при условии, что тест взаимодействует с сервисом только через публичный интерфейс и не использует никакие мок-объекты.

Тест, как и само приложение, использует Docker и не требует установки каких-либо инструментов на хост-систему.

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

SECR 2019

November 14, 2019
Tweet

More Decks by SECR 2019

Other Decks in Programming

Transcript

  1. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Минимум кода для автоматизации интеграционных тестов в микросервисном приложении Ноябрь 2019 Дмитрий Волочаев [email protected] 2 5 + Y E A R S O F E N G I N E E R I N G L E A D E R S H I P
  2. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P 2 5 + Y E A R S O F E N G I N E E R I N G L E A D E R S H I P ИСПОЛЬЗУЕМЫЕ ТЕХНОЛОГИИ JSON REST Docker Amazon AWS Postman .NET Core Node JS Liquibase
  3. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P POSTMAN: ЗАПУСК КОЛЛЕКЦИИ ЗАПРОСОВ
  4. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P POSTMAN: ВЫПОЛНЕ- НИЕ В ПРОЦЕССЕ
  5. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P ECS SNS SQS Хранилища Postgres Redis S3 СЕРВИСЫ AWS
  6. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P SNS topic Сервис Сервис Очередь Сервис Сервис Сервис SNS topic Очередь Сервис SQS И SNS
  7. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Образ Репозиторий DOCKER PULL
  8. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Dockerfile Базовый образ Репозиторий DOCKERFILE
  9. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Dockerfile Образ Базовый образ Репозиторий DOCKER BUILD
  10. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Dockerfile Образ Контейнер Базовый образ Репозиторий DOCKER START
  11. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Dockerfile Образ Репозиторий Контейнер Базовый образ Репозиторий DOCKER PUSH
  12. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Dockerfile Образ Репозиторий Amazon Amazon ECS Контейнер Базовый образ Репозиторий DOCKER И AMAZON ECS
  13. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Юнит-тест Интеграционный тест ВИДЫ ТЕСТОВ
  14. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Изменение • Изменение в коде, самостоятельные ручные тесты Тест • Автоматические тесты локально Коммит • Коммит в ветку, созданную для данной задачи Тест • Автоматические тесты на сервере Ревью • Команда проверяет код Мерж • Изменение добавляется в общую ветку Тест • Автоматические тесты на общей ветке Деплой • Автоматическое обновление стенда РАБОЧИЙ ПРОЦЕСС
  15. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Нестабильный интернет • Запросы посылаются слишком часто • Риск поломать стенд • Деплой на Амазон сложнее, чем локальный тест • Необходимо удалять всё, что создали ЗАЧЕМ НЕЗАВИСИМОСТЬ ОТ ИНТЕРНЕТА
  16. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • https://docs.microsoft.com/ru-ru/aspnet/core/test/integration- tests?view=aspnetcore-2.2 • Код вместо Postman • https://github.com/visionmedia/supertest АЛЬТЕРНАТИВНЫЕ РЕШЕНИЯ
  17. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P Браузер API Gateway Сервис A Postgres SQS Сервис Б Сервис уведомлений АРХИТЕКТУРА
  18. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Тестируемый сервис • Реквизиты подключения к БД и Localstack • Postgres • Создать таблицы (миграция) • Redis • AWS Localstack • Создать очереди, SNS-topics и т.д. ОКРУЖЕНИЕ МИКРОСЕРВИСА
  19. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Построение докер-образов • docker-compose build • Запуск БД и LocalStack • docker-compose up -d <контейнер> • Миграция БД и подготовка LocalStack • docker-compose run <контейнер> • Запуск тестируемого сервиса • docker-compose up -d <сервис> КАК ТЕСТ АВТОМАТИЗИМРУЕТСЯ
  20. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Запуск теста (Newman) • docker-compose run <контейнер> • Остановка всех контейнеров • docker-compose down • Постинг результатов в Slack • curl -X POST --data-urlencode "payload={\"channel ": \"\", \"username\":"\", \"text\":\"\"} "${SLACK_WEBHOOK_URL}" КАК ТЕСТ АВТОМАТИЗИМРУЕТСЯ (ПРОДОЛЖЕНИЕ)
  21. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Образ сервиса тот же, что и для production • Postgres, Redis и Localstack – как есть из Docker Hub • Миграция БД: к образу из Docker Hub добавляется migration.xml и зависимости КОНФИГУРАЦИЯ ДЛЯ ТЕСТА
  22. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Подготовка Localstack: образ AWS CLI из Docker Hub + shell-скрипт • Тест: образ Newman из Docker Hub + postman environment + postman collection + shell-скрипт КОНФИГУРАЦИЯ ДЛЯ ТЕСТА (ПРОДОЛЖЕНИЕ)
  23. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Docker-compose только запускает контейнеры-зависимости • wait_for.sh проверяет возможность TCP-соединения • Localstack может вернуть ошибку 502 или закрыть соединение, не вернув ответа • Localstack состоит из множества сервисов, один ожил, а другой еще нет ОЖИДАНИЕ ГОТОВНОСТИ
  24. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Тесты запускаются одновременно в одном докер-хосте • Могут быть одновременно запущены тесты разных версий одного сервиса • Решение: случайный COMPOSE_PROJECT_NAME КОНФЛИКТЫ ПАРАЛЛЕЛЬНЫХ ЗАДАЧ
  25. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Скрипты в контейнере должны иметь линуксовые концы строк git config core.autocrlf input • Преобразование путей при запуске exe-файла из git-bash Решение: //bin вместо /bin ОСОБЕННОСТИ WINDOWS
  26. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Логи от интересующих сервисов должны быть в консоли • docker-compose up <сервис> & • docker attach --no-stdin ${COMPOSE_PROJECT_NAME}_<сервис>_1 & ВЫВОД ЛОГОВ
  27. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • В базе уникальные ID • У сервиса нет API для удаления • Тест запускается в несколько итераций • Следовательно, нужны уникальные ID var uuid = require('uuid'); pm.environment.set(“entity_id", uuid.v4()); ГЕНЕРАЦИЯ GUID В POSTMAN
  28. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • Сервис пишет в SNS или SQS • Подписываем SQS на SNS • Читаем очередь в Postman • Сервис читает очередь • Пишем в очередь из Postman • Ждем, чтобы сервис обработал сообщение ВЗАИМОДЕЙСТВИЕ ЧЕРЕЗ LOCALSTACK
  29. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • https://mock-server.com/ • HTTP-сервисы, кроме AWS • Функции AWS, не реализованные в LocalStack HTTP MOCK SERVER
  30. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P • /.well-known/openid-configuration • JWKS • Токен • Всё это статический контент MOCK OAUTH
  31. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P WebSocket Client Postman Тестируемый сервис ТЕСТИРОВАНИЕ SIGNALR
  32. 2 5 + Y E A R S O F

    E N G I N E E R I N G L E A D E R S H I P СПАСИБО ЗА ВНИМАНИЕ! ДМИТРИЙ ВОЛОЧАЕВ Инженер-разработчик [email protected] Skype dmitry.volochaev1 ОФИС В БОСТОНЕ 400 TradeCenter Ste 5900 Woburn, MA 01801, USA Тел: +1 (866) 645-1119 Факс: + 1 (603) 386-6097 ОФИС В ЕВРОПЕ Ukmergės g. 322, LT- 12106, Vilnius, Lithuania Тел: +370 (5) 203-1571 Факс: +370 (5) 203-1573 [email protected] www.auriga.ru ОФИС В РОССИИ 117587, Россия, г. Москва, Варшавское ш., д. 125, стр. 16А Тел: +7 (495) 713-9900 Факс: +7 (495) 939-0300 2 5 + Y E A R S O F E N G I N E E R I N G L E A D E R S H I P