Protractor по умолчанию интегрируется с Jasmine, Mocha и другими тестовыми фреймворками, предоставляя базовую информацию о результатах тестов. Для крупных проектов стандартных отчётов бывает недостаточно: требуется структурированная информация, логирование шагов, скриншоты при ошибках и возможность автоматической публикации результатов. Кастомные отчёты решают эти задачи.
Jasmine Reporter — это основной способ расширения отчётности в Protractor при использовании Jasmine. Для подключения кастомного репортера выполняются следующие шаги:
npm install jasmine-reporters --save-dev
const JasmineReporters = require('jasmine-reporters');
exports.config = {
framework: 'jasmine',
onPrepare: function() {
jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({
savePath: 'test-results',
consolidateAll: false
}));
}
};
Пояснение параметров:
savePath — путь к папке, куда сохраняются отчёты.consolidateAll — если false, создаются
отдельные файлы на каждый тест; если true, все результаты
объединяются в один файл.Protractor позволяет создавать полностью кастомные репортеры, реализуя интерфейс Jasmine:
class CustomReporter {
jasmineStarted(suiteInfo) {
console.log(`Начало выполнения: ${suiteInfo.totalSpecsDefined} тестов`);
}
specStarted(result) {
console.log(`Начало теста: ${result.fullName}`);
}
specDone(result) {
const status = result.status.toUpperCase();
console.log(`Тест ${result.fullName} завершён со статусом ${status}`);
if (result.failedExpectations.length) {
result.failedExpectations.forEach(failure => {
console.log(`Ошибка: ${failure.message}`);
});
}
}
jasmineDone() {
console.log('Выполнение всех тестов завершено');
}
}
exports.config = {
framework: 'jasmine',
onPrepare: function() {
jasmine.getEnv().addReporter(new CustomReporter());
}
};
Ключевые моменты кастомного репортера:
jasmineStarted — вызывается один раз перед началом всех
тестов.specStarted — вызывается перед выполнением каждого
теста.specDone — вызывается после завершения каждого
теста.jasmineDone — вызывается после завершения всех
тестов.Кастомные репортеры можно интегрировать со средствами Protractor для снятия скриншотов при падении теста:
const fs = require('fs');
class ScreenshotReporter {
specDone(result) {
if (result.status === 'failed') {
browser.takeScreenshot().then(png => {
const stream = fs.createWriteStream(`screenshots/${result.fullName}.png`);
stream.write(Buffer.from(png, 'base64'));
stream.end();
});
}
}
}
exports.config = {
framework: 'jasmine',
onPrepare: function() {
jasmine.getEnv().addReporter(new ScreenshotReporter());
}
};
Особенности работы со скриншотами:
browser.takeScreenshot(), который
возвращает изображение в формате base64.Для удобного представления результатов в виде HTML можно использовать
пакет protractor-html-reporter-2:
npm install protractor-html-reporter-2 --save-dev
Пример конфигурации генерации отчёта после тестов:
const reporter = require('protractor-html-reporter-2');
onComplete: function() {
const testConfig = {
reportTitle: 'Protractor Тесты',
outputPath: './reports',
screenshotsFolder: 'screenshots',
testBrowser: 'Chrome',
screenshotsOnlyOnFailure: true
};
reporter.generate(testConfig);
}
Важные возможности:
async/await.Кастомные отчёты в Protractor позволяют создавать полностью управляемую систему отчётности, адаптированную под требования конкретного проекта, включая визуализацию, хранение и детализированное логирование.