Cucumber отчёты

Cucumber — это инструмент для поведения, ориентированного на тестирование (Behavior-Driven Development, BDD), который позволяет писать тесты в человекочитаемом формате Gherkin. В сочетании с Protractor, Cucumber обеспечивает возможность тестирования Angular-приложений через понятные сценарии. Одним из ключевых аспектов работы с Cucumber является генерация отчётов, которая позволяет отслеживать успешность выполнения тестов, выявлять ошибки и анализировать покрытие тестами.

Форматы отчётов

Cucumber поддерживает несколько форматов отчётов:

  • Pretty — вывод в консоль в читаемом формате с цветовой подсветкой шагов.
  • JSON — структурированный формат, подходящий для последующей генерации визуальных отчётов.
  • HTML — визуальный отчёт, удобно использовать для документации и анализа.
  • JUnit XML — формат, совместимый с системами CI/CD (например, Jenkins, GitLab CI).

Для генерации HTML-отчётов чаще всего используется промежуточный JSON, который затем обрабатывается библиотеками вроде cucumber-html-reporter или multiple-cucumber-html-reporter.

Настройка генерации отчётов в Protractor

В конфигурационном файле 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 позволяет добавить полезную информацию о среде выполнения тестов.

Параметры форматирования отчётов

  • theme: определяет внешний вид отчёта. Возможные значения — bootstrap, hierarchy, foundation.
  • reportSuiteAsScenarios: отображение сценариев как отдельных единиц отчёта.
  • launchReport: автоматическое открытие отчёта в браузере после генерации.
  • metadata: дополнительная информация о тестируемом приложении, браузере, ОС и т.д.

Генерация нескольких отчётов

Для проектов с множеством функций и сценариев удобно генерировать несколько отчётов одновременно. Используется библиотека 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

Cucumber автоматически собирает статистику по шагам: выполненные, пропущенные, неудачные. Это позволяет анализировать слабые места тестирования и выявлять сценарии, требующие доработки. Использование тегов (@smoke, @regression) в сочетании с отчётами обеспечивает гибкое фильтрование тестов по категориям.

Советы по улучшению отчётов

  • Включать скриншоты при ошибках: с помощью Protractor можно автоматически делать скриншоты при падении теста и вставлять их в HTML-отчёт.
  • Структурировать отчёты по функциональным блокам: папки для разных модулей приложения позволяют получать более понятную иерархию.
  • Использовать CI/CD интеграцию: автоматическая генерация и публикация отчётов в Jenkins или GitLab улучшает командное взаимодействие.

Скриншоты ошибок

Автоматическое добавление скриншотов в отчёт увеличивает ценность документации тестов. Пример кода для вставки скриншота при падении шага:

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 позволяет:

  • Получать наглядную статистику тестов.
  • Интегрировать отчёты с системами CI/CD.
  • Анализировать тестовое покрытие и ошибки.
  • Автоматически сохранять и просматривать скриншоты упавших тестов.

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