Организация файлов и папок

Правильная организация файлов и папок — это важный аспект при разработке автоматизированных тестов с использованием WebdriverIO. Структура проекта должна быть ясной, логичной и удобной для масштабирования. Это помогает поддерживать проект в чистоте и улучшает работу команды. Важно понимать, как правильно разделить различные части проекта на файлы и каталоги, чтобы упростить разработку и тестирование, а также облегчить поддержку в дальнейшем.

Основная структура проекта

Проект на WebdriverIO обычно состоит из нескольких ключевых папок и файлов:

  1. /tests — основная папка для тестов.
  2. /pageobjects — папка для объектов страниц.
  3. /utils — вспомогательные утилиты и функции.
  4. /data — тестовые данные.
  5. /config — конфигурационные файлы.
  6. /reports — папка для отчетов.
  7. /node_modules — стандартная папка для зависимостей проекта.

Каждая из этих папок выполняет свою роль и содержит соответствующие файлы, обеспечивая четкость и логику в структуре.

Папка tests

Папка tests является основным местом, где хранятся все тесты. Тесты могут быть сгруппированы по различным признакам, например, по функциональности или типу тестирования.

Типичная структура папки tests:

/tests
  /login
    login.spec.js
  /signup
    signup.spec.js
  /checkout
    checkout.spec.js

Каждая подкатегория может содержать несколько файлов тестов, каждый из которых будет отвечать за определенные проверки на странице. Такая структура помогает быстро ориентироваться в проекте и находить нужные тесты.

Папка pageobjects

В папке pageobjects хранятся объекты страниц, которые представляют собой абстракцию веб-страниц, с которыми взаимодействуют тесты. Каждый объект страницы описывает элементы интерфейса и действия с ними. Структура этой папки будет зависеть от количества и типа страниц в вашем проекте.

Пример структуры:

/pageobjects
  /loginPage.js
  /homePage.js
  /checkoutPage.js

В каждом объекте страницы хранятся элементы (например, поля ввода или кнопки) и методы для взаимодействия с ними. Такая абстракция помогает поддерживать код тестов чистым и облегчает изменение тестов при обновлении интерфейса приложения.

Пример объекта страницы:

class LoginPage {
    get usernameField() {
        return $('#username');
    }

    get passwordField() {
        return $('#password');
    }

    get loginButton() {
        return $('#loginButton');
    }

    async login(username, password) {
        await this.usernameField.setValue(username);
        await this.passwordField.setValue(password);
        await this.loginButton.click();
    }
}

module.exports = new LoginPage();

Папка utils

Папка utils используется для хранения вспомогательных функций, которые могут быть полезны в различных частях проекта. Это могут быть такие утилиты, как генераторы случайных данных, функции для работы с временем, логгеры и т. п.

Пример структуры:

/utils
  /randomUtils.js
  /dateUtils.js

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

// randomUtils.js
function generateRandomString(length = 8) {
    return Math.random().toString(36).substring(2, 2 + length);
}

module.exports = { generateRandomString };

Папка data

В папке data хранятся тестовые данные, которые могут быть использованы для различных сценариев тестирования. Это могут быть JSON файлы, которые содержат различные наборы данных для заполнения форм, проверки отображения информации или работы с API.

Пример структуры:

/data
  /users.json
  /products.json

Пример тестовых данных:

{
    "users": [
        { "username": "user1", "password": "password1" },
        { "username": "user2", "password": "password2" }
    ]
}

Папка config

Папка config содержит все конфигурационные файлы проекта. Один из самых важных файлов — это конфигурация WebdriverIO (wdio.conf.js), которая отвечает за настройки окружения, запуск тестов, выбранные репортеры и другие параметры.

Пример структуры:

/config
  wdio.conf.js
  /screenshots
  /logs

Файл wdio.conf.js — это основной конфигурационный файл, где настраиваются параметры для запуска тестов:

exports.config = {
    runner: 'local',
    specs: ['./tests/**/*.spec.js'],
    capabilities: [{
        browserName: 'chrome',
    }],
    logLevel: 'info',
    baseUrl: 'https://example.com',
    waitforTimeout: 10000,
};

В зависимости от размера проекта, конфигурационные файлы могут быть разделены на несколько файлов, например, отдельные файлы для разных сред (dev, prod).

Папка reports

Отчеты и логи, генерируемые в процессе тестирования, обычно сохраняются в папке reports. В эту папку могут быть выведены отчеты о выполнении тестов в формате HTML, JSON или других. Такие отчеты содержат информацию о том, какие тесты прошли успешно, какие нет, а также ошибки, возникшие в процессе тестирования.

Пример структуры:

/reports
  /html
  /json

Генерация отчетов осуществляется с помощью репортеров, указанных в конфигурации WebdriverIO.

Работа с версиями и совместная разработка

Когда проект становится более крупным и над ним работает несколько разработчиков, важно следить за чистотой структуры и актуальностью всех данных. Для этого используется система контроля версий (например, Git). Папка node_modules обычно добавляется в .gitignore, так как она содержит установленные зависимости, которые могут быть восстановлены с помощью npm install.

Рекомендуется также использовать общие соглашения по именованию файлов и папок, чтобы в проекте не возникало путаницы. Например, можно договориться о том, что все тесты для регистрации будут храниться в папке tests/login, а все тесты для оформления заказа — в tests/checkout.

Структура проекта для крупных приложений

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

  • /services — для работы с API.
  • /fixtures — для хранения предварительно подготовленных данных, которые используются для мокирования ответов API.
  • /screenshots — для хранения скриншотов, сделанных во время тестов (например, при неудачных тестах).

Пример расширенной структуры:

/tests
  /login
    login.spec.js
  /checkout
    checkout.spec.js
  /profile
    profile.spec.js
/pageobjects
  loginPage.js
  checkoutPage.js
/utils
  randomUtils.js
/config
  wdio.conf.js
  /dev
  /prod
/data
  users.json
  products.json
/services
  apiService.js
/fixtures
  mockResponses.js
/reports
  /html
  /json
/screenshots

Заключение

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