SlideShare una empresa de Scribd logo
1 de 63
Software quality assurance days
22 Международная конференция
по вопросам качества ПО
sqadays.com
анкт-Петербург. 17–18 ноября 2017
Алексей Анисимов
hh.ru. Москва, Россия
Как hh.ru дошли до 500 релизов в квартал
без потери в качестве
Обо мне
● с 2002 года в тестировании
● занимался ручным тестированием,
автоматизацией, управлением
● сейчас Head of QA в hh.ru
https://twitter.com/absolut_real
План доклада
Общая информация про архитектуру и цикл разработки в hh.ru
Как было 3 года назад
Проблемы того времени
План и решение
Проблемы в процессе решения
Что получилось
hh.ru внутри
SOA архитектура
~ 50 сервисов
(микросервисы и не очень)
Python, Java, Postgresql,
Cassandra
больше 100 серверов в бою
Цикл разработки ● Git flow - каждая задача в своей
ветке
● В Ready to release может перевести
только тестировщик
● Готовые задачи собираются в
Release candidate
● RC автотестируется и отдается в
эксплуатацию
Какие были проблемы?
● Длинная инструкция для выпуска релиза
- человеческий фактор
● Релиз требует вовлеченности человека на день
- ошибки при сборке
● Разные типы сервисов релизятся по разному
● Автотесты почти всегда не проходят, прогон занимает 2-3 часа
- недоверие к тестам, много задач не прогоняются через регресс
- отдельные люди заняты разбором падений и прогоном тестов
● Тестовая среда очень сильно отличается от боевой
- разные настройки, синхронизируемые людьми, если они не забыли
● Часть релизов проходит сразу в эксплуатацию, минуя тестовую среду
- особенно изменения в базе, очередях и т.п.
К чему все это приводило?
● Даунтайм на продакшене из-за разных настроек в тестовой и
боевой среде (отсутствие некоторых звеньев, другие конфиги)
● Некоторые задачи не выходят в продакшен очень долго -
высокий time to market
● Непротестированные изменения в базе приводят к даунтаймам
● Общее нежелание заниматься релизами
Надо что-то делать! Но что?
Давайте все релизить автоматически?
Уберем человека из процессов релиза
И автотесты пусть тоже робот запускает.
Решим проблемы с релизами:
●Отсутствие очереди задач на релиз
●Нет личного отношения к задачам - роботу все равно
●Нет ошибок из-за внимания
●Деплой проверим заодно
Ура! Давайте сделаем!
Но, не все так просто:
●Куча разных вариантов сборки и выпуска релизов
●Тестовая среда непригодна для проверки деплоя приложений
- на бою все на разных машинах. В тесте все на одной
- отсутствуют балансировщики, конфиги и порты другие
●Нет возможности установить нужную версию приложения автоматом
на “свежий” тестовый стенд и проверить ее перед релизом
автотестами
●Автотесты должны быть быстрые и стабильные, чтобы им доверяли
Три части плана
● Подготовка и сборка релизов
● Тестовая среда похожая на бой
● Быстрые и стабильные автотесты
● Соединим все вместе!
Сборка релизов - как?
● Нет готовых продуктов для удовлетворения наших требований
● Свое приложение с веб-интерфейсом для одновременных пользователей
● Доступность логов и результатов
● Возможность дособрать, пересобрать релиз
● Различный порядок действий при сборке различных сервисов
● Все в deb пакеты для унификации
● Несколько серверов сборщиков с разным окружением (ubuntu 12-14-16,
java/python)
● Интеграция с внутренней авторизацией
● Статистика
Сборка релизов - workflow
Сборка релизов - что получилось
● Человек может собрать релиз, нажав несколько кнопок
● Выбрать нужные ему задачи
● SQL & docker images автоматически
включаются в релиз
Не задумываться о правильном оформлении
задачи для службы эксплуатации
● Виден статус сборки
● Релиз собирается всегда одинаково роботом
Deploy - как было
● Тестовые стенды не похожие на бой - даунтаймы
● Отдельные конфиги для теста и для боя
● Ограниченные возможности автоматического конфигурирования тестовых
стендов
● Не все изменения можно установить на тестовый стенд и проверить
- нет балансировщиков, фронтов и т.п.
● Chroot для питона с разными зависимостями
● Сложно поддержать разные версии ubuntu
Deploy - какой был план?
● Конфигурация системы такая же как в бою
● Использовать боевые конфиги каждого сервиса с минимумом
изменений
● Процедура деплоя как в бою. И протестировать можно перед
выкладкой
● Автоматический накат и откат версий приложений в т.ч. удаленно
● Возможность сборки из ветки
● Поддержать все остальные функции текущего тестового
окружения и постараться сделать их лучше
● Интеграция с системой сборки релизов
Deploy - что делали?
● Параллельно сделали тестовые стенды с новым окружением
- чтобы не останавливать текущие процессы выпуска задач
● Внутри новых тестовых стендов:
○ конфигурация аналогичная боевой с
балансировщиками, фронт-серверами
○ docker контейнеры как аналог машин с сервисами в
бою
○ ansible как система для конфигурации и деплоя
сервисов
○ обвязка для более простого развертывания и
управления стендами
Технологии - почему такой выбор?
Docker:
●Изоляция окружения внутри контейнера
●Простота взаимодействия с контейнерами
●Возможность использования разных версий операционных систем
●Версионность
●Решили попробовать новую многообещающую технологию,
поддерживаемую сообществом :)
Технологии - почему такой выбор?
Ansible:
●Служба эксплуатации использовала Ansible при деплое сервисов в
бой
●Шаблоны конфигурационных файлов с возможностью
использования переменных
●Переопределение переменных
●Понятный yml
Deploy - что получилось?
● Тестовые стенды повторяют архитектуру боевой системы
● Можем после сборки релиза установить его на стенд автоматически
● Можем тестировать любые изменения в конфигах приложений
Deploy - что получилось?
● Стенды по прежнему можно использовать для ручного
тестирования
● Разработчики и тестировщики больше вовлечены в деплой и
настройку приложений - больше возможностей влиять на боевые
настройки
Deploy - не все так гладко
● Целый год тюнили окружение
● Некоторые операции стали выполняться дольше, чем раньше
(ввиду использования ansible и сложности системы)
● Было много противников и недовольных
● В течение года любые проблемы на стендах начинались со
слов
“наверное, это из-за докера”
Deploy - пул стендов под релизы?
● Под релизы всегда нужны свежие и обновленные стенды
● Сделали пул стендов - сейчас их 7
● Они автоматически обновляются и готовы к проверке релизов
Что после деплоя приложения на стенд?
Приложение надо проверить набором регрессионных автотестов
Автотесты - как было устроено
● TestNG / Java / WebDriver
● Jenkins для запуска
● Тесты собраны в сьюты в Jenkins по областям функционала
● Параллелизация силами TestNG
● Параллелизация сьютов с помощью Jenkins
● VM с браузерами
● ~6 выделенных автоматизаторов тестирования
Автотесты какие были проблемы
● Тесты падают в основном из-за самих тестов и окружения
● Таймауты где надо и где не надо
● Одни тесты зависят от других
● Результаты недостаточно понятны - разбираются только
отдельные люди
● Тестируем внешние сервисы вместе со своим проектом
● Длинные тестовые сьюты - долгий перезапуск при падениях
● Автоматизаторы часто не в курсе тонкостей продукта при
написании автотестов и не заинтересованы в покрытии тестами
нужного функционала
Автотесты - какой был план?
● Скорость
○ тесты должны быть быстрее - 1 час на прогон
● Стабильность
○ минимум нестабильных тестов, непроходящих после 1
перепрогона
● Простота добавления новых тестов
○ чтобы любая команда, добавляющая функционал могла
написать автотесты
Автотесты - скорость
Что делали:
●Курс на использование сервиса фикстур
●Каждая область функционала должна единожды быть
протестирована через UI, в остальных случаях использовать сервис
фикстур для создания предусловий
Сервис фикстур у нас это:
Автотесты - скорость
Что делали:
●Разбиение сьютов на более мелкие с ограничением времени
прохождения
●Увеличение параллельных потоков при прогоне
- в Jenkins
- в самих тестах при помощи TestNG
●Настройка тестовых стендов под большую нагрузку
Автотесты - стабильность
Что делали:
●Избавлялись от тестирования внешних сервисов
- запроксировали внешние запросы (счетчики, и т.п.)
- внешние интеграции заменили моками
Автотесты - стабильность
● Только implicit ожидания - когда в автотесте таймаут, то он ждет чего-то (элемента и
т.п), а не просто так
● Больше использования сервиса фикстур
● Тюнинг тестового окружения
● Замена VM с браузерами на docker-контейнеры
- увеличили количество, проще обслуживать
● Тюнинг selenium таймаутов на гриде и на нодах
● Грид на хорошем железе
● Мониторинг серверов с гридом и браузерами
Автотесты - простота
Что делали:
● Обширный рефакторинг самих тестов
● Тренинги и обучение для тестировщиков
● 3 выделенных автоматизатора для помощи, оптимизации кода и
ревью
Автотесты - простота
● Максимально
подробное
логгирование на
русском языке
Автотесты - простота
Автотесты - простота
Что получилось:
● Автотесты пишутся внутри команд
● Обязательное ревью у автоматизаторов
● Все понимают как написать тест на новый функционал
или как поправить старый
Больше тестов
каждый месяц!
Автотесты - скорость, стабильность, простота
hh.kraken:
● Динамическая балансировка автотестов во время прогона
● Избавление от сьютов
● Автоматическая генерация тестов для запуска
● Возможность запустить тесты одного класса или package
Было После группировки Динамическая
балансировка
Автотесты - что получилось?
● Понятные всем результаты
Автотесты - что получилось?
● Интеграция с системой выпуска релизов
- возможность запустить, перезапустить тесты
- смотреть результаты
Тесты прошли. Что дальше?
● Задача автоматически переводится на службу эксплуатации.
● Далее в авто режиме/полу-авто режиме новый релиз выходит в бой.
● Мониторим изменения в бою
● Если все ок - код попадает в ветку мастер автоматически
Весь процесс релиза от начала и до конца
Глазами сотрудника технического департамента
Если все хорошо:
Если что-то не так:
Обязательный мониторинг всех частей системы
CPU, Memory, etc
Мониторинг релизов
Мониторинг системы автотестирования
Мониторинг selenium
Мониторинг релизов
Итого
● 10+ релизов в день
● Тесты за 30-35 минут
● Тестовая среда аналогичная продакшену
● Готовность выпускать релизы хоть круглые сутки
● Качественные показатели на высоте
Итого - количество
Итого - качество
Итого - качество
С чего начать?
● Цель - что хочется получить!
● Конвенции
● Договориться об используемых технологиях
● Когда все придерживаются обозначенных контрактов, можно начать
автоматизировать частями
● Оптимизировать по пути, не делать все сразу
Инструменты
● Возможность использования систем CI – Jenkins / Bamboo
● Docker – для приложений – простота и удобство
● Системы удаленной конфигурации – Ansible
● Проверенные решения для автотестов – смотреть в сторону готовых оберток
над селениумом – Selenide, etc.
● Для автотестов и окружения выбрать язык программирования, по которому есть
экспертиза внутри компании
Что почитать/посмотреть
● Все источники выбираются под ваш стек технологий
● Доклады с конференций от крупных компаний про процессы выпуска
приложений
● Про тренды в тестировании и обеспечении качества:
http://www.satisfice.com/blog/ James Bach
http://www.developsense.com/ Michael Bolton
● Slack chats: http://testers.io https://software-testers.herokuapp.com/
https://devopschat.co/
Моя статья про переделку тестового окружения
https://habrahabr.ru/company/hh/blog/271221/
Вопросы?

Más contenido relacionado

La actualidad más candente

Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...COMAQA.BY
 
Новый процесс тестирования на "старом" проекте
Новый процесс тестирования на "старом" проектеНовый процесс тестирования на "старом" проекте
Новый процесс тестирования на "старом" проектеSQALab
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовSQALab
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
10 принципов автоматизации, которые я не предам
10 принципов автоматизации, которые я не предам10 принципов автоматизации, которые я не предам
10 принципов автоматизации, которые я не предамSQALab
 
Как развить отдел тестирования от палки-копалки до CI
Как развить отдел тестирования от палки-копалки до CIКак развить отдел тестирования от палки-копалки до CI
Как развить отдел тестирования от палки-копалки до CICEE-SEC(R)
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в AgileSQALab
 
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...QAFest
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиSQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...WrikeTechClub
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 
Подход к тестированию хранилища данных на базе MS SQL Server
Подход к тестированию хранилища данных на базе MS SQL ServerПодход к тестированию хранилища данных на базе MS SQL Server
Подход к тестированию хранилища данных на базе MS SQL ServerSQALab
 
DevOps для Legacy-продуктов
DevOps для Legacy-продуктовDevOps для Legacy-продуктов
DevOps для Legacy-продуктовScrumTrek
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioSQALab
 
Подготовка стратегии тестирования под высокорискованный, высокодоходный проект
Подготовка стратегии тестирования под высокорискованный, высокодоходный проектПодготовка стратегии тестирования под высокорискованный, высокодоходный проект
Подготовка стратегии тестирования под высокорискованный, высокодоходный проектSQALab
 
Free Desktop QA Engineers: implement automation testing
Free Desktop QA Engineers: implement automation testingFree Desktop QA Engineers: implement automation testing
Free Desktop QA Engineers: implement automation testingAlexandr Zinovyev
 

La actualidad más candente (20)

Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Enter: testing
Enter: testingEnter: testing
Enter: testing
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
 
Новый процесс тестирования на "старом" проекте
Новый процесс тестирования на "старом" проектеНовый процесс тестирования на "старом" проекте
Новый процесс тестирования на "старом" проекте
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптов
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
10 принципов автоматизации, которые я не предам
10 принципов автоматизации, которые я не предам10 принципов автоматизации, которые я не предам
10 принципов автоматизации, которые я не предам
 
Как развить отдел тестирования от палки-копалки до CI
Как развить отдел тестирования от палки-копалки до CIКак развить отдел тестирования от палки-копалки до CI
Как развить отдел тестирования от палки-копалки до CI
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
 
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...QA Fest 2016. Дмитрий Химион.  Векторы развития систем автоматизации тестиров...
QA Fest 2016. Дмитрий Химион. Векторы развития систем автоматизации тестиров...
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной области
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
Подход к тестированию хранилища данных на базе MS SQL Server
Подход к тестированию хранилища данных на базе MS SQL ServerПодход к тестированию хранилища данных на базе MS SQL Server
Подход к тестированию хранилища данных на базе MS SQL Server
 
DevOps для Legacy-продуктов
DevOps для Legacy-продуктовDevOps для Legacy-продуктов
DevOps для Legacy-продуктов
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 
Подготовка стратегии тестирования под высокорискованный, высокодоходный проект
Подготовка стратегии тестирования под высокорискованный, высокодоходный проектПодготовка стратегии тестирования под высокорискованный, высокодоходный проект
Подготовка стратегии тестирования под высокорискованный, высокодоходный проект
 
Test link introduction
Test link introductionTest link introduction
Test link introduction
 
Free Desktop QA Engineers: implement automation testing
Free Desktop QA Engineers: implement automation testingFree Desktop QA Engineers: implement automation testing
Free Desktop QA Engineers: implement automation testing
 

Similar a Как hh.ru дошли до 500 релизов в квартал без потери в качестве

Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времениAndriy Samilyak
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23MoscowJS
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияCOMAQA.BY
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей РевкоSQALab
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеDenis Chistyakov
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'codeIvan Mosiev
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...Sergey Ponomarev
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven developmentTestableapple
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Dmitry Samsonov
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Ontico
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙCEE-SEC(R)
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Alexander Babich
 
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeterНагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeterPVasili
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 

Similar a Как hh.ru дошли до 500 релизов в квартал без потери в качестве (20)

Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей Ревко
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'code
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeterНагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 

Más de SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 
Истинная сила тестировщика - информация
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информацияSQALab
 
Автоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОАвтоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОSQALab
 
Правильный подход к составлению профиля нагрузочного тестирования
Правильный подход к составлению профиля нагрузочного тестированияПравильный подход к составлению профиля нагрузочного тестирования
Правильный подход к составлению профиля нагрузочного тестированияSQALab
 
Sustainable Test Automation: Collaborate within Team
Sustainable Test Automation: Collaborate within TeamSustainable Test Automation: Collaborate within Team
Sustainable Test Automation: Collaborate within TeamSQALab
 
Test Data Preparation: Tips and Tricks
Test Data Preparation: Tips and TricksTest Data Preparation: Tips and Tricks
Test Data Preparation: Tips and TricksSQALab
 
9 кругов Ада: антипаттерны UI-Автоматизации
9 кругов Ада: антипаттерны UI-Автоматизации9 кругов Ада: антипаттерны UI-Автоматизации
9 кругов Ада: антипаттерны UI-АвтоматизацииSQALab
 

Más de SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 
Истинная сила тестировщика - информация
Истинная сила тестировщика - информацияИстинная сила тестировщика - информация
Истинная сила тестировщика - информация
 
Автоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОАвтоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПО
 
Правильный подход к составлению профиля нагрузочного тестирования
Правильный подход к составлению профиля нагрузочного тестированияПравильный подход к составлению профиля нагрузочного тестирования
Правильный подход к составлению профиля нагрузочного тестирования
 
Sustainable Test Automation: Collaborate within Team
Sustainable Test Automation: Collaborate within TeamSustainable Test Automation: Collaborate within Team
Sustainable Test Automation: Collaborate within Team
 
Test Data Preparation: Tips and Tricks
Test Data Preparation: Tips and TricksTest Data Preparation: Tips and Tricks
Test Data Preparation: Tips and Tricks
 
9 кругов Ада: антипаттерны UI-Автоматизации
9 кругов Ада: антипаттерны UI-Автоматизации9 кругов Ада: антипаттерны UI-Автоматизации
9 кругов Ада: антипаттерны UI-Автоматизации
 

Как hh.ru дошли до 500 релизов в квартал без потери в качестве

  • 1. Software quality assurance days 22 Международная конференция по вопросам качества ПО sqadays.com анкт-Петербург. 17–18 ноября 2017 Алексей Анисимов hh.ru. Москва, Россия Как hh.ru дошли до 500 релизов в квартал без потери в качестве
  • 2. Обо мне ● с 2002 года в тестировании ● занимался ручным тестированием, автоматизацией, управлением ● сейчас Head of QA в hh.ru https://twitter.com/absolut_real
  • 3. План доклада Общая информация про архитектуру и цикл разработки в hh.ru Как было 3 года назад Проблемы того времени План и решение Проблемы в процессе решения Что получилось
  • 4.
  • 5. hh.ru внутри SOA архитектура ~ 50 сервисов (микросервисы и не очень) Python, Java, Postgresql, Cassandra больше 100 серверов в бою
  • 6. Цикл разработки ● Git flow - каждая задача в своей ветке ● В Ready to release может перевести только тестировщик ● Готовые задачи собираются в Release candidate ● RC автотестируется и отдается в эксплуатацию
  • 7. Какие были проблемы? ● Длинная инструкция для выпуска релиза - человеческий фактор ● Релиз требует вовлеченности человека на день - ошибки при сборке ● Разные типы сервисов релизятся по разному ● Автотесты почти всегда не проходят, прогон занимает 2-3 часа - недоверие к тестам, много задач не прогоняются через регресс - отдельные люди заняты разбором падений и прогоном тестов ● Тестовая среда очень сильно отличается от боевой - разные настройки, синхронизируемые людьми, если они не забыли ● Часть релизов проходит сразу в эксплуатацию, минуя тестовую среду - особенно изменения в базе, очередях и т.п.
  • 8. К чему все это приводило? ● Даунтайм на продакшене из-за разных настроек в тестовой и боевой среде (отсутствие некоторых звеньев, другие конфиги) ● Некоторые задачи не выходят в продакшен очень долго - высокий time to market ● Непротестированные изменения в базе приводят к даунтаймам ● Общее нежелание заниматься релизами
  • 10. Давайте все релизить автоматически? Уберем человека из процессов релиза И автотесты пусть тоже робот запускает. Решим проблемы с релизами: ●Отсутствие очереди задач на релиз ●Нет личного отношения к задачам - роботу все равно ●Нет ошибок из-за внимания ●Деплой проверим заодно
  • 11. Ура! Давайте сделаем! Но, не все так просто: ●Куча разных вариантов сборки и выпуска релизов ●Тестовая среда непригодна для проверки деплоя приложений - на бою все на разных машинах. В тесте все на одной - отсутствуют балансировщики, конфиги и порты другие ●Нет возможности установить нужную версию приложения автоматом на “свежий” тестовый стенд и проверить ее перед релизом автотестами ●Автотесты должны быть быстрые и стабильные, чтобы им доверяли
  • 12. Три части плана ● Подготовка и сборка релизов ● Тестовая среда похожая на бой ● Быстрые и стабильные автотесты ● Соединим все вместе!
  • 13. Сборка релизов - как? ● Нет готовых продуктов для удовлетворения наших требований ● Свое приложение с веб-интерфейсом для одновременных пользователей ● Доступность логов и результатов ● Возможность дособрать, пересобрать релиз ● Различный порядок действий при сборке различных сервисов ● Все в deb пакеты для унификации ● Несколько серверов сборщиков с разным окружением (ubuntu 12-14-16, java/python) ● Интеграция с внутренней авторизацией ● Статистика
  • 15. Сборка релизов - что получилось ● Человек может собрать релиз, нажав несколько кнопок ● Выбрать нужные ему задачи
  • 16. ● SQL & docker images автоматически включаются в релиз Не задумываться о правильном оформлении задачи для службы эксплуатации
  • 17. ● Виден статус сборки ● Релиз собирается всегда одинаково роботом
  • 18. Deploy - как было ● Тестовые стенды не похожие на бой - даунтаймы ● Отдельные конфиги для теста и для боя ● Ограниченные возможности автоматического конфигурирования тестовых стендов ● Не все изменения можно установить на тестовый стенд и проверить - нет балансировщиков, фронтов и т.п. ● Chroot для питона с разными зависимостями ● Сложно поддержать разные версии ubuntu
  • 19. Deploy - какой был план? ● Конфигурация системы такая же как в бою ● Использовать боевые конфиги каждого сервиса с минимумом изменений ● Процедура деплоя как в бою. И протестировать можно перед выкладкой ● Автоматический накат и откат версий приложений в т.ч. удаленно ● Возможность сборки из ветки ● Поддержать все остальные функции текущего тестового окружения и постараться сделать их лучше ● Интеграция с системой сборки релизов
  • 20. Deploy - что делали? ● Параллельно сделали тестовые стенды с новым окружением - чтобы не останавливать текущие процессы выпуска задач
  • 21. ● Внутри новых тестовых стендов: ○ конфигурация аналогичная боевой с балансировщиками, фронт-серверами ○ docker контейнеры как аналог машин с сервисами в бою ○ ansible как система для конфигурации и деплоя сервисов ○ обвязка для более простого развертывания и управления стендами
  • 22. Технологии - почему такой выбор? Docker: ●Изоляция окружения внутри контейнера ●Простота взаимодействия с контейнерами ●Возможность использования разных версий операционных систем ●Версионность ●Решили попробовать новую многообещающую технологию, поддерживаемую сообществом :)
  • 23. Технологии - почему такой выбор? Ansible: ●Служба эксплуатации использовала Ansible при деплое сервисов в бой ●Шаблоны конфигурационных файлов с возможностью использования переменных ●Переопределение переменных ●Понятный yml
  • 24.
  • 25. Deploy - что получилось? ● Тестовые стенды повторяют архитектуру боевой системы ● Можем после сборки релиза установить его на стенд автоматически ● Можем тестировать любые изменения в конфигах приложений
  • 26. Deploy - что получилось? ● Стенды по прежнему можно использовать для ручного тестирования ● Разработчики и тестировщики больше вовлечены в деплой и настройку приложений - больше возможностей влиять на боевые настройки
  • 27. Deploy - не все так гладко ● Целый год тюнили окружение ● Некоторые операции стали выполняться дольше, чем раньше (ввиду использования ansible и сложности системы) ● Было много противников и недовольных ● В течение года любые проблемы на стендах начинались со слов “наверное, это из-за докера”
  • 28. Deploy - пул стендов под релизы? ● Под релизы всегда нужны свежие и обновленные стенды ● Сделали пул стендов - сейчас их 7 ● Они автоматически обновляются и готовы к проверке релизов
  • 29. Что после деплоя приложения на стенд? Приложение надо проверить набором регрессионных автотестов
  • 30. Автотесты - как было устроено ● TestNG / Java / WebDriver ● Jenkins для запуска ● Тесты собраны в сьюты в Jenkins по областям функционала ● Параллелизация силами TestNG ● Параллелизация сьютов с помощью Jenkins ● VM с браузерами ● ~6 выделенных автоматизаторов тестирования
  • 31. Автотесты какие были проблемы ● Тесты падают в основном из-за самих тестов и окружения ● Таймауты где надо и где не надо ● Одни тесты зависят от других ● Результаты недостаточно понятны - разбираются только отдельные люди ● Тестируем внешние сервисы вместе со своим проектом ● Длинные тестовые сьюты - долгий перезапуск при падениях ● Автоматизаторы часто не в курсе тонкостей продукта при написании автотестов и не заинтересованы в покрытии тестами нужного функционала
  • 32. Автотесты - какой был план? ● Скорость ○ тесты должны быть быстрее - 1 час на прогон ● Стабильность ○ минимум нестабильных тестов, непроходящих после 1 перепрогона ● Простота добавления новых тестов ○ чтобы любая команда, добавляющая функционал могла написать автотесты
  • 33. Автотесты - скорость Что делали: ●Курс на использование сервиса фикстур ●Каждая область функционала должна единожды быть протестирована через UI, в остальных случаях использовать сервис фикстур для создания предусловий
  • 35.
  • 36. Автотесты - скорость Что делали: ●Разбиение сьютов на более мелкие с ограничением времени прохождения ●Увеличение параллельных потоков при прогоне - в Jenkins - в самих тестах при помощи TestNG ●Настройка тестовых стендов под большую нагрузку
  • 37. Автотесты - стабильность Что делали: ●Избавлялись от тестирования внешних сервисов - запроксировали внешние запросы (счетчики, и т.п.) - внешние интеграции заменили моками
  • 38. Автотесты - стабильность ● Только implicit ожидания - когда в автотесте таймаут, то он ждет чего-то (элемента и т.п), а не просто так ● Больше использования сервиса фикстур ● Тюнинг тестового окружения ● Замена VM с браузерами на docker-контейнеры - увеличили количество, проще обслуживать ● Тюнинг selenium таймаутов на гриде и на нодах ● Грид на хорошем железе ● Мониторинг серверов с гридом и браузерами
  • 39. Автотесты - простота Что делали: ● Обширный рефакторинг самих тестов ● Тренинги и обучение для тестировщиков ● 3 выделенных автоматизатора для помощи, оптимизации кода и ревью
  • 40. Автотесты - простота ● Максимально подробное логгирование на русском языке
  • 42. Автотесты - простота Что получилось: ● Автотесты пишутся внутри команд ● Обязательное ревью у автоматизаторов ● Все понимают как написать тест на новый функционал или как поправить старый
  • 44. Автотесты - скорость, стабильность, простота hh.kraken: ● Динамическая балансировка автотестов во время прогона ● Избавление от сьютов ● Автоматическая генерация тестов для запуска ● Возможность запустить тесты одного класса или package
  • 45. Было После группировки Динамическая балансировка
  • 46. Автотесты - что получилось? ● Понятные всем результаты
  • 47. Автотесты - что получилось? ● Интеграция с системой выпуска релизов - возможность запустить, перезапустить тесты - смотреть результаты
  • 48. Тесты прошли. Что дальше? ● Задача автоматически переводится на службу эксплуатации. ● Далее в авто режиме/полу-авто режиме новый релиз выходит в бой. ● Мониторим изменения в бою ● Если все ок - код попадает в ветку мастер автоматически
  • 49. Весь процесс релиза от начала и до конца Глазами сотрудника технического департамента Если все хорошо:
  • 51. Обязательный мониторинг всех частей системы CPU, Memory, etc
  • 56. Итого ● 10+ релизов в день ● Тесты за 30-35 минут ● Тестовая среда аналогичная продакшену ● Готовность выпускать релизы хоть круглые сутки ● Качественные показатели на высоте
  • 60. С чего начать? ● Цель - что хочется получить! ● Конвенции ● Договориться об используемых технологиях ● Когда все придерживаются обозначенных контрактов, можно начать автоматизировать частями ● Оптимизировать по пути, не делать все сразу
  • 61. Инструменты ● Возможность использования систем CI – Jenkins / Bamboo ● Docker – для приложений – простота и удобство ● Системы удаленной конфигурации – Ansible ● Проверенные решения для автотестов – смотреть в сторону готовых оберток над селениумом – Selenide, etc. ● Для автотестов и окружения выбрать язык программирования, по которому есть экспертиза внутри компании
  • 62. Что почитать/посмотреть ● Все источники выбираются под ваш стек технологий ● Доклады с конференций от крупных компаний про процессы выпуска приложений ● Про тренды в тестировании и обеспечении качества: http://www.satisfice.com/blog/ James Bach http://www.developsense.com/ Michael Bolton ● Slack chats: http://testers.io https://software-testers.herokuapp.com/ https://devopschat.co/ Моя статья про переделку тестового окружения https://habrahabr.ru/company/hh/blog/271221/