Jenkins интеграция

Protractor является фреймворком для end-to-end тестирования приложений на Angular и других веб-приложениях. Для успешной интеграции с Jenkins необходимо настроить окружение так, чтобы тесты могли выполняться автоматически в непрерывной интеграции.

1. Установка Node.js и Protractor

Для работы Protractor требуется Node.js. Установка выполняется через официальный сайт или менеджер пакетов nvm. После установки Node.js необходимо установить Protractor глобально:

npm install -g protractor

После установки обновляется WebDriver:

webdriver-manager update

WebDriver обеспечивает управление браузерами для выполнения тестов.

2. Настройка проекта и конфигурации Protractor

Конфигурационный файл Protractor (protractor.conf.js) содержит информацию о браузерах, тестах и параметрах выполнения. Основные элементы:

  • specs – массив путей к файлам тестов.
  • capabilities – описание браузера, например Chrome или Firefox.
  • directConnect – упрощённое подключение к WebDriver.
  • framework – выбор тестового фреймворка (например, Jasmine, Mocha).

Пример минимальной конфигурации:

exports.config = {
    framework: 'jasmine',
    seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: ['tests/*.spec.js'],
    capabilities: {
        browserName: 'chrome'
    },
    jasmineNodeOpts: {
        defaultTimeoutInterval: 30000
    }
};

3. Подготовка тестовой среды на Jenkins

Для запуска тестов Protractor в Jenkins необходимо подготовить:

  1. Установку Node.js через системные настройки Jenkins или плагин NodeJS.
  2. WebDriver Manager для управления драйверами браузеров.
  3. Браузерные зависимости, например Chrome или Firefox.

Если тесты выполняются на удалённом сервере, важно обеспечить графический режим или использовать headless-режим браузера:

capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--headless', '--disable-gpu', '--window-size=1920,1080']
    }
}

4. Создание Jenkins Pipeline для Protractor

Использование Jenkins Pipeline позволяет гибко управлять этапами сборки и тестирования. Пример декларативного Pipeline:

pipeline {
    agent any
    environment {
        NODEJS_HOME = tool name: 'NodeJS 18', type: 'NodeJS'
        PATH = "${NODEJS_HOME}/bin:${env.PATH}"
    }
    stages {
        stage('Install dependencies') {
            steps {
                sh 'npm install'
                sh 'webdriver-manager update'
            }
        }
        stage('Run Protractor tests') {
            steps {
                sh 'protractor protractor.conf.js'
            }
        }
    }
    post {
        always {
            junit 'reports/*.xml'
            archiveArtifacts artifacts: 'reports/*.xml', allowEmptyArchive: true
        }
    }
}

В этом примере:

  • Устанавливаются зависимости проекта.
  • Обновляется WebDriver.
  • Запускаются тесты.
  • Результаты тестирования сохраняются и отображаются в Jenkins через JUnit-плагин.

5. Интеграция с отчётностью и артефактами

Для анализа результатов тестов рекомендуется использовать генерацию XML-отчётов через Jasmine Reporter или Allure:

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

exports.config = {
    onPrepare: function() {
        jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({
            savePath: 'reports',
            consolidateAll: false
        }));
    }
};

С Jenkins эти отчёты можно подключить через Publish JUnit test result report, что позволяет визуализировать успехи и падения тестов.

6. Параллельное выполнение тестов

Protractor поддерживает параллельное выполнение тестов через настройку multiCapabilities или shardTestFiles:

capabilities: {
    browserName: 'chrome',
    shardTestFiles: true,
    maxInstances: 2
}

Это позволяет запускать несколько тестов одновременно, ускоряя общий цикл тестирования, особенно при большом наборе e2e-тестов.

7. Практические рекомендации для стабильной интеграции

  • Использовать headless-браузеры на CI-серверах.
  • Настроить очистку кэша и временных файлов между запусками.
  • Фиксировать версии Node.js, Protractor и браузеров для предотвращения несовместимости.
  • Логи тестов направлять в отдельную директорию для удобного анализа.

8. Особенности запуска в Docker

Для полной изоляции окружения можно использовать контейнеры Docker:

FROM node:18
RUN npm install -g protractor
RUN webdriver-manager update
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["protractor", "protractor.conf.js"]

Jenkins Pipeline может запускать контейнер вместо локальной среды, обеспечивая стабильность выполнения на любой машине.

Интеграция Protractor с Jenkins обеспечивает автоматическое выполнение e2e-тестов, быструю обратную связь о стабильности приложения и централизованное хранение результатов тестирования.