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

Docker, Testcontainers в интеграционном тестиро...

Docker, Testcontainers в интеграционном тестировании

Обзор технологии виртуализации в разрезе аппаратной виртуализации и контейнеризации. Основные команды Docker. Примеры использования Testcontainers и JUnit. Обоснование написания тестовой обвязки и важные моменты при её проектировании.

Avatar for nikolai.smirnov

nikolai.smirnov

April 10, 2020
Tweet

More Decks by nikolai.smirnov

Other Decks in Programming

Transcript

  1. Docker и автоматизация тестирования Обзор технологии легковесной контейнеризации в применении

    к автоматизированному тестированию ПО Николай Смирнов | bercut.com | СПбПУ 2020
  2. Обо мне • Java-программист с 2007 г. • Преподаватель курса

    «Технологии разработки качественного ПО» с 2018 г. (ИКНТ) • Руководитель группы автоматизации тестирования отдела Платформы http://bercut.com 2
  3. ― Karl Matthias, Docker: Up and Running “If deploying software

    is hard, time- consuming, and requires resources from another team, then developers will often build everything into the existing application in order to avoid suffering the new deployment penalty.” Виды виртуализации Архитектура Docker Применение Docker Автоматизация тестирования Рекомендации к API тестового фреймворка TestContainers О чем
  4. Virtualization In computing, virtualization refers to the act of creating

    a virtual (rather than actual) version of something, including virtual computer hardware platforms, storage devices, and computer network resources. / wikipedia 4
  5. Виртуализация Виртуализация — предоставление набора вычислительных ресурсов, абстрагированное от аппаратной

    реализации, и обеспечивающее при этом логическую изоляцию друг от друга вычислительных процессов, выполняемых на одном физическом ресурсе. / википедия 5
  6. Аппаратная виртуализация 1 2 3 4 5 VM Создается Виртуальная

    машина = Virtual machine с выделенным (виртуальным) аппаратным обеспечением 1 Как отдельная ОС Для приложения внутри VM всё выглядит как реальная ОС 3 HW отделено ПО в Guest-машине отделено от реального железа Host-машины 5 Hypervisor Guest-машину создает гипервизор – программное обеспечение для эмуляции части команд ОС 2 Host vs. Guest Host-машина (хозяин) содержит и обеспечивает работу Guest- машины (гость) 4 VMware Workstation Player Oracle VirtualBox
  7. Контейнеризация КАК БЫ ОС Виртаульная среда (контейнер) изолирован от других

    и выглядит как отдельная ОС со своими ресурсами ОДНО ЯДРО Созданные виртуальные среды работают с одним ядром операционной системы ФИЧА ТАКАЯ Виртуализация реализована на уровне операционной системы. Это фича ОС
  8. Контейнеры и ВМ ВМ виртуализирует hardware 17 Контейнер виртуализирует ОС

    https://www.docker.com/resources/what-container https://www.docker.com/resources/what-container
  9. Быстродействие Docker In general, Docker equals or exceeds KVM performance

    in every case we tested. Our results show that both KVM and Docker introduce negligible overhead for CPU and memory performance (except in extreme cases). For I/O intensive workloads, both forms of virtualization should be used carefully. 23 [1] IBM Research Report “
  10. 25 Когда я использую Docker? Тестирование System Under Test внутри

    Docker Ex: TestContainers Разработка Поднимаю настроение сторонние сервисы для dev-стенда. Ex: PostgreSQL Исследование поднимаю продукты в Docker- контейнере чтобы «поиграть». Ex: Jenkins
  11. Демо: основные команды 1. docker run – скачать образ и

    запустить контейнер 2. docker ps – показать контейнеры 3. docker image ls – показать образы 4. docker rm – удалить контейнер 5. docker inspect – посмотреть свойства контейнера 6. docker exec – выполнить команду в контейнере 26
  12. Типичные проблемы автотестов • Отличия окружения стендов тестирования/разработки • Хрупкость

    настройки стендов • Cложность изоляции по данным в одной БД • Рутинное разворачивание новых сборок • Необходимость корректного cleanup после тестирования • «Эффект домино» при фейлах массового прогона 44
  13. Чем поможет Docker? • Изоляция окружений (для групп тестов) друг

    от друга • Возможность параллелизма прогона • «Чистый» запуск окружения • Конфигурация ОС/приложения в коде • Рандомизация публикуемых портов 45
  14. Нужны ли контейнеры в тесте? • Низкоуровневое программирование • Высокий

    порог вхождения • Много кода = много ошибок • Создание обвязки = DSL для тестов! 47
  15. Создание обвязки • Бизнес-ориентация сценариев • Автоматическое описание теста •

    Лаконичность кода • Простота перехода к BDD • “-” гибкость 48
  16. Полезные Дополнения API • Обращение к статистике, мониторингу (для тестирования

    производительности) • Доступ к логам (для функциональных и стресс-тестов) • ЖЦ контейнеров (для стресс-тестирования) 49
  17. Уносите это с собой • Оберните SuT в Docker-контейнер •

    Пишите интеграционные тесты с Docker • Разрабатывайте удобную обвязку • Запускайте тесты параллельно 50
  18. Ссылки 1. Wes Felter. An Updated Performance Comparison of Virtual

    Machines and Linux Containers – 2014 – https://domino.research.ibm.com/library/cyberdig.nsf/papers/092905219 5DD819C85257D2300681E7B/$File/rc25482.pdf 2. Gianluca Arbezzano. Write Maintainable Integration Tests with Docker – dockercon 2019 – https://www.youtube.com/watch?v=RoKlADdiLmU 3. Смирнов Николай. Демонстрация использования библиотеки Testcontainers в интеграционном тестировании (исходный код) https://github.com/nikolai/simple-url-shortener-pg 51