SlideShare a Scribd company logo
1 of 39
Download to read offline
ОПТИМАЛЬНАЯПАРАЛЛЕЛИЗАЦИЯ
ЮНИТ-ТЕСТОВВ БОЛЬШОМ
ПРОЕКТЕ
Кудинов Илья, Badoo Development
Зачем это нужно?
Схема запуска 6.5к тестов 16к тестов 16к тестов,
нагруженные серверы
Однопоточныйзапуск 10 – 15 минут 35 – 40 минут
ОБОЖЕКАКМНОГО
минут
??? ??? ??? ???
??? ??? ??? ???
??? ??? ??? ???
Время выполнения тестов
Желаниезапускать тесты
А может, не будем запускать каждый раз все тесты?
А может, не будем каждый раз запускать ВСЕ тесты?
А может, попробуем поделить тесты вручную?
А может, просто напишем утилиту, которая будет делить
тесты между потоками поровну?
Схема запуска 6.5к тестов 16к тестов 16к тестов,
нагруженные серверы
Однопоточныйзапуск 10 – 15 минут 35 – 40 минут
ОБОЖЕКАКМНОГО
минут
Разделение тестов
поровну 2 – 2.5 минуты 10 – 15 минут 20 – 25 минут
??? ??? ??? ???
??? ??? ??? ???
Нам необоходимо средство для автоматического
и равномерного разделения тестов по потокам
Начинаем поиск готовых решений!
И почти всё что мы нашли – реализация
уже отвергнутых нами методов
Оригинальный метод – несколько процессов“разгребают” общую
очередь тестов
Разработчики PHPUnit обещают реализацию
многопоточного запуска из коробки?
Вывод: надо разработать что-то своё!
Первое решение – отделим “большие” тесты от “маленьких”
Схема запуска 6.5к тестов 16к тестов 16к тестов,
нагруженные серверы
Однопоточныйзапуск 10 – 15 минут 35 – 40 минут
ОБОЖЕКАКМНОГО
минут
Разделение тестов
поровну 2 – 2.5 минуты 10 – 15 минут 20 – 25 минут
Отделение “больших”
тестов 1.5 – 2 минуты 6 – 8 минут 15 – 20 минут
??? ??? ??? ???
Второе решение – необходимо хранить информацию
о времени работы каждого теста!
Для избежания переизбытка информации
необходим централизованный сбор статистики!
И для этого нам идеально подходит TeamCity!
Лучший способ настройки такой утилиты?
Итоговая схема Многопоточной пускалки
КЛАСС ДЛЯ СБОРА
И СОХРАНЕНИЯ СТАТИСТИКИ
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
КЛАСС ДЛЯ
РАСПРЕДЕЛЕНИЯ ТЕСТОВ
ПО ПОТОКАМ
КЛАСС ДЛЯ СБОРА И СОХРАНЕНИЯСТАТИСТИКИ
БД TeamCity БД для хранения
статистики
Обработкаинформации
тест => время
файл => время
Поиск соответствия
тест => файл;
Простейшая система
кешированияинформации
для ускорения процесса
КЛАСС ДЛЯ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ
Понедельник Вторник Среда Четверг
Пятница Суббота Воскресенье
7 состояний с накапливаемымиданными
Чем новее статистика – тем больший “вес” она имеет
при распределениитестов
Возрастстатистики Вес статистики
< 1 суток 100
< 2 суток 50
< 3 суток 25
> 3 суток 10
КЛАСС ДЛЯ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ
Длительность тестов
Потоки с уже распределённымитестами
Тест с известной длительностью
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Сбор файлов
с тестами
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
Распределение
тестов по потокам
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
Распределение
тестов по потокам
Генерация
динамического
XML-конфига
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
Распределение
тестов по потокам
Генерация
динамического
XML-конфига
Запуск процессов
PHPUnit с нужными
параметрами
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
Распределение
тестов по потокам
Генерация
динамического
XML-конфига
Запуск процессов
PHPUnit с нужными
параметрами
Вывод информации
с помощью наших
TestListener'ов
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
Распределение
тестов по потокам
Генерация
динамического
XML-конфига
Запуск процессов
PHPUnit с нужными
параметрами
Вывод информации
с помощью наших
TestListener'ов
Сбор и сохранение
статистики
(если необходимо)
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
Распределение
тестов по потокам
Генерация
динамического
XML-конфига
Запуск процессов
PHPUnit с нужными
параметрами
Вывод информации
с помощью наших
TestListener'ов
Сбор и сохранение
статистики
(если необходимо)
???
КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ
Чтение входного
XML-файла PHPUnit
Расчёт времени
выполнения тестов
Сбор файлов
с тестами
Распределение
тестов по потокам
Генерация
динамического
XML-конфига
Запуск процессов
PHPUnit с нужными
параметрами
Вывод информации
с помощью наших
TestListener'ов
Сбор и сохранение
статистики
(если необходимо)
???
P R O F I T ! ! !
Кастомные TestListener'ы
Схема запуска 6.5к тестов 16к тестов 16к тестов,
нагруженные серверы
Однопоточныйзапуск 10 – 15 минут 35 – 40 минут
ОБОЖЕКАКМНОГО
минут
Разделение тестов
поровну 2 – 2.5 минуты 10 – 15 минут 20 – 25 минут
Отделение “больших”
тестов 1.5 – 2 минуты 6 – 8 минут 15 – 20 минут
Наша многопоточная
пускалка 45 – 60 секунд 3 – 4 минуты 6 – 8 минут
Итого мы получили самостоятельно
адаптирующуюся
под обстоятельства систему!
PROFIT
1) Тесты запускаются чаще!
2) Автоматический запуск тестов!
3) Переносимость и конфигурируемость!
4) Going OpenSource – stay tuned!
badoo.com
vk.com/badoocom
fb.com/BadooMoscow
twitter.com/BadooDev
habrahabr.ru/company/badoo/
vk.com/relzeg
fb.com/relzeg

More Related Content

What's hot

практическое задание
практическое заданиепрактическое задание
практическое задание
olgakort
 
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
Alexander Akbashev
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 

What's hot (18)

практическое задание
практическое заданиепрактическое задание
практическое задание
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
 
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
"Sphinx 3.0 в реальной жизни" Андрей Смирнов (Avito)
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Windw
WindwWindw
Windw
 
Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
VMUG UA #1 Veeam BR v6
VMUG UA #1 Veeam BR v6VMUG UA #1 Veeam BR v6
VMUG UA #1 Veeam BR v6
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Continuous Integration for C++ engineers
Continuous Integration for C++ engineersContinuous Integration for C++ engineers
Continuous Integration for C++ engineers
 
Continuous Integration для C++ разработчика
Continuous Integration для C++ разработчикаContinuous Integration для C++ разработчика
Continuous Integration для C++ разработчика
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
 

Similar to Оптимальная параллелизация юнит-тестов в большом проекте / Илья Кудинов (Badoo)

Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Образовательные мероприятия "Netpeak Talks"
 
5 колчинская
5 колчинская 5 колчинская
5 колчинская
qasib
 
Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)
Paul Stashevsky
 
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest
 
Поиск багов в поиске
Поиск багов в поискеПоиск багов в поиске
Поиск багов в поиске
yaevents
 

Similar to Оптимальная параллелизация юнит-тестов в большом проекте / Илья Кудинов (Badoo) (20)

10M tests per day
10M tests per day10M tests per day
10M tests per day
 
Parallelization of Selenium tests with .NET/C# + NUnit
Parallelization of Selenium tests with .NET/C# + NUnitParallelization of Selenium tests with .NET/C# + NUnit
Parallelization of Selenium tests with .NET/C# + NUnit
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
 
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
"Опыт создания системы управления сборкой и тестированием" (слайдкаст)
 
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполненияАвтотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
 
Jmeter
JmeterJmeter
Jmeter
 
5 колчинская
5 колчинская 5 колчинская
5 колчинская
 
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
АНТОН СЕРПУТЬКО «Start performance testing from scratch» QADay 2019
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектах
 
So Your WAF Needs a Parser
So Your WAF Needs a ParserSo Your WAF Needs a Parser
So Your WAF Needs a Parser
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)
 
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
CodeFest 2011. Левин М. — Фреймворк для автоматизации тестирования и функцион...
 
Поиск багов в поиске
Поиск багов в поискеПоиск багов в поиске
Поиск багов в поиске
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
 

Оптимальная параллелизация юнит-тестов в большом проекте / Илья Кудинов (Badoo)

  • 3. Схема запуска 6.5к тестов 16к тестов 16к тестов, нагруженные серверы Однопоточныйзапуск 10 – 15 минут 35 – 40 минут ОБОЖЕКАКМНОГО минут ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ???
  • 5. А может, не будем запускать каждый раз все тесты? А может, не будем каждый раз запускать ВСЕ тесты?
  • 6. А может, попробуем поделить тесты вручную?
  • 7. А может, просто напишем утилиту, которая будет делить тесты между потоками поровну?
  • 8. Схема запуска 6.5к тестов 16к тестов 16к тестов, нагруженные серверы Однопоточныйзапуск 10 – 15 минут 35 – 40 минут ОБОЖЕКАКМНОГО минут Разделение тестов поровну 2 – 2.5 минуты 10 – 15 минут 20 – 25 минут ??? ??? ??? ??? ??? ??? ??? ???
  • 9. Нам необоходимо средство для автоматического и равномерного разделения тестов по потокам
  • 11. И почти всё что мы нашли – реализация уже отвергнутых нами методов
  • 12. Оригинальный метод – несколько процессов“разгребают” общую очередь тестов
  • 13. Разработчики PHPUnit обещают реализацию многопоточного запуска из коробки?
  • 15. Первое решение – отделим “большие” тесты от “маленьких”
  • 16. Схема запуска 6.5к тестов 16к тестов 16к тестов, нагруженные серверы Однопоточныйзапуск 10 – 15 минут 35 – 40 минут ОБОЖЕКАКМНОГО минут Разделение тестов поровну 2 – 2.5 минуты 10 – 15 минут 20 – 25 минут Отделение “больших” тестов 1.5 – 2 минуты 6 – 8 минут 15 – 20 минут ??? ??? ??? ???
  • 17. Второе решение – необходимо хранить информацию о времени работы каждого теста!
  • 18. Для избежания переизбытка информации необходим централизованный сбор статистики!
  • 19. И для этого нам идеально подходит TeamCity!
  • 20. Лучший способ настройки такой утилиты?
  • 21. Итоговая схема Многопоточной пускалки КЛАСС ДЛЯ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ КЛАСС ДЛЯ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ
  • 22. КЛАСС ДЛЯ СБОРА И СОХРАНЕНИЯСТАТИСТИКИ БД TeamCity БД для хранения статистики Обработкаинформации тест => время файл => время Поиск соответствия тест => файл; Простейшая система кешированияинформации для ускорения процесса
  • 23. КЛАСС ДЛЯ СБОРА И СОХРАНЕНИЯ СТАТИСТИКИ Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье 7 состояний с накапливаемымиданными Чем новее статистика – тем больший “вес” она имеет при распределениитестов Возрастстатистики Вес статистики < 1 суток 100 < 2 суток 50 < 3 суток 25 > 3 суток 10
  • 24. КЛАСС ДЛЯ РАСПРЕДЕЛЕНИЯ ТЕСТОВ ПО ПОТОКАМ Длительность тестов Потоки с уже распределённымитестами Тест с известной длительностью
  • 25. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit
  • 26. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Сбор файлов с тестами
  • 27. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами
  • 28. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами Распределение тестов по потокам
  • 29. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами Распределение тестов по потокам Генерация динамического XML-конфига
  • 30. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами Распределение тестов по потокам Генерация динамического XML-конфига Запуск процессов PHPUnit с нужными параметрами
  • 31. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами Распределение тестов по потокам Генерация динамического XML-конфига Запуск процессов PHPUnit с нужными параметрами Вывод информации с помощью наших TestListener'ов
  • 32. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами Распределение тестов по потокам Генерация динамического XML-конфига Запуск процессов PHPUnit с нужными параметрами Вывод информации с помощью наших TestListener'ов Сбор и сохранение статистики (если необходимо)
  • 33. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами Распределение тестов по потокам Генерация динамического XML-конфига Запуск процессов PHPUnit с нужными параметрами Вывод информации с помощью наших TestListener'ов Сбор и сохранение статистики (если необходимо) ???
  • 34. КЛАСС ДЛЯ ЗАПУСКА ТЕСТОВ Чтение входного XML-файла PHPUnit Расчёт времени выполнения тестов Сбор файлов с тестами Распределение тестов по потокам Генерация динамического XML-конфига Запуск процессов PHPUnit с нужными параметрами Вывод информации с помощью наших TestListener'ов Сбор и сохранение статистики (если необходимо) ??? P R O F I T ! ! !
  • 36. Схема запуска 6.5к тестов 16к тестов 16к тестов, нагруженные серверы Однопоточныйзапуск 10 – 15 минут 35 – 40 минут ОБОЖЕКАКМНОГО минут Разделение тестов поровну 2 – 2.5 минуты 10 – 15 минут 20 – 25 минут Отделение “больших” тестов 1.5 – 2 минуты 6 – 8 минут 15 – 20 минут Наша многопоточная пускалка 45 – 60 секунд 3 – 4 минуты 6 – 8 минут
  • 37. Итого мы получили самостоятельно адаптирующуюся под обстоятельства систему!
  • 38. PROFIT 1) Тесты запускаются чаще! 2) Автоматический запуск тестов! 3) Переносимость и конфигурируемость! 4) Going OpenSource – stay tuned!