Правильная организация файлов и папок — это важный аспект при разработке автоматизированных тестов с использованием WebdriverIO. Структура проекта должна быть ясной, логичной и удобной для масштабирования. Это помогает поддерживать проект в чистоте и улучшает работу команды. Важно понимать, как правильно разделить различные части проекта на файлы и каталоги, чтобы упростить разработку и тестирование, а также облегчить поддержку в дальнейшем.
Проект на WebdriverIO обычно состоит из нескольких ключевых папок и файлов:
/tests — основная папка для
тестов./pageobjects — папка для объектов
страниц./utils — вспомогательные утилиты и
функции./data — тестовые данные./config — конфигурационные файлы./reports — папка для отчетов./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 является основой для качественного и поддерживаемого тестирования. Структура должна быть гибкой, чтобы легко масштабироваться, но при этом понятной и логичной. Такой подход позволяет поддерживать проект в долгосрочной перспективе, снижая сложность и упрощая процесс работы как для текущих, так и для новых членов команды.