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

16b6c87229eaf58768d25ed7b2bbbf52?s=47 CodeFest
April 05, 2019

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

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

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

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

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

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 05, 2019
Tweet

Transcript

  1. Экзистенциальная сказка о быстрых релизах и автоматизации тестирования Сташевский Павел

    pavel.stashevskiy@lamoda.ru
  2. 10 лет в тестировании Люблю тестировать Тестирую бэкенды в Lamoda

  3. 1. Про сервисы и быстрые релизы

  4. None
  5. “Глубокие” бэкенды

  6. Интерфейсы: REST, SOAP, UI

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

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

    Инфра: Docker, Kubernetes, kibahna, grafana и прочее
  9. None
  10. Быстрые релизы

  11. Что нужно для быстрых релизов? 1) Все сервисы в docker-e

  12. Что нужно для быстрых релизов? 1) Все сервисы в docker-e

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

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

    2) Легкий процесс деплоя и роллбеков 3) Хорошие мониторинги на системные и на бизнес-метрики 4) Хорошая база надежных авто-тестов
  15. 2. Про авто- тесты

  16. Unit tests Integration tests System tests E2E tests Виды тестов

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

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

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

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

  21. Тестовый фреймворк - Codeception 1) Можно разрабатывать и запускать тесты

    любых уровней (unit, functional, acceptance) 2) Обширная стандартная библиотека модулей 3) Тесты выглядят одинаково во всех проектах
  22. Тестовый фреймворк - Codeception Код приложения и код тестов хранятся

    в одном репозитории
  23. Стандартные модули Codeception 1) PhpBrowser - взаимодействие по http

  24. Стандартные модули Codeception 1) PhpBrowser - взаимодействие по http 2)

    REST - работа с API
  25. Стандартные модули Codeception 1) PhpBrowser - взаимодействие по http 2)

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

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

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

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

  30. Что пришлось доработать 1) SOAP - работа с несколькими endpoint-ми

    2) Kafka - свой модуль
  31. Что пришлось доработать 1) SOAP - работа с несколькими endpoint-ми

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

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

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

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

    используем in-memory db)
  36. Как раскатать базу данных 1) Поднимаем контейнер с PostgreSQL/MySQL (не

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

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

  40. Моки для внешних сервисов 1) Мокаем все внешние http- взаимодействия

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

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

    "request": { "method": "POST", "urlPattern": ".*api.*" } { "code": "ok", "error": null }
  43. 4. Как запускаются тесты

  44. Что используется для запуска тестов 1) Docker - все проекты

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

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

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

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

    нужную версию приложения 2) make up - поднимаем окружение a) приложение b) kafka, rabbit и прочее (тоже в docker-e) c) база данных d) накатываем миграции 3) make test - запускаем тесты 5-10 минут 6-30 минут
  49. None
  50. 5. Процессы

  51. Zero tolerance to red tests 1) задача не уйдет в

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

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

    функциональными тестами 2) регрессионное тестирование автоматизировано = ручного регресса 0%
  54. Вместо заключения

  55. Про самое главное 1) Быстро релизить - это хорошо

  56. Про самое главное 1) Быстро релизить - это хорошо 2)

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

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

    Придерживайтесь пирамиды с учетом ваших проектов 3) Сделайте авто-тесты частью любых задач на разработку 4) Не позволяйте тестам быть красными
  59. pavel.stashevskiy@lamoda.ru TG: @paulstashevsky http://tech.lamoda.ru Вопросы?