testplane-chunks
Обзор
Используйте плагин testplane-chunks, чтобы распараллелить запуск тестов.
Если в вашем проекте большое количество тестов и при этом не хватает мощности отдельных CI-серверов, чтобы выполнить все эти тесты на одном сервере за приемлемое время, то этот плагин — для вас.
Плагин позволяет распараллелить запуск тестов на нескольких серверах. Тем самым ускорив общий прогон тестов. Однако сам плагин не занимается какой-либо оркестрацией, распараллеливанием запуска или слиянием получившихся отдельных отчетов в один итоговый отчет.
Что же тогда делает данный плагин?
Плагин testplane-chunks
разбивает всегда одним и тем же способом ваш набор тестов на заданное количество порций (chunks) и отдает testplane на запуск только ту порцию, которую вы указали. Здесь ключевое — «всегда одним и тем же способом». То есть операция разбиения на порции (чанки) является идемпотентной.
Что дает идемпотентность?
Вы можете организовать в своем CI переиспользование результатов запусков тестов из отдельных чанков при общем перезапуске. Это позволит вам сэкономить время при перезапуске всех тестов, так как прогоняться будут только те чанки, в которых есть упавшие тесты.
Например, в вашем проекте есть 1 тысяча тестов. Вы разбили эти тесты на 10 чанков по 100 тестов в каждом. Это означает, что при запуске тестов в вашем пулл-реквесте, у вас будет 10 инстансов testplane, запущенных одновременно на 10 серверах. Каждый инстанс выполнит по 100 тестов. В каких-то из этих запусков тесты могут упасть. Например, 2 из 10 чанков у вас упали. Вы решаете перезапустить прогон тестов, рассчитывая, что на этот раз тесты пройдут. Так вот, при перезапуске testplane с указанием номера упавшего чанка, вы может е быть абсолютно уверены, что плагин testplane-chunks
сформирует для testplane точно такую же порцию тестов как и в прошлый свой запуск.
Организуя перезапуск тестов в своем CI, помните, что для переиспользования запусков отдельных чанков, исходное количество тестов, их имена, или количество браузеров, в которых они запускаются, не должны меняться между запусками. Иначе чанки в новом запуске уже не будут такими же, как в прошлый раз. И хотя формально вы получите то же количество чанков, что и в прошлый раз, их содержимое при этом будет отличаться. А значит переиспользование прошлых результатов окажется некорректным.
Во сколько раз ускорятся мои тесты?
Нужно понимать, что ускорение возможно только за счет того, что тесты будут запускаться на большем количестве железа.
Если у вас нет в наличии серверов, которые можно было бы выделить под параллельный запуск сразу нескольких testplane, то разбивать тесты на соответствующее количество чанков смысла нет. Если CI будет ждать освобождения какого-либо сервера, чтобы запустить очередную порцию тестов, то ваш параллельный запуск превратится в последовательный, и никакого ускорения вы не получите. Даже наоборот — произойдет замедление из-за накладных расходов на отдельные запуски testplane и формирование итогового отчета.
То есть параллельность — количество чанков, на которые вы разбиваете свои тесты — обязательно должна быть обеспечена соответствующим количеством доступного железа.
А как получить итоговый отчет?
Добавьте в свой проект плагин html-reporter.
Используйте команду merge-reports, которую html-reporter добавляет к CLI testplane, чтобы слить все получившиеся в отдельных чанках отчеты в один итоговый отчет.
Установка
npm install -D testplane-chunks
Настройка
Необходимо подключить плагин в разделе plugins
конфига testplane
:
module.exports = {
plugins: {
"testplane-chunks": {
count: 7, // Разбить тесты на 7 порций (чанков)
run: 1, // Запустить первую порцию
},
// другие плагины testplane...
},
// другие настройки testplane...
};
Можно не задавать параметр run — в конфиге плагина, так как при параллельных запусках testplane для каждого запуска вы будете указывать свой номер порции (run). И этот номер нужно будет передавать либо через опцию командной строки, либо через переменную окружения (см. передачу параметров через CLI).
Расшифровка параметров конфигурации
Параметр | Тип | По умолчанию | Описание |
enabled | Boolean | true | Включить / отключить плагин. |
count | Number | 1 | Количество порций (чанков), на которые нужно разбить набор тестов. |
run | Number | 1 | Номер чанка, тесты из которого нужно запустить. |
Передача параметров через CLI
Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс --chunks-
для опций командной строки и testplane_chunks_
— для переменных окружения. Например:
npx testplane --chunks-count 10 --chunks-run 1 ...
testplane_chunks_count=10 testplane_chunks_run=1 npx testplane ...