GitHub Actions интеграция

GitHub Actions предоставляет мощный инструмент для организации CI/CD-процессов, включая автоматическое выполнение тестов на Protractor при каждом коммите или pull request. Интеграция Protractor с GitHub Actions позволяет гарантировать стабильность фронтенд-приложения и своевременно обнаруживать регрессии.

Создание workflow файла

Все workflow для GitHub Actions хранятся в репозитории в папке .github/workflows/. Для автоматического запуска тестов создаётся YAML-файл, например protractor-tests.yml. Основная структура файла включает:

  • name — название workflow;
  • on — триггеры запуска (push, pull_request, schedule);
  • jobs — задачи, выполняемые в рамках workflow.

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

name: Protractor Tests

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  e2e-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install dependencies
        run: npm ci

      - name: Start Selenium Server
        run: npx webdriver-manager update && npx webdriver-manager start &
        
      - name: Run Protractor tests
        run: npx protractor protractor.conf.js

Установка и настройка окружения

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

  • npm ci используется вместо npm install для стабильной установки зависимостей согласно lock-файлу.
  • webdriver-manager update скачивает последнюю версию Selenium Server и драйверов браузеров.
  • webdriver-manager start & запускает сервер в фоне, чтобы тесты могли подключаться к нему.

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

GitHub Actions поддерживает matrix-стратегию, позволяющую запускать тесты одновременно на нескольких версиях Node.js или браузеров.

Пример:

strategy:
  matrix:
    node-version: [16, 18]
    browser: [chrome, firefox]

Каждая комбинация node-version и browser будет выполняться в отдельной задаче, ускоряя проверку на совместимость с разными средами.

Логи и отчёты

Protractor интегрируется с различными репортерами (например, Jasmine Spec Reporter, Allure). Для GitHub Actions рекомендуется сохранять отчёты как артефакты, чтобы можно было анализировать результаты после завершения workflow:

- name: Upload test reports
  uses: actions/upload-artifact@v3
  with:
    name: protractor-report
    path: reports/

Эта конфигурация позволяет сохранять HTML или JSON отчёты, создаваемые тестами, в рамках workflow, доступные для скачивания через интерфейс GitHub.

Устойчивость workflow

Чтобы workflow был надёжным и не падал из-за временных проблем, можно использовать следующие приёмы:

  • Повторный запуск команд с помощью retry в Bash:
npx protractor protractor.conf.js || npx protractor protractor.conf.js
  • Задержка перед подключением к серверу WebDriver: иногда сервер требует несколько секунд для готовности, поэтому можно добавить:
sleep 5
  • Кэширование зависимостей для ускорения сборки:
- name: Cache node modules
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

Интеграция с Pull Request

Workflow можно настроить так, чтобы тесты запускались только для pull request в ветку main. Это обеспечивает автоматическую проверку изменений перед слиянием и предотвращает попадание некорректного кода в основную ветку.

on:
  pull_request:
    branches:
      - main

Использование секретов

Для тестов, требующих авторизации или внешних API, GitHub Actions позволяет безопасно хранить ключи и токены через Secrets. В workflow они доступны через переменные окружения:

env:
  API_KEY: ${{ secrets.API_KEY }}

Значение переменной можно использовать в конфигурации Protractor или в тестах для подключения к API.

Масштабирование и оптимизация

  • Разделение тестов на несколько файлов позволяет запускать их параллельно.
  • Использование headless-режима браузеров (chromeOptions: { args: ['--headless', '--disable-gpu'] }) сокращает потребление ресурсов.
  • Контейнеризация с Docker обеспечивает одинаковую среду для локальных тестов и CI.

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