SlideShare a Scribd company logo
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 дошли до 500 релизов в квартал без потери в качестве
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
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Deploy - что получилось?
● Тестовые стенды повторяют архитектуру боевой системы
● Можем после сборки релиза установить его на стенд автоматически
● Можем тестировать любые изменения в конфигах приложений
Deploy - что получилось?
● Стенды по прежнему можно использовать для ручного
тестирования
● Разработчики и тестировщики больше вовлечены в деплой и
настройку приложений - больше возможностей влиять на боевые
настройки
Deploy - не все так гладко
● Целый год тюнили окружение
● Некоторые операции стали выполняться дольше, чем раньше
(ввиду использования ansible и сложности системы)
● Было много противников и недовольных
● В течение года любые проблемы на стендах начинались со
слов
“наверное, это из-за докера”
Deploy - пул стендов под релизы?
● Под релизы всегда нужны свежие и обновленные стенды
● Сделали пул стендов - сейчас их 7
● Они автоматически обновляются и готовы к проверке релизов
Что после деплоя приложения на стенд?
Приложение надо проверить набором регрессионных автотестов
Автотесты - как было устроено
● TestNG / Java / WebDriver
● Jenkins для запуска
● Тесты собраны в сьюты в Jenkins по областям функционала
● Параллелизация силами TestNG
● Параллелизация сьютов с помощью Jenkins
● VM с браузерами
● ~6 выделенных автоматизаторов тестирования
Автотесты какие были проблемы
● Тесты падают в основном из-за самих тестов и окружения
● Таймауты где надо и где не надо
● Одни тесты зависят от других
● Результаты недостаточно понятны - разбираются только
отдельные люди
● Тестируем внешние сервисы вместе со своим проектом
● Длинные тестовые сьюты - долгий перезапуск при падениях
● Автоматизаторы часто не в курсе тонкостей продукта при
написании автотестов и не заинтересованы в покрытии тестами
нужного функционала
Автотесты - какой был план?
● Скорость
○ тесты должны быть быстрее - 1 час на прогон
● Стабильность
○ минимум нестабильных тестов, непроходящих после 1
перепрогона
● Простота добавления новых тестов
○ чтобы любая команда, добавляющая функционал могла
написать автотесты
Автотесты - скорость
Что делали:
●Курс на использование сервиса фикстур
●Каждая область функционала должна единожды быть
протестирована через UI, в остальных случаях использовать сервис
фикстур для создания предусловий
Сервис фикстур у нас это:
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Автотесты - скорость
Что делали:
●Разбиение сьютов на более мелкие с ограничением времени
прохождения
●Увеличение параллельных потоков при прогоне
- в 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/
Вопросы?

More Related Content

PPT
Делаем автоматизацию проектных KPIs
PPT
Оптимизация Selenium тестов и ускорение их поддержки
PPTX
Добиваемся эффективности каждого из 9000+ UI-тестов
PDF
WP как экспериментальная платформа
PPTX
Quality Assurance vs Quality Control - так в чем же заключается работа специа...
PDF
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
PPTX
Способы организаций больших Java проектов по Автоматизированному тестированию
PPTX
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Делаем автоматизацию проектных KPIs
Оптимизация Selenium тестов и ускорение их поддержки
Добиваемся эффективности каждого из 9000+ UI-тестов
WP как экспериментальная платформа
Quality Assurance vs Quality Control - так в чем же заключается работа специа...
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
Способы организаций больших Java проектов по Автоматизированному тестированию
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов

What's hot (20)

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

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

PDF
PDF
Иван Евтухович — Как перестать релизиться и начать жить
PDF
Страх и ненависть в мире релиз-инжиниринга
PDF
Vladimir Trandafilov - When you need your system of cross browser testing
PPT
Автоматизация тестирования на крупных проектах
PDF
10M tests per day
PDF
Илья Кудинов
PDF
Bachelors Diploma Slides Short Version
PPTX
Вирусное тестирование. Что-то новое в конфигурационном тестировании
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Тестируем мобильное приложение в суровых реалиях Интернета
PDF
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
PDF
DevOps guide for awesome quality assurance
PDF
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
PDF
Continuous Delivery in Enterprise / Agile Kitchen 2016
PDF
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
PDF
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
PDF
presentation_r00t_conf
PDF
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
PPTX
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
Иван Евтухович — Как перестать релизиться и начать жить
Страх и ненависть в мире релиз-инжиниринга
Vladimir Trandafilov - When you need your system of cross browser testing
Автоматизация тестирования на крупных проектах
10M tests per day
Илья Кудинов
Bachelors Diploma Slides Short Version
Вирусное тестирование. Что-то новое в конфигурационном тестировании
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Тестируем мобильное приложение в суровых реалиях Интернета
«Тестируем мобильное приложение в суровых реалиях Интернета» – Андрей Усов, 2ГИС
DevOps guide for awesome quality assurance
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
Continuous Delivery in Enterprise / Agile Kitchen 2016
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
presentation_r00t_conf
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
Ad

More from SQALab (20)

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