Организация файловой структуры

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


Основные принципы

  1. Разделение тестов и конфигурации Файлы конфигурации должны храниться отдельно от тестов. Конфигурация Protractor (protractor.conf.js) содержит:

    • настройки браузера и среды выполнения,
    • пути к тестам и файлам спецификаций,
    • параметры запуска (например, capabilities, directConnect, framework),
    • параметры репортинга и логирования.
  2. Логическая организация тестов Тесты группируются по функциональным модулям или страницам приложения. Это облегчает навигацию и поддержку тестового покрытия. Например:

    /tests
        /login
            login.spec.js
            login.po.js
        /dashboard
            dashboard.spec.js
            dashboard.po.js
  3. Page Object Model (POM) Структура проекта должна учитывать использование POM. Для каждой страницы или компонента создаётся отдельный объект страницы (*.po.js). Это позволяет отделить логику взаимодействия с элементами UI от тестов, повышает повторное использование кода и упрощает поддержку.

  4. Утилиты и общие функции Вспомогательные функции, такие как кастомные ожидания, генерация тестовых данных или вспомогательные селекторы, должны храниться в отдельной папке /utils или /helpers. Пример:

    /utils
        waitHelper.js
        testData.js
  5. Ресурсы и конфигурационные данные Файлы с фикстурами, тестовыми данными или настройками окружения располагаются в отдельной папке /resources или /data. Это делает тесты более гибкими и позволяет быстро менять входные данные без правки кода теста.


Рекомендуемая структура проекта

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

/project-root
    /tests
        /login
            login.spec.js
            login.po.js
        /dashboard
            dashboard.spec.js
            dashboard.po.js
    /utils
        waitHelper.js
        apiHelper.js
    /data
        users.json
        config.json
    /reports
        junit/
        html/
    protractor.conf.js
    package.json

Объяснение структуры:

  • /tests – все тестовые спецификации и соответствующие Page Objects.
  • /utils – вспомогательные функции и библиотеки.
  • /data – фикстуры, JSON-конфигурации и любые внешние данные для тестов.
  • /reports – результаты выполнения тестов, отчёты и логи.
  • protractor.conf.js – центральная конфигурация Protractor.
  • package.json – зависимости проекта и скрипты запуска тестов.

Настройка конфигурации

В protractor.conf.js рекомендуется использовать явное указание всех путей и настроек:

exports.config = {
    directConnect: true,
    framework: 'jasmine',
    specs: [
        './tests/**/*.spec.js'
    ],
    capabilities: {
        browserName: 'chrome'
    },
    jasmineNodeOpts: {
        defaultTimeoutInterval: 30000
    },
    onPrepare: function () {
        browser.manage().window().maximize();
    }
};

Ключевые моменты:

  • specs использует шаблон с поддиректориями, что упрощает добавление новых тестов без изменения конфигурации.
  • onPrepare позволяет выполнить начальную настройку окружения (например, увеличение окна браузера или подключение дополнительных библиотек).

Именование файлов и соглашения

  1. Тестовые спецификации: *.spec.js Пример: login.spec.js, dashboard.spec.js
  2. Page Objects: *.po.js Пример: login.po.js, dashboard.po.js
  3. Утилиты: логично именовать по функции Пример: waitHelper.js, apiHelper.js
  4. Данные: использовать читаемые названия для JSON-файлов Пример: users.json, config.json

Единообразное именование упрощает автоматическую загрузку тестов, а также интеграцию с системами отчётности и CI/CD.


Разделение по уровням тестирования

Для крупных проектов полезно создавать несколько уровней тестов:

  • E2E тесты: проверяют весь функционал системы. Хранятся в /tests/e2e.
  • Интеграционные тесты: проверяют взаимодействие модулей. Могут располагаться в /tests/integration.
  • Компонентные тесты: проверяют отдельные компоненты или страницы. Могут храниться рядом с соответствующими Page Objects.

Такое разделение повышает управляемость и снижает время выполнения тестов, поскольку CI/CD сможет запускать только нужный набор тестов.


Организация файловой структуры в Protractor напрямую влияет на эффективность разработки и сопровождения тестов. Чёткое разделение по функциональности, использование POM, хранение утилит и данных в отдельных папках делают проект масштабируемым и удобным для командной работы.