• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Эволюция ускорения юнит-тестов в Badoo - от баш-скриптов до облака
 

Эволюция ускорения юнит-тестов в Badoo - от баш-скриптов до облака

on

  • 379 views

Доклад Ильи Кудинова на SQA Days-15. 18-19 апреля, 2014, Москва.

Доклад Ильи Кудинова на SQA Days-15. 18-19 апреля, 2014, Москва.
www.sqadays.com

Statistics

Views

Total Views
379
Views on SlideShare
366
Embed Views
13

Actions

Likes
0
Downloads
4
Comments
0

2 Embeds 13

http://sqadays.com 9
http://www.sqadays.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Эволюция ускорения юнит-тестов в Badoo - от баш-скриптов до облака Эволюция ускорения юнит-тестов в Badoo - от баш-скриптов до облака Presentation Transcript

    • Как мы разгоняли тесты: Кудинов Илья, 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
    • Длительность тестов Потоки с уже распределёнными тестами Тест с известной длительностью Компонент распределения тестов по потокам
    • Мастер-процесс Поток Поток Поток Поток Поток Файл отчётаФайл отчёта Файл отчёта Файл отчёта Файл отчёта Файл отчёта Компонент запуска тестов
    • Мастер-процесс Поток Поток Поток Поток Поток Поток Компонент запуска тестов
    • Вывод результатов ● Текстовый вывод для запуска из консоли ● По пятницам — с котиками! ● Вывод в формате TeamCity ● Вывод данных для подсчёта Code Coverage ● v1.0 — после окончания работы ● v1.5 — пачками в процессе работы ● v2.0 — в реальном времени
    • Оно адаптируется!
    • Однопоточный запуск: ~6.5 т/с Распределение поровну: ~17 т/с Разгребание общей очереди: ~21 т/с Отделение больших тестов: ~33 т/с Многопоточная пускалка: ~65 т/с ~7 минут на 27000 тестов! Сравнение эффективности методов
    • PROFIT 1) Тесты запускаются чаще! 2) Разгруженные агенты TC! 2) Автоматический запуск тестов! 3) Переносимость и конфигурируемость!
    • Не rocket science! ● Изначальная версия разработана одним человеком «на коленке» в свободное от работы время; ● <1000 строк кода на всё! ● Никакой «магии» кроме форков
    • RunKit  Расширение для PHP  Расширенный инструментарий для подмены классов и методов  Собственная песочница с суперглобальными переменными  Сбрасывает кеш PHP при каждом моке ):
    • Отправляемся в облака!
    • Облачный скриптовый фреймворк  Развитие уже существовавшего фреймворка  Выполнение задач на распределённой системе машин  Минимальные правки в имеющихся скриптах  Не зависит от типа выполняемой работы  Отказоустойчивость
    • Клиент Фреймворк Облако Машина в облаке Машина в облаке Машина в облаке Машина в облаке Машина в облаке Машина в облаке Мастер Воркер Воркер Воркер Воркер Воркер Воркер Воркер Воркер Воркер Воркер WebAPI Облачный скриптовый фреймворк
    • Однопоточный запуск: ~6.5 т/с Распределение поровну: ~17 т/с Разгребание общей очереди: ~21 т/с Отделение больших тестов: ~33 т/с Многопоточная пускалка: ~65 т/с Облачная пускалка: ~150 т/с Сравнение эффективности методов ~3 минуты на 27000 тестов!
    • Есть куда развиваться!  Рассчёт оптимального количества потоков  Обработка и выделение фаталящих тестов  Автоматический поиск зависимостей  Отделение от нашего проекта  ...
    • badoo.com vk.com/badoocom fb.com/BadooMoscow twitter.com/BadooDev habrahabr.ru/company/badoo/ vk.com/relzeg fb.com/relzeg Skype: relzeg ;)