Эволюция ускорения юнит-тестов в Badoo - от баш-скриптов до облака
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 476 views

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

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

Statistics

Views

Total Views
476
Views on SlideShare
447
Embed Views
29

Actions

Likes
0
Downloads
5
Comments
0

3 Embeds 29

http://sqadays.com 21
http://www.sqadays.com 5
http://www.slideee.com 3

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 ;)