Илья Кудинов

Post on 16-Apr-2017

878 views 0 download

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

Развитие процессов тестирования в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/