Работа с тестовыми данными является ключевым аспектом автоматизированного тестирования. В WebdriverIO организация данных и их передача в тесты осуществляется через модульность JavaScript, поддерживаемую структурой проекта. Экспорт и импорт данных позволяют не дублировать информацию, облегчая масштабирование и поддержку тестов.
Тестовые данные обычно хранятся в отдельных файлах форматов
.js, .json или .ts (для
TypeScript-проектов). Разделение данных от логики теста
обеспечивает:
Пример структуры проекта:
project/
│
├─ test/
│ ├─ specs/
│ │ └─ login.spec.js
│ └─ data/
│ ├─ users.js
│ └─ products.json
В JavaScript для организации тестовых данных используются объекты и
массивы. Для их предоставления другим модулям применяется
export.
Пример users.js:
const users = [
{ username: 'admin', password: 'admin123' },
{ username: 'user', password: 'user123' },
];
export default users;
export default позволяет импортировать объект с любым
именем.export const adminUser = { username: 'admin', password: 'admin123' };
export const regularUser = { username: 'user', password: 'user123' };
Для подключения данных в тестах используется import:
import users from '../data/users.js';
describe('Login tests', () => {
it('should login with admin credentials', async () => {
await browser.url('/login');
await $('#username').setValue(users[0].username);
await $('#password').setValue(users[0].password);
await $('button[type="submit"]').click();
await expect($('#welcome')).toHaveTextContaining('Welcome');
});
});
JSON часто используется для хранения статических тестовых данных, особенно если они нужны для нескольких тестов или модулей.
Пример products.json:
[
{ "id": 1, "name": "Laptop", "price": 1200 },
{ "id": 2, "name": "Smartphone", "price": 800 }
]
Импорт JSON в WebdriverIO возможен напрямую через import
(Node.js поддерживает JSON-импорт):
import products from '../data/products.json';
describe('Product tests', () => {
it('should display product details', async () => {
await browser.url('/products/1');
const productName = await $('#product-name').getText();
expect(productName).toBe(products[0].name);
});
});
Иногда необходимо генерировать данные во время выполнения тестов, например, уникальные логины или случайные значения. Для этого можно экспортировать функции из модулей данных:
export function generateRandomUser() {
const id = Math.floor(Math.random() * 10000);
return {
username: `user${id}`,
password: `pass${id}`
};
}
Импорт и использование:
import { generateRandomUser } from '../data/users.js';
describe('Dynamic user login', () => {
it('should register and login new user', async () => {
const newUser = generateRandomUser();
await browser.url('/register');
await $('#username').setValue(newUser.username);
await $('#password').setValue(newUser.password);
await $('button[type="submit"]').click();
await expect($('#welcome')).toHaveTextContaining('Welcome');
});
});
Для крупных проектов часто используется объединение нескольких файлов с данными через центральный модуль-агрегатор:
// data/index.js
import users from './users.js';
import products from './products.json';
export { users, products };
Импорт в тесте:
import { users, products } from '../data';
describe('Combined tests', () => {
it('should validate user and product', async () => {
console.log(users[0].username, products[1].name);
});
});
WebdriverIO поддерживает параметризованные тесты через
forEach или it.each (с дополнительными
библиотеками, например mocha-each).
Пример:
import users from '../data/users.js';
users.forEach(user => {
it(`should login as ${user.username}`, async () => {
await browser.url('/login');
await $('#username').setValue(user.username);
await $('#password').setValue(user.password);
await $('button[type="submit"]').click();
await expect($('#welcome')).toHaveTextContaining('Welcome');
});
});
Для глобальных параметров, таких как URL, таймауты, учётные данные администратора, удобно использовать отдельный конфигурационный файл:
// config.js
export default {
baseUrl: 'https://example.com',
timeout: 5000,
admin: { username: 'admin', password: 'admin123' }
};
Использование:
import config from '../config.js';
await browser.url(config.baseUrl);
await $('#username').setValue(config.admin.username);
await $('#password').setValue(config.admin.password);
Экспорт и импорт данных в WebdriverIO создают основу для масштабируемых и поддерживаемых автоматизированных тестов. Чёткая организация данных, разделение логики и динамическая генерация обеспечивают гибкость и ускоряют процесс тестирования в JavaScript-проектах.