Илья Кудинов
TRANSCRIPT
Развитие процессов тестирования вBadoo за три года,
или как мы думали, что всё хорошо, а оказалось, чтоможно лучше.
Кудинов Илья, Badoo Development
Немного цифр — как обычно
● 2 серверных релиза в день● Еженедельные релизы приложений
● ~80 => ~150 разработчиков● ~20 => ~50 QA-инженеров
● 180 => 300+ миллионов пользователей● 0.6 => 1+ миллиона пользователей онлайн
Разные QA-флоу
● Web / mobile app server● С daemons● Mobile flows
– iOS
– Android
– Windows
– Mobile Web
5 (или около того) этапов контроля качества
1. Code Review
2. Тестирование на девеле
3. Тестирование в шоте
4. Тестирование на стейджинге
5. Верификация на продакшне
Code Review
Code Review
● «Автоматизированное» ревью — гит-хуки
Code Review
● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки
Code Review
● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки
– Проверка прав на коммит
Code Review
● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки
– Проверка прав на коммит
– Проверяем соответствие код-формату (phpcf!)
● https://habrahabr.ru/company/badoo/blog/232133/
Code Review
● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки
– Проверка прав на коммит
– Проверяем соответствие код-формату (phpcf!)
– Обновление статусов и комментарии в Jira
Code Review
● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки
– Проверка прав на коммит
– Проверяем соответствие код-формату (phpcf!)
– Обновление статусов и комментарии в Jira
– Корректность тестов
Code Review
● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки
– Проверка прав на коммит
– Проверяем соответствие код-формату (phpcf!)
– Обновление статусов и комментарии в Jira
– Корректность тестов
– И мнооооогое-многое другое
Code Review
● «Ручное» ревью
https://habrahabr.ru/company/badoo/blog/200946/
Code Review
● «Ручное» ревью– Корректность логики
Code Review
● «Ручное» ревью– Корректность логики
– Оптимальность решения
Code Review
● «Ручное» ревью– Корректность логики
– Оптимальность решения
– Соответствие архитектуре
Code Review
● «Ручное» ревью– Корректность логики
– Оптимальность решения
– Соответствие архитектуре
– Покрытие юнит-тестами
Code Review
● «Ручное» ревью– Корректность логики
– Оптимальность решения
– Соответствие архитектуре
– Покрытие юнит-тестами
– Проверка со стороны других отделов
Автоматическое тестирование ветки
История войны заавтоматический прогон юнит-тестов
Автоматическое тестирование ветки
2012● 15'000 тестов● Однопоточный / топорный многопоточный запуск● >40 минут на прохождение тестов● Запускаем только руками :(
Автоматическое тестирование ветки
2013● 25'000 тестов● Многопоточная пускалка● 5 минут на прохождение тестов● Запускаем по резолву задачи!
https://habrahabr.ru/company/badoo/blog/181488/
Автоматическое тестирование ветки
2014● 40'000 тестов● Облачная пускалка● 2-3 минуты на прохождение тестов
Автоматическое тестирование ветки
2015● 55'000 тестов (каверидж ~50%)● Стараемся запускать тесты по кавериджу● 1-2 минуты на прохождение тестов для ветки● 5-7 минут на прохождение всех тестов
https://habrahabr.ru/company/badoo/blog/264497/
Автоматическое тестирование ветки
2016● 60'000+ тестов (and counting!)● SoftMocks!● PHP7!● 2-3 минуты на все тесты!
https://habrahabr.ru/company/badoo/blog/279617/
Автоматическое тестирование ветки
Тестирование на девеле
Совсем ручное тестирование
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии● Подготавливаем тестовые данные
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии● Подготавливаем тестовые данные● Сложновоспроизводимые кейсы
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии● Подготавливаем тестовые данные● Сложновоспроизводимые кейсы● Не забываем удалять
QAAPI
QAAPI
● Быстрая регистрация пользователя
QAAPI
● Быстрая регистрация пользователя● Заполнение любых данных
QAAPI
● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров
QAAPI
● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров● Ускорение автотестов
QAAPI
● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров● Ускорение автотестов● QAAPI сценарии
QAAPI
● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров● Ускорение автотестов● QAAPI сценарии● Недоступно для внешних пользователей
Улучшенное окружение
Облачный скриптовый фреймворк
* * 1 * * script1.php* 5 * * * script2.php
User Split
https://habrahabr.ru/company/badoo/blog/278089/
Облачный скриптовый фреймворк
* * 1 * * script1.php* 5 * * * script2.php
Более стабильные тесты для девела
Тестирование в шоте
● Микростейджинг 'master + task'● Продакшн-окружение● Генерация переводов
Тестирование в шоте
● Микростейджинг 'master + task'● Продакшн-окружение● Генерация переводов
● NEW! Сбор скриншотов лексем для переводчиков
Тестирование в шоте
● Микростейджинг 'master + task'● Продакшн-окружение● Генерация переводов
● NEW! Сбор скриншотов лексем для переводчиков
● NEW! Автоматический запуск селениум-тестов
Селениум-теста нет?
Селениум-теста нет?
● Тесты пишутся после релиза задачи● Селениум-тестами покрывается только устоявшийся и
критический функционал
Селениум-тест упал!
Селениум-тест упал!
Селениум-тест упал!
Сборка релизаAIDA: Automated Interactive Deploy Assistant
https://habrahabr.ru/company/badoo/blog/169417/
Сборка релиза
● Определение задач, готовых к релизу
Сборка релиза
● Определение задач, готовых к релизу● Автомерж
Сборка релиза
● Определение задач, готовых к релизу● Автомерж● Деплой релиза на стейджинговые сервера
Сборка релиза
● Определение задач, готовых к релизу● Автомерж● Деплой релиза на стейджинговые сервера● Запуск автоматического тестирования
Автоматическое тестирование релиза
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
● Постоянно гоняющиеся юнит- и селениум-тесты
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
● Постоянно гоняющиеся юнит- и селениум-тесты
● Сигнализация о каждой ошибке
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
● Постоянно гоняющиеся юнит- и селениум-тесты
● Сигнализация о каждой ошибке
● Возможность быстрой пересборки билда при ошибке
Ручное тестирование релиза
Что-то сломалось!(на стейджинге, не на продкшне, конечно же!)
Локализуем проблему
Локализуем проблему
● Смотрим логи тестов
Локализуем проблему
● Смотрим логи тестов● Запускаем там, где не
запускались
Локализуем проблему
● Смотрим логи тестов● Запускаем там, где не
запускались
● Находим тикет, вкотором всё сломалось
Локализуем проблему
● Смотрим логи тестов● Запускаем там, где не
запускались
● Находим тикет, вкотором всё сломалось
● Помогает не всегда —приходится искатьсамим :(
Устраняем проблему
● Если всё совсем плохо — откатываем тикет
Устраняем проблему
● Фиксим коммитом в ветку билда (?)
Устраняем проблему
● Делаем патч в билд!
Всё готово к релизу?
Всё готово к релизу?
Р Е Л И З !
Нет, на самом деле мы работаем дальше
Верификация на продакшне
Мониторинг!
Мониторинг
● RRDTool– Основные метрики
– Нагрузка
– Логи ошибок и дебаг-сообщений
Мониторинг● Splunk
– Динамика событий в реальном времени
– Графики ошибок и дебага
– Создание тикетов на ошибки прямо из интерфейса
Всегда есть куда стремиться!
Вопросы?
Кудинов Илья
vk.com/relzegfb.com/relzeg
Badoo Development
vk.com/badoocomfb.com/BadooMoscow
habrahabr.ru/company/badoo
Статьи на Хабре
● GitPHP: https://habrahabr.ru/company/badoo/blog/200946/
● PHPCF: https://habrahabr.ru/company/badoo/blog/232133/
● Многопоточная пускалка: https://habrahabr.ru/company/badoo/blog/181488/
● Сборка кавериджа, QAAPI: https://habrahabr.ru/company/badoo/blog/264497/
● SoftMocks: https://habrahabr.ru/company/badoo/blog/279617/
● User Split: https://habrahabr.ru/company/badoo/blog/278089/
● AIDA: https://habrahabr.ru/company/badoo/blog/169417/