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

CodeFest 2019. Павел Сташевский (Lamoda) — Экзи...

CodeFest
April 05, 2019

CodeFest 2019. Павел Сташевский (Lamoda) — Экзистенциальная сказка о быстрых релизах и автоматизации тестирования

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

Как правило, узким горлышком во всех этих процессах по-прежнему является тестирование. Регрессионное тестирование. Тестов писать нужно много, быстро, как минимум, чтобы они «хорошо» покрывали хотя бы критичный функционал.

В чем здесь сказка, спросите вы? А сказочка в том, что в Lamoda это работает. В разработке бекендов уж точно.

А теперь немного того, что будет в докладе:
— Какие пишутся тесты и как устроен процесс поддержки
— Как мы используем Codeception для автоматизации тестирования php-бекендов
— Почему мокать жизненно необходимо
— Как это все запускается (инфраструктура)

CodeFest

April 05, 2019
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. Интерфейсы: REST, SOAP, UI Начинка: PHP, Symfony, RabbitMQ, Kafka, PostgreSQL/MySQL

    Инфра: Docker, Kubernetes, kibahna, grafana и прочее
  2. Что нужно для быстрых релизов? 1) Все сервисы в docker-e

    2) Легкий процесс деплоя и роллбеков
  3. Что нужно для быстрых релизов? 1) Все сервисы в docker-e

    2) Легкий процесс деплоя и роллбеков 3) Хорошие мониторинги на системные и на бизнес-метрики
  4. Что нужно для быстрых релизов? 1) Все сервисы в docker-e

    2) Легкий процесс деплоя и роллбеков 3) Хорошие мониторинги на системные и на бизнес-метрики 4) Хорошая база надежных авто-тестов
  5. Unit tests Integration tests System tests E2E tests Виды тестов

    Разработчики Тестировщики
  6. Unit tests Integration tests System tests E2E tests API: REST,

    SOAP. Тесты на взаимодействия с другими системами, внутреннюю логику. Виды тестов Разработчики Тестировщики
  7. Unit tests Integration tests System tests E2E tests API: REST,

    SOAP. Тесты на взаимодействия с другими системами, внутреннюю логику. Flow-тесты - тесты на бизнес-флоу для объектов системы (например, заказа). UI-backend тесты. Виды тестов Разработчики Тестировщики
  8. Unit tests Integration tests System tests E2E tests API: REST,

    SOAP. Тесты на взаимодействия с другими системами, внутреннюю логику. Flow-тесты - тесты на бизнес-флоу для объектов системы (например, заказа). UI-backend тесты. 1) Не важна кроссбраузерность для UI 2) Много внешних зависимостей 3) Flow-тесты иногда работают как документация Виды тестов Разработчики Тестировщики
  9. Тестовый фреймворк - Codeception 1) Можно разрабатывать и запускать тесты

    любых уровней (unit, functional, acceptance) 2) Обширная стандартная библиотека модулей 3) Тесты выглядят одинаково во всех проектах
  10. Стандартные модули Codeception 1) PhpBrowser - взаимодействие по http 2)

    REST - работа с API 3) WebDriver - работа с UI 4) Cli - работа с консолью
  11. Стандартные модули Codeception 1) PhpBrowser - взаимодействие по http 2)

    REST - работа с API 3) WebDriver - работа с UI 4) Cli - работа с консолью 5) Db - работа с БД
  12. Стандартные модули Codeception 1) PhpBrowser - взаимодействие по http 2)

    REST - работа с API 3) WebDriver - работа с UI 4) Cli - работа с консолью 5) Db - работа с БД 6) AMQP - работа с очередями по amqp-протоколу
  13. Что пришлось доработать 1) SOAP - работа с несколькими endpoint-ми

    2) Kafka - свой модуль 3) Codeception-flysystem - модуль для работы с файловыми системами https://github.com/lamoda/codeception-flysystem
  14. Про базы данных в тестах 1) Как раскатать БД нужной

    структуры 2) Как заполнить БД тестовыми данными 3) Как делать выборки и проверки
  15. Про базы данных в тестах 1) Как раскатать БД нужной

    структуры - DB 2) Как заполнить БД тестовыми данными - DB, Fixture 3) Как делать выборки и проверки - DB
  16. Про базы данных в тестах 1) Как раскатать БД нужной

    структуры - DB 2) Как заполнить БД тестовыми данными - DB, Fixture 3) Как делать выборки и проверки - DB
  17. Как раскатать базу данных 1) Поднимаем контейнер с PostgreSQL/MySQL (не

    используем in-memory db) 2) Раскатываем структуру с помощью миграций Doctrine migrations
  18. Как раскатать базу данных 1) Поднимаем контейнер с PostgreSQL/MySQL (не

    используем in-memory db) 2) Раскатываем структуру с помощью миграций Doctrine migrations 3) Нужное состояние БД инициализируем перед каждым тестом с помощью Doctrine fixtures bundle a) очищаем данные от прошлого теста b) вставляем данные для нового тесты
  19. Моки для внешних сервисов 1) Мокаем все внешние http- взаимодействия

    внутри теста 2) Проверяем негативные сценарии 3) Избавляемся от flaky-тестов
  20. Wiremock https://github.com/mcustiel/codeception-wiremock-extension 1) Моки поднимаем в отдельном контейнере https://hub.docker.com/r/rodolpheche/wiremock/ 2)

    Мок можно создать статически до тестов 3) Мок можно создать динамически во время теста
  21. Wiremock Docker Docker APP Wiremock Request Mapping Response Data {

    "request": { "method": "POST", "urlPattern": ".*api.*" } { "code": "ok", "error": null }
  22. Что используется для запуска тестов 1) Docker - все проекты

    в контейнерах 2) Make - для запуска внутренних команд 3) Bamboo - для CI и деплоев
  23. Запуск тестов на CI (bamboo) 1) make build - билдим

    нужную версию приложения
  24. Запуск тестов на CI (bamboo) 1) make build - билдим

    нужную версию приложения 2) make up - поднимаем окружение a) приложение b) kafka, rabbit и прочее (тоже в docker-e) c) база данных d) накатываем миграции
  25. Запуск тестов на CI (bamboo) 1) make build - билдим

    нужную версию приложения 2) make up - поднимаем окружение a) приложение b) kafka, rabbit и прочее (тоже в docker-e) c) база данных d) накатываем миграции 3) make test - запускаем тесты
  26. Запуск тестов на CI (bamboo) 1) make build - билдим

    нужную версию приложения 2) make up - поднимаем окружение a) приложение b) kafka, rabbit и прочее (тоже в docker-e) c) база данных d) накатываем миграции 3) make test - запускаем тесты 5-10 минут 6-30 минут
  27. Zero tolerance to red tests 1) задача не уйдет в

    тестирование с красными тестами 2) релиз выкатывается только с зелеными тестами
  28. За авто-тестами следит вся команда 1) разработчики: пишут юнит и

    минимальный набор функциональных тестов на свои задачи 2) тестировщики: расширяют покрытие функциональными тестами 3) пулл-реквесты на тесты проходят командное ревью
  29. Про новые проекты Новый проект запускается: 1) покрытый юнит и

    функциональными тестами 2) регрессионное тестирование автоматизировано = ручного регресса 0%
  30. Про самое главное 1) Быстро релизить - это хорошо 2)

    Придерживайтесь пирамиды с учетом ваших проектов
  31. Про самое главное 1) Быстро релизить - это хорошо 2)

    Придерживайтесь пирамиды с учетом ваших проектов 3) Сделайте авто-тесты частью любых задач на разработку
  32. Про самое главное 1) Быстро релизить - это хорошо 2)

    Придерживайтесь пирамиды с учетом ваших проектов 3) Сделайте авто-тесты частью любых задач на разработку 4) Не позволяйте тестам быть красными