Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

175,000 views

Published on

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

Published in: Technology
  • Be the first to comment

Доклад Ильи Кудинова на конференции 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

×