Илья Кудинов

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

Transcript of Илья Кудинов

Page 1: Илья Кудинов

Развитие процессов тестирования вBadoo за три года,

или как мы думали, что всё хорошо, а оказалось, чтоможно лучше.

Кудинов Илья, Badoo Development

Page 2: Илья Кудинов

Немного цифр — как обычно

● 2 серверных релиза в день● Еженедельные релизы приложений

● ~80 => ~150 разработчиков● ~20 => ~50 QA-инженеров

● 180 => 300+ миллионов пользователей● 0.6 => 1+ миллиона пользователей онлайн

Page 3: Илья Кудинов

Разные QA-флоу

● Web / mobile app server● С daemons● Mobile flows

– iOS

– Android

– Windows

– Mobile Web

Page 4: Илья Кудинов

5 (или около того) этапов контроля качества

1. Code Review

2. Тестирование на девеле

3. Тестирование в шоте

4. Тестирование на стейджинге

5. Верификация на продакшне

Page 5: Илья Кудинов

Code Review

Page 6: Илья Кудинов

Code Review

● «Автоматизированное» ревью — гит-хуки

Page 7: Илья Кудинов

Code Review

● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки

Page 8: Илья Кудинов

Code Review

● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки

– Проверка прав на коммит

Page 9: Илья Кудинов

Code Review

● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки

– Проверка прав на коммит

– Проверяем соответствие код-формату (phpcf!)

● https://habrahabr.ru/company/badoo/blog/232133/

Page 10: Илья Кудинов

Code Review

● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки

– Проверка прав на коммит

– Проверяем соответствие код-формату (phpcf!)

– Обновление статусов и комментарии в Jira

Page 11: Илья Кудинов

Code Review

● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки

– Проверка прав на коммит

– Проверяем соответствие код-формату (phpcf!)

– Обновление статусов и комментарии в Jira

– Корректность тестов

Page 12: Илья Кудинов

Code Review

● «Автоматизированное» ревью — гит-хуки– Проверка имени ветки

– Проверка прав на коммит

– Проверяем соответствие код-формату (phpcf!)

– Обновление статусов и комментарии в Jira

– Корректность тестов

– И мнооооогое-многое другое

Page 13: Илья Кудинов

Code Review

● «Ручное» ревью

https://habrahabr.ru/company/badoo/blog/200946/

Page 14: Илья Кудинов

Code Review

● «Ручное» ревью– Корректность логики

Page 15: Илья Кудинов

Code Review

● «Ручное» ревью– Корректность логики

– Оптимальность решения

Page 16: Илья Кудинов

Code Review

● «Ручное» ревью– Корректность логики

– Оптимальность решения

– Соответствие архитектуре

Page 17: Илья Кудинов

Code Review

● «Ручное» ревью– Корректность логики

– Оптимальность решения

– Соответствие архитектуре

– Покрытие юнит-тестами

Page 18: Илья Кудинов

Code Review

● «Ручное» ревью– Корректность логики

– Оптимальность решения

– Соответствие архитектуре

– Покрытие юнит-тестами

– Проверка со стороны других отделов

Page 19: Илья Кудинов

Автоматическое тестирование ветки

История войны заавтоматический прогон юнит-тестов

Page 20: Илья Кудинов

Автоматическое тестирование ветки

2012● 15'000 тестов● Однопоточный / топорный многопоточный запуск● >40 минут на прохождение тестов● Запускаем только руками :(

Page 21: Илья Кудинов

Автоматическое тестирование ветки

2013● 25'000 тестов● Многопоточная пускалка● 5 минут на прохождение тестов● Запускаем по резолву задачи!

https://habrahabr.ru/company/badoo/blog/181488/

Page 22: Илья Кудинов

Автоматическое тестирование ветки

2014● 40'000 тестов● Облачная пускалка● 2-3 минуты на прохождение тестов

Page 23: Илья Кудинов

Автоматическое тестирование ветки

2015● 55'000 тестов (каверидж ~50%)● Стараемся запускать тесты по кавериджу● 1-2 минуты на прохождение тестов для ветки● 5-7 минут на прохождение всех тестов

https://habrahabr.ru/company/badoo/blog/264497/

Page 24: Илья Кудинов

Автоматическое тестирование ветки

2016● 60'000+ тестов (and counting!)● SoftMocks!● PHP7!● 2-3 минуты на все тесты!

https://habrahabr.ru/company/badoo/blog/279617/

Page 25: Илья Кудинов

Автоматическое тестирование ветки

Page 26: Илья Кудинов

Тестирование на девеле

Page 27: Илья Кудинов

Совсем ручное тестирование

Page 28: Илья Кудинов

Совсем ручное тестирование

● Регистрируем пользователя для каждого теста

Page 29: Илья Кудинов

Совсем ручное тестирование

● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии

Page 30: Илья Кудинов

Совсем ручное тестирование

● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии● Подготавливаем тестовые данные

Page 31: Илья Кудинов

Совсем ручное тестирование

● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии● Подготавливаем тестовые данные● Сложновоспроизводимые кейсы

Page 32: Илья Кудинов

Совсем ручное тестирование

● Регистрируем пользователя для каждого теста● Заливаем и модерируем фотографии● Подготавливаем тестовые данные● Сложновоспроизводимые кейсы● Не забываем удалять

Page 33: Илья Кудинов

QAAPI

Page 34: Илья Кудинов

QAAPI

● Быстрая регистрация пользователя

Page 35: Илья Кудинов

QAAPI

● Быстрая регистрация пользователя● Заполнение любых данных

Page 36: Илья Кудинов

QAAPI

● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров

Page 37: Илья Кудинов

QAAPI

● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров● Ускорение автотестов

Page 38: Илья Кудинов

QAAPI

● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров● Ускорение автотестов● QAAPI сценарии

Page 39: Илья Кудинов

QAAPI

● Быстрая регистрация пользователя● Заполнение любых данных● Изменение нередактируемых параметров● Ускорение автотестов● QAAPI сценарии● Недоступно для внешних пользователей

Page 40: Илья Кудинов

Улучшенное окружение

Page 41: Илья Кудинов

Облачный скриптовый фреймворк

* * 1 * * script1.php* 5 * * * script2.php

Page 42: Илья Кудинов

User Split

https://habrahabr.ru/company/badoo/blog/278089/

Page 43: Илья Кудинов

Облачный скриптовый фреймворк

* * 1 * * script1.php* 5 * * * script2.php

Page 44: Илья Кудинов

Более стабильные тесты для девела

Page 45: Илья Кудинов

Тестирование в шоте

● Микростейджинг 'master + task'● Продакшн-окружение● Генерация переводов

Page 46: Илья Кудинов

Тестирование в шоте

● Микростейджинг 'master + task'● Продакшн-окружение● Генерация переводов

● NEW! Сбор скриншотов лексем для переводчиков

Page 47: Илья Кудинов

Тестирование в шоте

● Микростейджинг 'master + task'● Продакшн-окружение● Генерация переводов

● NEW! Сбор скриншотов лексем для переводчиков

● NEW! Автоматический запуск селениум-тестов

Page 48: Илья Кудинов

Селениум-теста нет?

Page 49: Илья Кудинов

Селениум-теста нет?

● Тесты пишутся после релиза задачи● Селениум-тестами покрывается только устоявшийся и

критический функционал

Page 50: Илья Кудинов

Селениум-тест упал!

Page 51: Илья Кудинов

Селениум-тест упал!

Page 52: Илья Кудинов

Селениум-тест упал!

Page 53: Илья Кудинов

Сборка релизаAIDA: Automated Interactive Deploy Assistant

https://habrahabr.ru/company/badoo/blog/169417/

Page 54: Илья Кудинов

Сборка релиза

● Определение задач, готовых к релизу

Page 55: Илья Кудинов

Сборка релиза

● Определение задач, готовых к релизу● Автомерж

Page 56: Илья Кудинов

Сборка релиза

● Определение задач, готовых к релизу● Автомерж● Деплой релиза на стейджинговые сервера

Page 57: Илья Кудинов

Сборка релиза

● Определение задач, готовых к релизу● Автомерж● Деплой релиза на стейджинговые сервера● Запуск автоматического тестирования

Page 58: Илья Кудинов

Автоматическое тестирование релиза

Page 59: Илья Кудинов

Автоматическое тестирование релиза

● Смоук-тесты при каждом обновлении релизной ветки

Page 60: Илья Кудинов

Автоматическое тестирование релиза

● Смоук-тесты при каждом обновлении релизной ветки

● Постоянно гоняющиеся юнит- и селениум-тесты

Page 61: Илья Кудинов

Автоматическое тестирование релиза

● Смоук-тесты при каждом обновлении релизной ветки

● Постоянно гоняющиеся юнит- и селениум-тесты

● Сигнализация о каждой ошибке

Page 62: Илья Кудинов

Автоматическое тестирование релиза

● Смоук-тесты при каждом обновлении релизной ветки

● Постоянно гоняющиеся юнит- и селениум-тесты

● Сигнализация о каждой ошибке

● Возможность быстрой пересборки билда при ошибке

Page 63: Илья Кудинов

Ручное тестирование релиза

Page 64: Илья Кудинов

Что-то сломалось!(на стейджинге, не на продкшне, конечно же!)

Page 65: Илья Кудинов

Локализуем проблему

Page 66: Илья Кудинов

Локализуем проблему

● Смотрим логи тестов

Page 67: Илья Кудинов

Локализуем проблему

● Смотрим логи тестов● Запускаем там, где не

запускались

Page 68: Илья Кудинов

Локализуем проблему

● Смотрим логи тестов● Запускаем там, где не

запускались

● Находим тикет, вкотором всё сломалось

Page 69: Илья Кудинов

Локализуем проблему

● Смотрим логи тестов● Запускаем там, где не

запускались

● Находим тикет, вкотором всё сломалось

● Помогает не всегда —приходится искатьсамим :(

Page 70: Илья Кудинов

Устраняем проблему

● Если всё совсем плохо — откатываем тикет

Page 71: Илья Кудинов

Устраняем проблему

● Фиксим коммитом в ветку билда (?)

Page 72: Илья Кудинов

Устраняем проблему

● Делаем патч в билд!

Page 73: Илья Кудинов

Всё готово к релизу?

Page 74: Илья Кудинов

Всё готово к релизу?

Page 75: Илья Кудинов

Р Е Л И З !

Page 76: Илья Кудинов

Нет, на самом деле мы работаем дальше

Page 77: Илья Кудинов

Верификация на продакшне

Page 78: Илья Кудинов

Мониторинг!

Page 79: Илья Кудинов

Мониторинг

● RRDTool– Основные метрики

– Нагрузка

– Логи ошибок и дебаг-сообщений

Page 80: Илья Кудинов

Мониторинг● Splunk

– Динамика событий в реальном времени

– Графики ошибок и дебага

– Создание тикетов на ошибки прямо из интерфейса

Page 81: Илья Кудинов

Всегда есть куда стремиться!

Page 82: Илья Кудинов

Вопросы?

Кудинов Илья

vk.com/relzegfb.com/relzeg

Badoo Development

vk.com/badoocomfb.com/BadooMoscow

habrahabr.ru/company/badoo

Page 83: Илья Кудинов

Статьи на Хабре

● 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/