В автоматизированном тестировании на Protractor часто возникает необходимость работать с внешними источниками данных для параметризации тестов, управления тестовыми сценариями и проверки различных комбинаций входных данных. Protractor, как инструмент для тестирования Angular-приложений, интегрируется с JavaScript/TypeScript, что позволяет использовать практически любые методы работы с файлами, базами данных и API.
1. JSON-файлы JSON является одним из самых удобных форматов для хранения тестовых данных. Он легко читается и парсится в JavaScript.
Пример структуры JSON для тестов:
[
{
"username": "user1",
"password": "pass1"
},
{
"username": "user2",
"password": "pass2"
}
]
Загрузка данных в Protractor выполняется с использованием
стандартного модуля fs или через require:
const testData = require('./data/users.json');
describe('Тестирование логина', () => {
testData.forEach(user => {
it(`должен успешно авторизоваться для пользователя ${user.username}`, async () => {
await browser.get('https://example.com/login');
await element(by.id('username')).sendKeys(user.username);
await element(by.id('password')).sendKeys(user.password);
await element(by.id('loginButton')).click();
expect(await element(by.id('welcomeMessage')).isDisplayed()).toBe(true);
});
});
});
Ключевые моменты:
2. CSV-файлы Иногда удобнее хранить данные в табличном виде. CSV хорошо подходит для интеграции с Excel или внешними системами.
Пример CSV:
username,password
user1,pass1
user2,pass2
Загрузка и обработка CSV в Protractor:
const fs = require('fs');
const parse = require('csv-parse/lib/sync');
const csvData = fs.readFileSync('./data/users.csv');
const records = parse(csvData, { columns: true });
records.forEach(user => {
it(`логин для ${user.username}`, async () => {
await browser.get('https://example.com/login');
await element(by.id('username')).sendKeys(user.username);
await element(by.id('password')).sendKeys(user.password);
await element(by.id('loginButton')).click();
expect(await element(by.id('welcomeMessage')).isDisplayed()).toBe(true);
});
});
Особенности:
csv-parse).3. Работа с Excel Excel часто используется для
хранения тестовых сценариев и отчетности. Для работы с Excel можно
использовать пакет xlsx.
Пример чтения данных из Excel:
const XLSX = require('xlsx');
const workbook = XLSX.readFile('./data/users.xlsx');
const sheetName = workbook.SheetNames[0];
const sheet = workbook.Sheets[sheetName];
const data = XLSX.utils.sheet_to_json(sheet);
data.forEach(user => {
it(`логин для ${user.username}`, async () => {
await browser.get('https://example.com/login');
await element(by.id('username')).sendKeys(user.username);
await element(by.id('password')).sendKeys(user.password);
await element(by.id('loginButton')).click();
expect(await element(by.id('welcomeMessage')).isDisplayed()).toBe(true);
});
});
Преимущества:
.xls,
.xlsx.4. REST API и базы данных Внешние источники могут быть не только файловыми. Часто тесты получают данные напрямую из API или баз данных.
Пример получения данных через REST API с использованием
axios:
const axios = require('axios');
describe('Тестирование через API', () => {
let users;
beforeAll(async () => {
const response = await axios.get('https://example.com/api/users');
users = response.data;
});
users.forEach(user => {
it(`логин для ${user.username}`, async () => {
await browser.get('https://example.com/login');
await element(by.id('username')).sendKeys(user.username);
await element(by.id('password')).sendKeys(user.password);
await element(by.id('loginButton')).click();
expect(await element(by.id('welcomeMessage')).isDisplayed()).toBe(true);
});
});
});
Особенности работы с API:
async/await.Пример работы с базой данных MySQL:
const mysql = require('mysql2/promise');
describe('Тестирование с данными из базы', () => {
let connection;
let users;
beforeAll(async () => {
connection = await mysql.createConnection({host:'localhost', user:'root', database:'testdb'});
const [rows] = await connection.execute('SELECT username, password FROM users');
users = rows;
});
afterAll(async () => {
await connection.end();
});
users.forEach(user => {
it(`логин для ${user.username}`, async () => {
await browser.get('https://example.com/login');
await element(by.id('username')).sendKeys(user.username);
await element(by.id('password')).sendKeys(user.password);
await element(by.id('loginButton')).click();
expect(await element(by.id('welcomeMessage')).isDisplayed()).toBe(true);
});
});
});
Преимущества подключения к базе:
Использование внешних источников данных в Protractor позволяет создавать масштабируемые и гибкие тестовые сценарии, легко адаптировать тесты к изменяющимся требованиям и обеспечивать data-driven подход для комплексного тестирования Angular-приложений.