43
Как мы разгоняли тесты: Кудинов Илья, QA Engineer От bash-скриптов до облака

Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Embed Size (px)

DESCRIPTION

Презентация с первой конференции Badoo для тестировщиков LoveQA.

Citation preview

Page 1: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Как мы разгоняли тесты:

Кудинов Илья, QA Engineer

От bash-скриптов до облака

Page 2: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Зачем нужно разгонять тесты?

Page 3: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Юнит-тестов “как в книжках” почти не бывает

Expectation Reality

Page 4: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Количество тестов в проекте

Page 5: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Время выполнения тестов

Желание запускать тесты

Page 6: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Сравнение эффективности методов

Однопоточный запуск: ~6.5 т/с

~70 минут на 27000 тестов!

Page 7: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

А может, не будем запускать каждый раз все тесты?А может, не будем каждый раз запускать

ВСЕ тесты?

Page 8: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Попробуем поделить тесты вручную?

Page 9: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Напишем утилиту, которая будет делить тесты между потоками поровну?

Page 10: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Не все тесты одинаковы!

Поток #1 Поток #2 Поток #3 Поток #4

Количество тестовВремя выполнения

Page 11: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Сравнение эффективности методов

Однопоточный запуск: ~6.5 т/с

Распределение поровну: ~17 т/с

~26 минут на 27000 тестов!

Page 12: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Нам необоходимо средство для автоматического и равномерного разделения тестов по потокам

Page 13: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Начинаем поиск готовых решений!

Параллелизация тестов PHPUnit

Page 14: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

И почти всё что мы нашли – реализация уже отвергнутых нами методов

Page 15: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Оригинальный метод – несколько процессов “разгребают” общую очередь тестов

Page 16: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

PHPUnit делает очень много внутренней работы

Поток #1 Поток #2 Поток #3 Поток #4

Количество тестовВремя выполненияВремя работы внутренних функций PHPUnit

Page 17: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Сравнение эффективности методов

Однопоточный запуск: ~6.5 т/с

Распределение поровну: ~17 т/с

Разгребание общей очереди: ~21 т/с

~21 минута на 27000 тестов!

Page 18: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Разработчики PHPUnit обещают реализацию многопоточного запуска из коробки?

Page 19: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Вывод: надо разработать что-то своё!

Page 20: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Первое решение – отделим “большие” тесты от “маленьких”

Page 21: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Сравнение эффективности методов

Однопоточный запуск: ~6.5 т/с

Распределение поровну: ~17 т/с

Разгребание общей очереди: ~21 т/с

Отделение больших тестов: ~33 т/с

~14 минут на 27000 тестов!

Page 22: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Второе решение – необходимо хранить информацию о времени работы каждого теста!

Page 23: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Для избежания переизбытка информациинеобходим централизованный сбор статистики!

Page 24: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

И для этого нам идеально подходит TeamCity!

Page 25: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Лучший способ управления такой утилитой?

Page 26: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Итоговая схема Многопоточной пускалки

КОМПОНЕНТ СБОРА И ХРАНЕНИЯ СТАТИСТИКИ

КОМПОНЕНТ ЗАПУСКА ТЕСТОВ

КОМПОНЕНТ РАСПРЕДЕЛЕНИЯ ТЕСТОВ

ПО ПОТОКАМ

Page 27: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

КОМПОНЕНТ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ

БД TeamCity БД для хранения статистики

тест => времяфайл => время

Магия

Page 28: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Понедельник Вторник Среда Четверг

Пятница Суббота Воскресенье

7 состояний с накапливаемыми данными

Чем новее статистика – тем больший “вес” она имеет при распределении тестов

Возраст статистики Вес статистики

< 1 суток 100

< 2 суток 50

< 3 суток 25

> 3 суток 10

КОМПОНЕНТ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ

Page 29: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

КОМПОНЕНТ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ

Длительность тестов

Потоки с уже распределёнными тестами

Тест с известной длительностью

Page 30: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

КОМПОНЕНТ ЗАПУСКА ТЕСТОВ

Мастер-процесс

Поток Поток Поток Поток Поток

Файл отчётаФайл отчёта Файл отчёта Файл отчёта Файл отчёта Файл отчёта

Page 31: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

КОМПОНЕНТ ЗАПУСКА ТЕСТОВ

Мастер-процесс

Поток

ПотокПоток

Поток

Поток

Поток

Page 32: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Оно адаптируется!

Page 33: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Сравнение эффективности методов

Однопоточный запуск: ~6.5 т/с

Распределение поровну: ~17 т/с

Разгребание общей очереди: ~21 т/с

Отделение больших тестов: ~33 т/с

Многопоточная пускалка: ~65 т/с

~7 минут на 27000 тестов!

Page 34: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

PROFIT

1) Тесты запускаются чаще!2) Разгруженные агенты TC!2) Автоматический запуск тестов!3) Переносимость и конфигурируемость!

Page 35: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"
Page 36: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

RunKit

Расширение для PHP Расширенный инструментарий для

подмены классов и методов Собственная песочница с

суперглобальными переменными Сбрасывает кеш PHP при каждом моке ):

Page 37: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Отправляемся в облака!

Page 38: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Скриптовый фреймворк

Развитие уже существовавшего фреймворкаВыполнение задач на распределённой системе машин

Минимальные правки в имеющихся скриптахНе зависит от типа выполняемой работы

Page 39: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Клиент

Фреймворк

Облако

Машина в облаке

Машина в облаке

Машина в облаке

Машина в облаке

Машина в облаке

Машина в облаке

Мастер

Воркер

Воркер

Воркер

Воркер

Воркер Воркер

Воркер

Воркер

Воркер

Воркер

WebAPI

Page 40: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Вывод клиенту-консоли

….................................

Page 41: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Сравнение эффективности методов

Однопоточный запуск: ~6.5 т/с

Распределение поровну: ~17 т/с

Разгребание общей очереди: ~21 т/с

Отделение больших тестов: ~33 т/с

Многопоточная пускалка: ~65 т/с

Облачная пускалка: ~150 т/с

Page 42: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

Есть куда развиваться!

Рассчёт оптимального количества потоков Обработка и выделение фаталящих тестов Автоматический поиск зависимостей Отделение от нашего проекта ...

Page 43: Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"

badoo.com

vk.com/badoocomfb.com/BadooMoscowtwitter.com/BadooDev

habrahabr.ru/company/badoo/

vk.com/relzegfb.com/relzeg