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();
});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.xmlProtractor может взаимодействовать с сервисами типа 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 с внешними инструментами позволяет:
Эти методы делают Protractor гибким инструментом, способным поддерживать сложные и крупномасштабные проекты с разнообразными требованиями к качеству.