Jasmine отчётность

Jasmine является встроенным фреймворком для тестирования в Protractor, предоставляя мощный набор возможностей для написания и выполнения тестов. Одним из ключевых аспектов эффективного тестирования является отчётность — возможность фиксировать результаты тестов, анализировать их и интегрировать с системами CI/CD.


Основные принципы отчётности в Jasmine

Jasmine использует концепцию спецификаций (specs) и свитов (suites) для организации тестов. Каждая спецификация представляет собой отдельный тест, а свиты объединяют их в логические группы с помощью describe. Для формирования отчётов Jasmine предоставляет:

  • Стандартный консольный вывод — простое отображение результатов в терминале.
  • Custom reporters — расширяемые модули, позволяющие сохранять результаты в файлы различных форматов (JSON, XML, HTML).

Ключевой момент: Protractor не ограничивается встроенными возможностями Jasmine; можно интегрировать сторонние репортеры для более гибкой отчётности.


Встроенные возможности Jasmine для отчётов

Jasmine предоставляет объект jasmine.getEnv(), через который можно подключать репортеры:

const JasmineConsoleReporter = require('jasmine-console-reporter');

const reporter = new JasmineConsoleReporter({
    colors: 1,          // Использование цветов
    cleanStack: 1,      // Очистка стека ошибок
    verbosity: 4,       // Подробность вывода
    listStyle: 'indent' // Стиль списка тестов
});

jasmine.getEnv().addReporter(reporter);

Эта конфигурация обеспечивает детализированный вывод в консоль, позволяя видеть не только успешные и провалившиеся тесты, но и трассировку ошибок.


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

Для визуализации результатов тестов удобно использовать HTML-отчёты. Один из популярных инструментов — protractor-jasmine2-html-reporter:

const HtmlReporter = require('protractor-jasmine2-html-reporter');

exports.config = {
    onPrepare: function() {
        jasmine.getEnv().addReporter(
            new HtmlReporter({
                savePath: 'test-reports/',
                screenshotsFolder: 'images',
                takeScreenshots: true,
                takeScreenshotsOnlyOnFailures: true,
                cleanDestination: false,
                fileName: 'TestReport',
                consolidate: true
            }).getJasmine2Reporter()
        );
    }
};

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

  • Скриншоты автоматически сохраняются при падении теста.
  • Отчёт формируется в отдельной папке, что упрощает интеграцию с CI/CD.
  • Поддерживается настройка имени файла, структуры папок и детализации отчёта.

Форматирование отчётов в XML

Для интеграции с Jenkins или другими CI-системами часто используется формат JUnit XML. Репортер jasmine-reporters позволяет легко создавать такие отчёты:

const jasmineReporters = require('jasmine-reporters');

jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
    savePath: 'test-results',
    consolidateAll: false,
    filePrefix: 'xmlresults'
}));

Преимущества:

  • Совместимость с большинством CI-систем.
  • Возможность группировки результатов по файлам или пакетам.
  • Консистентность данных для автоматического анализа.

Расширение функционала через кастомные репортеры

Jasmine поддерживает создание кастомных репортеров, что позволяет полностью контролировать процесс отчётности. Основная структура кастомного репортера:

class CustomReporter {
    jasmineStarted(suiteInfo) {
        console.log(`Начало тестов: ${suiteInfo.totalSpecsDefined} спецификаций`);
    }

    specStarted(result) {
        console.log(`Тест "${result.description}" начат`);
    }

    specDone(result) {
        console.log(`Тест "${result.description}" завершён со статусом: ${result.status}`);
        if(result.failedExpectations.length > 0) {
            console.log('Ошибки:', result.failedExpectations);
        }
    }

    jasmineDone() {
        console.log('Все тесты выполнены');
    }
}

jasmine.getEnv().addReporter(new CustomReporter());

Такой подход позволяет:

  • Логировать тесты в специфическом формате.
  • Отправлять результаты на сервер или в базу данных.
  • Интегрировать тестовую отчётность с внешними аналитическими системами.

Снятие скриншотов и их интеграция в отчёты

В 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(new Buffer.from(png, 'base64'));
                stream.end();
            });
        }
    }
}

jasmine.getEnv().addReporter(new ScreenshotReporter());

Преимущества такого подхода:

  • Визуальная проверка ошибок.
  • Лёгкая интеграция с HTML-отчётами.
  • Повышение информативности отчётов для QA и разработчиков.

Настройка логирования и фильтрации

Jasmine позволяет настраивать уровень логирования и фильтровать тесты через fit, fdescribe, xdescribe и xit. Это полезно для сокращения объёма отчётов и фокусировки на критичных сценариях.

  • fit — выполняет только один тест.
  • fdescribe — выполняет только выбранный свит.
  • xit и xdescribe — исключают тесты из выполнения, но оставляют их в отчётах как пропущенные.

Эта гибкость помогает поддерживать чистоту отчётов и концентрироваться на актуальных результатах.


Интеграция с CI/CD

Jasmine-отчёты легко интегрируются с системами непрерывной интеграции:

  • Jenkins — через JUnit XML отчёты.
  • GitLab CI/CD — генерация HTML и XML отчётов с артефактами.
  • TeamCity и Bamboo — поддержка кастомных репортеров и XML формата.

Использование автоматизированной отчётности позволяет отслеживать стабильность тестов, обнаруживать нестабильные сценарии и поддерживать качество продукта на постоянном уровне.


Рекомендации по организации отчётности

  1. Разделять репортеры по типу вывода: консоль, HTML, XML.
  2. Делать скриншоты только при падении теста для экономии дискового пространства.
  3. Использовать кастомные репортеры для специфичных нужд проекта.
  4. Интегрировать отчёты с CI/CD для автоматического анализа.
  5. Настраивать уровни логирования и фильтры, чтобы отчёты оставались читаемыми и полезными.

Jasmine-отчётность в Protractor обеспечивает полный контроль над тестовой информацией, позволяя структурировать результаты, визуализировать ошибки и интегрировать тесты в процессы непрерывной поставки программного обеспечения.