Перейти к основному содержимому

testplane-chunks

Обзор

Используйте плагин testplane-chunks, чтобы распараллелить запуск тестов.

Если в вашем проекте большое количество тестов и при этом не хватает мощности отдельных CI-серверов, чтобы выполнить все эти тесты на одном сервере за приемлемое время, то этот плагин — для вас.

Плагин позволяет распараллелить запуск тестов на нескольких серверах. Тем самым ускорив общий прогон тестов. Однако сам плагин не занимается какой-либо оркестрацией, распараллеливанием запуска или слиянием получившихся отдельных отчетов в один итоговый отчет.

Что же тогда делает данный плагин?

Плагин testplane-chunks разбивает всегда одним и тем же способом ваш набор тестов на заданное количество порций (chunks) и отдает testplane на запуск только ту порцию, которую вы указали. Здесь ключевое — «всегда одним и тем же способом». То есть операция разбиения на порции (чанки) является идемпотентной.

Что дает идемпотентность?

Вы можете организовать в своем CI переиспользование результатов запусков тестов из отдельных чанков при общем перезапуске. Это позволит вам сэкономить время при перезапуске всех тестов, так как прогоняться будут только те чанки, в которых есть упавшие тесты.

Например, в вашем проекте есть 1 тысяча тестов. Вы разбили эти тесты на 10 чанков по 100 тестов в каждом. Это означает, что при запуске тестов в вашем пулл-реквесте, у вас будет 10 инстансов testplane, запущенных одновременно на 10 серверах. Каждый инстанс выполнит по 100 тестов. В каких-то из этих запусков тесты могут упасть. Например, 2 из 10 чанков у вас упали. Вы решаете перезапустить прогон тестов, рассчитывая, что на этот раз тесты пройдут. Так вот, при перезапуске testplane с указанием номера упавшего чанка, вы можете быть абсолютно уверены, что плагин testplane-chunks сформирует для testplane точно такую же порцию тестов как и в прошлый свой запуск.

warning

Организуя перезапуск тестов в своем 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).

Расшифровка параметров конфигурации

ПараметрТипПо умолчаниюОписание
enabledBooleantrueВключить / отключить плагин.
countNumber1Количество порций (чанков), на которые нужно разбить набор тестов.
runNumber1Номер чанка, тесты из которого нужно запустить.

Передача параметров через CLI

Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс --chunks- для опций командной строки и testplane_chunks_ — для переменных окружения. Например:

npx testplane --chunks-count 10 --chunks-run 1 ...
testplane_chunks_count=10 testplane_chunks_run=1 npx testplane ...