Развитие процессов тестирования в
Badoo за три года,
или как мы думали, что всё хорошо, а оказалось, что
можно лучше.
Кудинов Илья, Badoo Development
Немного цифр — как обычно
● 2 серверных релиза в день
● Еженедельные релизы приложений
● ~80 => ~150 разработчиков
● ~20 => ~50 QA-инженеров
● 180 => 300+ миллионов пользователей
● 0.6 => 1+ миллиона пользователей онлайн
Разные QA-флоу
● Web / сервер мобильных приложений
● Демоны на С / C++ / Go
● Мобильные флоу:
– 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!)
● PHP7!
● SoftMocks!
● 2-3 минуты на все тесты!
https://habrahabr.ru/company/badoo/blog/279617/
Автоматическое тестирование ветки
Тестирование на девеле
Совсем ручное тестирование
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста
● Заливаем и модерируем фотографии
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста
● Заливаем и модерируем фотографии
● Подготавливаем тестовые данные
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста
● Заливаем и модерируем фотографии
● Подготавливаем тестовые данные
● Сложновоспроизводимые кейсы
Совсем ручное тестирование
● Регистрируем пользователя для каждого теста
● Заливаем и модерируем фотографии
● Подготавливаем тестовые данные
● Сложновоспроизводимые кейсы
● Не забываем удалять
QAAPI
QAAPI
● Быстрая регистрация пользователя
QAAPI
● Быстрая регистрация пользователя
● Генерация и заполнение любых данных
QAAPI
● Быстрая регистрация пользователя
● Генерация и заполнение любых данных
● Изменение нередактируемых параметров
QAAPI
● Быстрая регистрация пользователя
● Генерация и заполнение любых данных
● Изменение нередактируемых параметров
● Ускорение автотестов
QAAPI
● Быстрая регистрация пользователя
● Генерация и заполнение любых данных
● Изменение нередактируемых параметров
● Ускорение автотестов
● QAAPI сценарии
QAAPI
● Быстрая регистрация пользователя
● Генерация и заполнение любых данных
● Изменение нередактируемых параметров
● Ускорение автотестов
● QAAPI сценарии
● Недоступно для внешних пользователей
https://habrahabr.ru/company/badoo/blog/264497/
Улучшенное окружение и инструментарий
Облачный скриптовый фреймворк
* * 1 * * script1.php
* 5 * * * script2.php
User Split
https://habrahabr.ru/company/badoo/blog/278089/
Более стабильные тесты для девела
Тестирование в шоте
● Микростейджинг 'master + task'
● Продакшн-окружение
● Генерация переводов
Тестирование в шоте
● Микростейджинг 'master + task'
● Продакшн-окружение
● Генерация переводов
● NEW! Сбор скриншотов лексем для переводчиков
Тестирование в шоте
● Микростейджинг 'master + task'
● Продакшн-окружение
● Генерация переводов
● NEW! Сбор скриншотов лексем для переводчиков
● NEW! Автоматический запуск селениум-тестов
Селениум-теста нет?
Селениум-теста нет?
● Тесты пишутся после релиза задачи
● Селениум-тестами покрывается только устоявшийся и
критический функционал
Селениум-тест упал!
Селениум-тест упал!
Селениум-тест упал!
Сборка релиза
AIDA: Automated Interactive Deploy Assistant
https://habrahabr.ru/company/badoo/blog/169417/
Сборка релиза
● Определение задач, готовых к релизу
Сборка релиза
● Определение задач, готовых к релизу
● Автомерж
Сборка релиза
● Определение задач, готовых к релизу
● Автомерж
● Деплой релиза на стейджинговые сервера
Сборка релиза
● Определение задач, готовых к релизу
● Автомерж
● Деплой релиза на стейджинговые сервера
● Запуск автоматического тестирования
Автоматическое тестирование релиза
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
● Постоянно гоняющиеся юнит- и селениум-тесты
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
● Постоянно гоняющиеся юнит- и селениум-тесты
● Сигнализация о каждой ошибке
Автоматическое тестирование релиза
● Смоук-тесты при каждом обновлении релизной ветки
● Постоянно гоняющиеся юнит- и селениум-тесты
● Сигнализация о каждой ошибке
● Возможность быстрой пересборки билда при ошибке
Ручное тестирование релиза
Что-то сломалось!
(на стейджинге, не на продкшне, конечно же!)
Локализуем проблему
Локализуем проблему
● Смотрим логи тестов
Локализуем проблему
● Смотрим логи тестов
● Запускаем там, где не
запускались
Локализуем проблему
● Смотрим логи тестов
● Запускаем там, где не
запускались
● Находим тикет, в
котором всё сломалось
Локализуем проблему
● Смотрим логи тестов
● Запускаем там, где не
запускались
● Находим тикет, в
котором всё сломалось
● Помогает не всегда —
приходится искать
самим :(
Устраняем проблему
● Если всё совсем плохо — откатываем тикет
Устраняем проблему
● Фиксим коммитом в ветку билда (?)
Устраняем проблему
● Делаем патч в билд!
Всё готово к релизу?
Всё готово к релизу?
Р Е Л И З !
Нет, на самом деле мы работаем дальше
Верификация на продакшне
Мониторинг!
Мониторинг
● RRDTool
– Основные метрики
– Нагрузка
– Логи ошибок
Мониторинг
● RRDTool
– Основные метрики
– Нагрузка
– Логи ошибок
● Splunk
– Динамика событий в реальном времени
– Создание тикетов на ошибки прямо из интерфейса
Всегда есть куда стремиться!
Вопросы?
Кудинов Илья
vk.com/relzeg
fb.com/relzeg
Badoo Development
vk.com/badoocom
fb.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/

Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы думали, что всё хорошо, а оказалось, что можно лучше»