Cucumber — это инструмент для поведения, ориентированного на тестирование (Behavior-Driven Development, BDD), который позволяет писать тесты в человекочитаемом формате Gherkin. В сочетании с Protractor, Cucumber обеспечивает возможность тестирования Angular-приложений через понятные сценарии. Одним из ключевых аспектов работы с Cucumber является генерация отчётов, которая позволяет отслеживать успешность выполнения тестов, выявлять ошибки и анализировать покрытие тестами.
Cucumber поддерживает несколько форматов отчётов:
Для генерации HTML-отчётов чаще всего используется промежуточный
JSON, который затем обрабатывается библиотеками вроде
cucumber-html-reporter или
multiple-cucumber-html-reporter.
В конфигурационном файле Protractor (protractor.conf.js)
необходимо подключить Cucumber и настроить параметры отчётов. Пример
базовой конфигурации:
exports.config = {
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
specs: [
'./features/**/*.feature'
],
cucumberOpts: {
require: ['./step_definitions/**/*.js'],
format: ['json:./reports/cucumber-report.json'], // Сохранение отчёта в формате JSON
tags: '@smoke'
},
onPrepare: () => {
const reporter = require('cucumber-html-reporter');
const options = {
theme: 'bootstrap',
jsonFile: './reports/cucumber-report.json',
output: './reports/cucumber-report.html',
reportSuiteAsScenarios: true,
launchReport: true,
metadata: {
"App Version": "1.0.0",
"Test Environment": "QA",
"Browser": "Chrome",
"Platform": process.platform,
"Executed": "Local"
}
};
reporter.generate(options);
}
};
В этом примере отчёт создаётся после выполнения всех тестов. Ключевой
момент — формат JSON, который служит источником для
HTML-отчёта. Параметр metadata позволяет добавить полезную
информацию о среде выполнения тестов.
bootstrap, hierarchy,
foundation.Для проектов с множеством функций и сценариев удобно генерировать
несколько отчётов одновременно. Используется библиотека
multiple-cucumber-html-reporter, которая позволяет
объединять несколько JSON-файлов и создавать единый визуальный отчёт.
Настройка:
const reporter = require('multiple-cucumber-html-reporter');
reporter.generate({
jsonDir: './reports/json',
reportPath: './reports/html',
metadata:{
browser: {
name: 'chrome',
version: '109'
},
device: 'Local test machine',
platform: {
name: process.platform,
version: '10'
}
},
customData: {
title: 'Project Info',
data: [
{label: 'Project', value: 'Protractor BDD'},
{label: 'Release', value: '1.2.3'},
{label: 'Cycle', value: 'Sprint 12'}
]
}
});
Такой подход особенно полезен для интеграции с CI/CD и построения исторических данных по тестированию.
Cucumber автоматически собирает статистику по шагам: выполненные,
пропущенные, неудачные. Это позволяет анализировать слабые места
тестирования и выявлять сценарии, требующие доработки. Использование
тегов (@smoke, @regression) в
сочетании с отчётами обеспечивает гибкое фильтрование тестов по
категориям.
Автоматическое добавление скриншотов в отчёт увеличивает ценность документации тестов. Пример кода для вставки скриншота при падении шага:
const fs = require('fs');
After(async function(scenario) {
if (scenario.result.status === 'failed') {
const screenshot = await browser.takeScreenshot();
const stream = fs.createWriteStream(`./reports/screenshots/${scenario.pickle.name}.png`);
stream.write(Buffer.from(screenshot, 'base64'));
stream.end();
}
});
Этот скрипт создаёт PNG-файлы с именами сценариев, что облегчает поиск проблемных шагов.
Использование Cucumber-отчётов в Protractor позволяет:
Такой подход повышает прозрачность процесса тестирования и делает BDD-тесты более управляемыми и визуально информативными.