Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Как мы разгоняли тесты:
Кудинов Илья, QA Engineer
От bash-скриптов до облака
Зачем нужно разгонять тесты?
Юнит-тестов “как в книжках” почти не бывает
Expectation Reality
Количество тестов в проекте
Время выполнения тестов
Желание запускать тесты
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
~70 минут на 27000 тестов!
А может, не будем запускать каждый раз все тесты?
А может, не будем каждый раз запускать
ВСЕ тесты?
Попробуем поделить тесты вручную?
Напишем утилиту, которая будет делить тесты
между потоками поровну?
Не все тесты одинаковы!
Поток #1 Поток #2 Поток #3 Поток #4
Количество тестов
Время выполнения
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
~26 минут на 27000 тестов!
Нам необоходимо средство для автоматического
и равномерного разделения тестов по потокам
Начинаем поиск готовых решений!
Параллелизация тестов PHPUnit
И почти всё что мы нашли – реализация
уже отвергнутых нами методов
Оригинальный метод – несколько процессов “разгребают”
общую очередь тестов
PHPUnit делает очень много внутренней работы
Поток #1 Поток #2 Поток #3 Поток #4
Количество тестов
Время выполнения
Время ...
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~2...
Разработчики PHPUnit обещают реализацию
многопоточного запуска из коробки?
Вывод: надо разработать что-то своё!
Первое решение – отделим “большие” тесты от “маленьких”
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~2...
Второе решение – необходимо хранить информацию
о времени работы каждого теста!
Для избежания переизбытка информации
необходим централизованный сбор статистики!
И для этого нам идеально подходит
TeamCity!
Лучший способ управления такой утилитой?
Итоговая схема Многопоточной пускалки
КОМПОНЕНТ СБОРА
И ХРАНЕНИЯ СТАТИСТИКИ
КОМПОНЕНТ ЗАПУСКА ТЕСТОВ
КОМПОНЕНТ
РАСПРЕДЕЛЕН...
КОМПОНЕНТ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ
БД TeamCity БД для хранения
статистики
тест => время
файл => время
Магия
Понедельник Вторник Среда Четверг
Пятница Суббота Воскресенье
7 состояний с накапливаемыми данными
Чем новее статистика – ...
КОМПОНЕНТ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ
Длительность тестов
Потоки с уже распределёнными тестами
Тест с известной длител...
КОМПОНЕНТ ЗАПУСКА ТЕСТОВ
Мастер-процесс
Поток Поток Поток Поток Поток
Файл отчётаФайл отчёта Файл отчёта Файл отчёта Файл ...
КОМПОНЕНТ ЗАПУСКА ТЕСТОВ
Мастер-процесс
Поток
Поток
Поток
Поток
Поток
Поток
Оно адаптируется!
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~2...
PROFIT
1) Тесты запускаются чаще!
2) Разгруженные агенты TC!
2) Автоматический запуск тестов!
3) Переносимость и конфигури...
RunKit

Расширение для PHP

Расширенный инструментарий для
подмены классов и методов

Собственная песочница с
суперглоб...
Отправляемся в облака!
Скриптовый фреймворк

Развитие уже существовавшего фреймворка

Выполнение задач на распределённой
системе машин

Минима...
Клиент
Фреймворк
Облако
Машина
в облаке
Машина
в облаке
Машина
в облаке
Машина
в облаке
Машина
в облаке
Машина
в облаке
Ма...
Вывод клиенту-консоли
….................................
Сравнение эффективности методов
Однопоточный запуск: ~6.5 т/с
Распределение поровну: ~17 т/с
Разгребание общей очереди: ~2...
Есть куда развиваться!

Рассчёт оптимального количества потоков

Обработка и выделение фаталящих тестов

Автоматический...
badoo.com
vk.com/badoocom
fb.com/BadooMoscow
twitter.com/BadooDev
habrahabr.ru/company/badoo/
vk.com/relzeg
fb.com/relzeg
Доклад Ильи Кудинова на конференции LoveQA. "Как мы разгоняли тесты — от баш-скриптов до облака"
Prochain SlideShare
Chargement dans…5
×

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

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

  • Soyez le premier à commenter

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

  1. 1. Как мы разгоняли тесты: Кудинов Илья, QA Engineer От bash-скриптов до облака
  2. 2. Зачем нужно разгонять тесты?
  3. 3. Юнит-тестов “как в книжках” почти не бывает Expectation Reality
  4. 4. Количество тестов в проекте
  5. 5. Время выполнения тестов Желание запускать тесты
  6. 6. Сравнение эффективности методов Однопоточный запуск: ~6.5 т/с ~70 минут на 27000 тестов!
  7. 7. А может, не будем запускать каждый раз все тесты? А может, не будем каждый раз запускать ВСЕ тесты?
  8. 8. Попробуем поделить тесты вручную?
  9. 9. Напишем утилиту, которая будет делить тесты между потоками поровну?
  10. 10. Не все тесты одинаковы! Поток #1 Поток #2 Поток #3 Поток #4 Количество тестов Время выполнения
  11. 11. Сравнение эффективности методов Однопоточный запуск: ~6.5 т/с Распределение поровну: ~17 т/с ~26 минут на 27000 тестов!
  12. 12. Нам необоходимо средство для автоматического и равномерного разделения тестов по потокам
  13. 13. Начинаем поиск готовых решений! Параллелизация тестов PHPUnit
  14. 14. И почти всё что мы нашли – реализация уже отвергнутых нами методов
  15. 15. Оригинальный метод – несколько процессов “разгребают” общую очередь тестов
  16. 16. PHPUnit делает очень много внутренней работы Поток #1 Поток #2 Поток #3 Поток #4 Количество тестов Время выполнения Время работы внутренних функций PHPUnit
  17. 17. Сравнение эффективности методов Однопоточный запуск: ~6.5 т/с Распределение поровну: ~17 т/с Разгребание общей очереди: ~21 т/с ~21 минута на 27000 тестов!
  18. 18. Разработчики PHPUnit обещают реализацию многопоточного запуска из коробки?
  19. 19. Вывод: надо разработать что-то своё!
  20. 20. Первое решение – отделим “большие” тесты от “маленьких”
  21. 21. Сравнение эффективности методов Однопоточный запуск: ~6.5 т/с Распределение поровну: ~17 т/с Разгребание общей очереди: ~21 т/с Отделение больших тестов: ~33 т/с ~14 минут на 27000 тестов!
  22. 22. Второе решение – необходимо хранить информацию о времени работы каждого теста!
  23. 23. Для избежания переизбытка информации необходим централизованный сбор статистики!
  24. 24. И для этого нам идеально подходит TeamCity!
  25. 25. Лучший способ управления такой утилитой?
  26. 26. Итоговая схема Многопоточной пускалки КОМПОНЕНТ СБОРА И ХРАНЕНИЯ СТАТИСТИКИ КОМПОНЕНТ ЗАПУСКА ТЕСТОВ КОМПОНЕНТ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ
  27. 27. КОМПОНЕНТ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ БД TeamCity БД для хранения статистики тест => время файл => время Магия
  28. 28. Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье 7 состояний с накапливаемыми данными Чем новее статистика – тем больший “вес” она имеет при распределении тестов Возраст статистики Вес статистики < 1 суток 100 < 2 суток 50 < 3 суток 25 > 3 суток 10 КОМПОНЕНТ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ
  29. 29. КОМПОНЕНТ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ Длительность тестов Потоки с уже распределёнными тестами Тест с известной длительностью
  30. 30. КОМПОНЕНТ ЗАПУСКА ТЕСТОВ Мастер-процесс Поток Поток Поток Поток Поток Файл отчётаФайл отчёта Файл отчёта Файл отчёта Файл отчёта Файл отчёта
  31. 31. КОМПОНЕНТ ЗАПУСКА ТЕСТОВ Мастер-процесс Поток Поток Поток Поток Поток Поток
  32. 32. Оно адаптируется!
  33. 33. Сравнение эффективности методов Однопоточный запуск: ~6.5 т/с Распределение поровну: ~17 т/с Разгребание общей очереди: ~21 т/с Отделение больших тестов: ~33 т/с Многопоточная пускалка: ~65 т/с ~7 минут на 27000 тестов!
  34. 34. PROFIT 1) Тесты запускаются чаще! 2) Разгруженные агенты TC! 2) Автоматический запуск тестов! 3) Переносимость и конфигурируемость!
  35. 35. RunKit  Расширение для PHP  Расширенный инструментарий для подмены классов и методов  Собственная песочница с суперглобальными переменными  Сбрасывает кеш PHP при каждом моке ):
  36. 36. Отправляемся в облака!
  37. 37. Скриптовый фреймворк  Развитие уже существовавшего фреймворка  Выполнение задач на распределённой системе машин  Минимальные правки в имеющихся скриптах  Не зависит от типа выполняемой работы
  38. 38. Клиент Фреймворк Облако Машина в облаке Машина в облаке Машина в облаке Машина в облаке Машина в облаке Машина в облаке Мастер Воркер Воркер Воркер Воркер Воркер Воркер Воркер Воркер Воркер Воркер WebAPI
  39. 39. Вывод клиенту-консоли ….................................
  40. 40. Сравнение эффективности методов Однопоточный запуск: ~6.5 т/с Распределение поровну: ~17 т/с Разгребание общей очереди: ~21 т/с Отделение больших тестов: ~33 т/с Многопоточная пускалка: ~65 т/с Облачная пускалка: ~150 т/с
  41. 41. Есть куда развиваться!  Рассчёт оптимального количества потоков  Обработка и выделение фаталящих тестов  Автоматический поиск зависимостей  Отделение от нашего проекта  ...
  42. 42. badoo.com vk.com/badoocom fb.com/BadooMoscow twitter.com/BadooDev habrahabr.ru/company/badoo/ vk.com/relzeg fb.com/relzeg

×