Upload
badoo-development
View
140.034
Download
1
Embed Size (px)
DESCRIPTION
Презентация с первой конференции Badoo для тестировщиков LoveQA.
Citation preview
Как мы разгоняли тесты:
Кудинов Илья, QA Engineer
От bash-скриптов до облака
Зачем нужно разгонять тесты?
Юнит-тестов “как в книжках” почти не бывает
Expectation Reality
Количество тестов в проекте
Время выполнения тестов
Желание запускать тесты
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
~70 минут на 27000 тестов!
А может, не будем запускать каждый раз все тесты?А может, не будем каждый раз запускать
ВСЕ тесты?
Попробуем поделить тесты вручную?
Напишем утилиту, которая будет делить тесты между потоками поровну?
Не все тесты одинаковы!
Поток #1 Поток #2 Поток #3 Поток #4
Количество тестовВремя выполнения
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
~26 минут на 27000 тестов!
Нам необоходимо средство для автоматического и равномерного разделения тестов по потокам
Начинаем поиск готовых решений!
Параллелизация тестов PHPUnit
И почти всё что мы нашли – реализация уже отвергнутых нами методов
Оригинальный метод – несколько процессов “разгребают” общую очередь тестов
PHPUnit делает очень много внутренней работы
Поток #1 Поток #2 Поток #3 Поток #4
Количество тестовВремя выполненияВремя работы внутренних функций PHPUnit
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~21 т/с
~21 минута на 27000 тестов!
Разработчики PHPUnit обещают реализацию многопоточного запуска из коробки?
Вывод: надо разработать что-то своё!
Первое решение – отделим “большие” тесты от “маленьких”
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~21 т/с
Отделение больших тестов: ~33 т/с
~14 минут на 27000 тестов!
Второе решение – необходимо хранить информацию о времени работы каждого теста!
Для избежания переизбытка информациинеобходим централизованный сбор статистики!
И для этого нам идеально подходит TeamCity!
Лучший способ управления такой утилитой?
Итоговая схема Многопоточной пускалки
КОМПОНЕНТ СБОРА И ХРАНЕНИЯ СТАТИСТИКИ
КОМПОНЕНТ ЗАПУСКА ТЕСТОВ
КОМПОНЕНТ РАСПРЕДЕЛЕНИЯ ТЕСТОВ
ПО ПОТОКАМ
КОМПОНЕНТ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ
БД TeamCity БД для хранения статистики
тест => времяфайл => время
Магия
Понедельник Вторник Среда Четверг
Пятница Суббота Воскресенье
7 состояний с накапливаемыми данными
Чем новее статистика – тем больший “вес” она имеет при распределении тестов
Возраст статистики Вес статистики
< 1 суток 100
< 2 суток 50
< 3 суток 25
> 3 суток 10
КОМПОНЕНТ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ
КОМПОНЕНТ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ
Длительность тестов
Потоки с уже распределёнными тестами
Тест с известной длительностью
КОМПОНЕНТ ЗАПУСКА ТЕСТОВ
Мастер-процесс
Поток Поток Поток Поток Поток
Файл отчётаФайл отчёта Файл отчёта Файл отчёта Файл отчёта Файл отчёта
КОМПОНЕНТ ЗАПУСКА ТЕСТОВ
Мастер-процесс
Поток
ПотокПоток
Поток
Поток
Поток
Оно адаптируется!
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~21 т/с
Отделение больших тестов: ~33 т/с
Многопоточная пускалка: ~65 т/с
~7 минут на 27000 тестов!
PROFIT
1) Тесты запускаются чаще!2) Разгруженные агенты TC!2) Автоматический запуск тестов!3) Переносимость и конфигурируемость!
RunKit
Расширение для PHP Расширенный инструментарий для
подмены классов и методов Собственная песочница с
суперглобальными переменными Сбрасывает кеш PHP при каждом моке ):
Отправляемся в облака!
Скриптовый фреймворк
Развитие уже существовавшего фреймворкаВыполнение задач на распределённой системе машин
Минимальные правки в имеющихся скриптахНе зависит от типа выполняемой работы
Клиент
Фреймворк
Облако
Машина в облаке
Машина в облаке
Машина в облаке
Машина в облаке
Машина в облаке
Машина в облаке
Мастер
Воркер
Воркер
Воркер
Воркер
Воркер Воркер
Воркер
Воркер
Воркер
Воркер
WebAPI
Вывод клиенту-консоли
….................................
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~21 т/с
Отделение больших тестов: ~33 т/с
Многопоточная пускалка: ~65 т/с
Облачная пускалка: ~150 т/с
Есть куда развиваться!
Рассчёт оптимального количества потоков Обработка и выделение фаталящих тестов Автоматический поиск зависимостей Отделение от нашего проекта ...
badoo.com
vk.com/badoocomfb.com/BadooMoscowtwitter.com/BadooDev
habrahabr.ru/company/badoo/
vk.com/relzegfb.com/relzeg