Параллельное выполнение тестов — один из ключевых способов ускорения автоматизированного тестирования веб-приложений. Protractor, как инструмент для end-to-end тестирования Angular и не-Angular приложений на базе Selenium WebDriver, предоставляет гибкие механизмы для запуска тестов параллельно, обеспечивая оптимизацию времени тестового прогона без потери стабильности.
Основной способ организации параллельного выполнения тестов в
Protractor заключается в настройке конфигурационного файла
protractor.conf.js. Для управления параллельностью
используются следующие параметры:
1. multiCapabilities и
capabilities
capabilities — описывает один набор параметров браузера
для запуска тестов.multiCapabilities — массив объектов, каждый из которых
задаёт отдельный браузер или профиль, что позволяет запускать тесты
одновременно в нескольких браузерах.Пример:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['tests/*.spec.js'],
multiCapabilities: [
{
browserName: 'chrome',
shardTestFiles: true,
maxInstances: 3
},
{
browserName: 'firefox',
shardTestFiles: true,
maxInstances: 2
}
]
};
Объяснение ключевых параметров:
shardTestFiles: true — разбивает тестовые файлы на
отдельные части, которые могут выполняться параллельно.maxInstances — максимальное количество одновременных
экземпляров браузера для данного набора настроек.Использование shardTestFiles особенно важно для больших
тестовых наборов, где один файл может содержать десятки тестов. В этом
случае Protractor автоматически распределяет тесты по доступным
экземплярам браузера.
capabilities с
shardTestFilesДаже при использовании одного браузера возможно ускорить выполнение тестов за счет “шардинга”:
exports.config = {
capabilities: {
browserName: 'chrome',
shardTestFiles: true,
maxInstances: 5
},
specs: ['tests/*.spec.js']
};
Здесь все тестовые файлы будут делиться на потоки, каждый из которых запустится в отдельном экземпляре Chrome. Такой подход уменьшает время прогонки, особенно при больших тестовых наборах.
onPrepare для подготовки параллельных тестовonPrepare позволяет настраивать окружение перед запуском
тестов. Для параллельного запуска полезно инициализировать глобальные
объекты и избегать общих состояний между тестами.
Пример безопасной инициализации:
exports.config = {
capabilities: {
browserName: 'chrome',
shardTestFiles: true,
maxInstances: 3
},
onPrepare: async () => {
global.login = async (username, password) => {
await browser.get('/login');
await element(by.id('username')).sendKeys(username);
await element(by.id('password')).sendKeys(password);
await element(by.id('submit')).click();
};
}
};
Каждый экземпляр браузера будет работать с собственной копией глобальных объектов, что предотвращает конфликты между параллельными тестами.
Пример конфигурации логирования:
const fs = require('fs');
const path = require('path');
exports.config = {
onPrepare: () => {
const instanceId = process.pid;
const logDir = path.join(__dirname, 'logs');
if (!fs.existsSync(logDir)) fs.mkdirSync(logDir);
browser.logger = fs.createWriteStream(path.join(logDir, `log_${instanceId}.txt`), { flags: 'a' });
}
};
multiCapabilities можно одновременно запускать тесты в
Chrome, Firefox и Edge.maxInstances позволяет ускорить прогон больших наборов
тестов без изменения логики тестов.maxInstances до разумного
числа — слишком большое количество экземпляров браузера может
перегрузить локальную машину или CI-агент.Параллельное выполнение в Protractor — мощный инструмент для сокращения времени тестирования и повышения эффективности CI/CD, при условии правильной конфигурации и изоляции тестов.