Интеграция с третьесторонними инструментами

Protractor является мощным инструментом для автоматизированного тестирования Angular и AngularJS приложений, однако его эффективность значительно возрастает при интеграции с внешними библиотеками и инструментами. Такая интеграция позволяет расширять функциональные возможности, улучшать управление тестами и повышать стабильность тестового процесса.


Использование фреймворков для отчетности

Allure Report и ExtentReports — популярные библиотеки для генерации визуальных отчетов о выполнении тестов.

  • Allure Report: Для интеграции требуется установка пакета allure-commandline и соответствующих адаптеров для Jasmine или Mocha. Конфигурация включает добавление allureReporter в protractor.conf.js:

    const { JasmineAllureReporter } = require('jasmine-allure-reporter');
    
    exports.config = {
        framework: 'jasmine',
        onPrepare: function() {
            jasmine.getEnv().addReporter(new JasmineAllureReporter({
                resultsDir: 'allure-results'
            }));
        }
    };

    После выполнения тестов можно генерировать отчет командой:

    allure generate allure-results --clean
    allure open

    Основные преимущества: визуальное отображение шагов теста, скриншотов и вложений, интеграция с CI/CD.

  • ExtentReports: Применяется через Node.js адаптер. Позволяет создавать детализированные отчеты с интерактивными графиками. Пример интеграции:

    const Extent = require('extent-reports');
    const reporter = new Extent.Report('reports/extent.html');
    
    beforeAll(() => {
        reporter.start();
    });
    
    afterAll(() => {
        reporter.end();
        reporter.flush();
    });

Взаимодействие с системами CI/CD

Protractor легко интегрируется с Jenkins, GitLab CI, Azure DevOps и другими системами непрерывной интеграции.

  • Jenkins: Конфигурация тестов осуществляется через npm scripts или прямой вызов protractor conf.js. Для хранения результатов тестирования и логов рекомендуется использовать плагины типа Allure Jenkins Plugin. Пример pipeline:

    pipeline {
        agent any
        stages {
            stage('Install dependencies') {
                steps {
                    sh 'npm install'
                }
            }
            stage('Run Tests') {
                steps {
                    sh 'npx protractor protractor.conf.js'
                }
            }
            stage('Publish Reports') {
                steps {
                    allure includeProperties: false, jdk: '', results: [[path: 'allure-results']]
                }
            }
        }
    }
  • GitLab CI: Возможна генерация отчетов в формате JUnit XML для последующей интеграции с GitLab Test Reports:

    test:
      image: node:18
      script:
        - npm install
        - npx protractor protractor.conf.js --result-format junit
      artifacts:
        reports:
          junit: report.xml

Интеграция с инструментами визуального тестирования

Protractor может взаимодействовать с сервисами типа Applitools Eyes, что позволяет проводить автоматическое сравнение визуального состояния страницы.

Пример подключения:

const eyes = require('@applitools/eyes-protractor');

exports.config = {
    framework: 'jasmine',
    onPrepare: async () => {
        await eyes.open(browser, 'Demo App', 'Home Page Test');
    },
    onComplete: async () => {
        await eyes.close();
    }
};

Преимущество: обнаружение визуальных регрессий, которых невозможно выявить простым DOM-тестированием.


Работа с базами данных и внешними сервисами

Для проверки корректности работы приложения иногда необходимо взаимодействовать с базой данных или внешними API.

  • MySQL/PostgreSQL: можно использовать пакеты mysql2 или pg. Пример запроса из теста:

    const mysql = require('mysql2/promise');
    
    it('should verify data in database', async () => {
        const connection = await mysql.createConnection({host: 'localhost', user: 'root', database: 'test'});
        const [rows] = await connection.execute('SELECT * FROM users WHERE id = ?', [1]);
        expect(rows[0].name).toBe('John Doe');
        await connection.end();
    });
  • API тестирование: интеграция с axios или supertest позволяет проверять состояние внешних сервисов до или после UI-тестов. Пример:

    const axios = require('axios');
    
    it('should validate API response', async () => {
        const response = await axios.get('https://api.example.com/data');
        expect(response.status).toBe(200);
        expect(response.data).toHaveProperty('items');
    });

Параллельное выполнение и балансировка нагрузки

Для ускорения тестирования Protractor интегрируется с Selenium Grid или облачными сервисами BrowserStack и Sauce Labs.

  • Настройка Selenium Grid:

    exports.config = {
        seleniumAddress: 'http://localhost:4444/wd/hub',
        capabilities: {
            browserName: 'chrome',
            shardTestFiles: true,
            maxInstances: 5
        }
    };

    Это позволяет запускать несколько тестов одновременно на разных браузерах и платформах, уменьшая общее время тестирования.

  • Cloud-сервисы:

    exports.config = {
        capabilities: {
            browserName: 'chrome',
            browserstack.user: 'USERNAME',
            browserstack.key: 'ACCESS_KEY'
        }
    };

    Доступ к широкому спектру платформ и браузеров без необходимости локальной инфраструктуры.


Интеграция с системами отслеживания ошибок

Protractor может быть подключен к JIRA, Sentry, BugSnag для автоматической регистрации найденных багов.

Пример отправки ошибки в Sentry:

const Sentry = require('@sentry/node');

Sentry.init({ dsn: 'YOUR_SENTRY_DSN' });

afterEach(async () => {
    if (jasmine.getEnv().currentSpec.failedExpectations.length > 0) {
        Sentry.captureMessage('UI Test failed', {
            level: 'error',
            extra: { spec: jasmine.getEnv().currentSpec.description }
        });
    }
});

Такой подход обеспечивает мгновенное уведомление команды о критических сбоях.


Выводы по интеграции

Сочетание Protractor с внешними инструментами позволяет:

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

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