Публикация результатов

В Protractor тесты выполняются с использованием фреймворка Jasmine или Mocha, однако их отчетность по умолчанию ограничена стандартным выводом в консоль. Для полноценного анализа тестирования и интеграции с системами CI/CD необходима организация публикации результатов тестов в удобном формате.

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

1. Консольные отчеты По умолчанию Protractor выводит результаты тестов в консоль. Для Jasmine это стандартные строки с информацией о количестве успешных и проваленных тестов, а также о причинах падений. Такой подход удобен для быстрой отладки, но не подходит для автоматизированного контроля качества и хранения истории тестирования.

2. XML/JSON отчеты Для интеграции с системами непрерывной интеграции (Jenkins, GitLab CI/CD) используют форматы JUnit XML или JSON. Преимущества:

  • Возможность автоматического парсинга и построения графиков в CI/CD.
  • Сохранение истории тестирования.
  • Легкая фильтрация по фейлам и скриншотам.

Подключение происходит через сторонние репортеры:

const { SpecReporter } = require('jasmine-spec-reporter');
const Jasmine2HtmlReporter = require('protractor-jasmine2-html-reporter');

exports.config = {
    framework: 'jasmine',
    onPrepare: () => {
        jasmine.getEnv().addReporter(new SpecReporter({
            spec: { displayStacktrace: true }
        }));
        jasmine.getEnv().addReporter(new Jasmine2HtmlReporter({
            savePath: 'test-results/',
            screenshotsFolder: 'images',
            takeScreenshots: true,
            takeScreenshotsOnlyOnFailures: true,
            fileName: 'TestReport'
        }));
    }
};

Ключевые моменты:

  • takeScreenshotsOnlyOnFailures снижает объем хранимых данных, сохраняя скриншоты только при ошибках.
  • savePath определяет директорию для HTML-отчета.

Генерация HTML-отчетов

HTML-отчеты позволяют визуально отслеживать прогресс тестирования, видеть структуру тестов, стек-трейсы ошибок и скриншоты. Обычно используются пакеты: protractor-jasmine2-html-reporter, protractor-html-reporter-2.

Пример настройки с protractor-html-reporter-2:

const HTMLReport = require('protractor-html-reporter-2');

afterLaunch: () => {
    let testConfig = {
        reportTitle: 'Автотесты Protractor',
        outputPath: './test-results',
        outputFilename: 'ProtractorReport',
        screenshotPath: './test-results/images',
        testBrowser: 'Chrome',
        browserVersion: '108',
        modifiedSuiteName: false,
        screenshotsOnlyOnFailure: true
    };
    new HTMLReport().from('./test-results/xmlresults.xml', testConfig);
};

Особенности:

  • Формируется полноценный HTML-документ с навигацией.
  • Можно добавлять фильтры по браузерам и версиям.
  • Возможна интеграция со скриншотами и видео записи (с использованием сторонних инструментов).

Публикация в CI/CD

Для автоматизации публикации отчетов в CI/CD важно учитывать:

  1. Сбор всех результатов в артефакты сборки. Например, в Jenkins это делается через Post-build Actions → Archive the artifacts.
  2. Возможность просмотра отчета в браузере через сохранение HTML-файлов в рабочей директории сборки.
  3. Интеграция с инструментами анализа качества: SonarQube, Allure, TestRail.

Пример конфигурации в Jenkins Pipeline:

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'protractor conf.js'
            }
        }
        stage('Publish Report') {
            steps {
                publishHTML(target: [
                    allowMissing: false,
                    alwaysLinkToLastBuild: true,
                    keepAll: true,
                    reportDir: 'test-results',
                    reportFiles: 'TestReport.html',
                    reportName: 'Protractor Test Report'
                ])
            }
        }
    }
}

Логирование и скриншоты

Для более глубокого анализа важно комбинировать отчеты с логированием действий тестов и скриншотами:

  • Логирование: встроенные функции console.log() можно заменить на специализированные логгеры (winston, log4js) с уровнем важности (info, warn, error).
  • Скриншоты: Protractor позволяет создавать их через browser.takeScreenshot() и сохранять с привязкой к имени теста и времени.

Пример скриншота при падении теста:

afterEach(async function() {
    if (this.currentTest.state === 'failed') {
        const png = await browser.takeScreenshot();
        const fs = require('fs');
        const path = `./test-results/images/${this.currentTest.title}.png`;
        fs.writeFileSync(path, png, { encoding: 'base64' });
    }
});

Настройка Allure

Allure позволяет создавать красивые интерактивные отчеты с историей тестов, категориями, степами и скриншотами. Для интеграции с Protractor используется allure-commandline и jasmine-allure-reporter:

const AllureReporter = require('jasmine-allure-reporter');

onPrepare: () => {
    jasmine.getEnv().addReporter(new AllureReporter({
        resultsDir: 'allure-results'
    }));
};

Запуск отчета:

allure generate allure-results --clean -o allure-report
allure open allure-report

Особенности Allure:

  • Поддержка step-by-step логирования.
  • Гибкая фильтрация по тегам и статусам тестов.
  • Визуальное отображение скриншотов и вложений.

Рекомендации по организации публикации

  • Разделять выполнение тестов и генерацию отчетов в конфигурации.
  • Использовать унифицированный формат отчетов (XML/JSON) для CI/CD.
  • Подключать скриншоты и логи для упрощения анализа ошибок.
  • Сохранять историю тестов для последующего анализа трендов и стабильности продукта.

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