Одной из важнейших частей автоматизированного тестирования является работа с данными. Тесты, которые взаимодействуют с веб-страницами, часто нуждаются в настройке начальных данных или в проверке того, как изменения на страницах отражаются в базе данных. В этом контексте Playwright предоставляет удобные механизмы для взаимодействия с внешними системами, такими как базы данных.
В процессе тестирования с использованием Playwright можно интегрировать выполнение SQL-запросов, взаимодействовать с базой данных напрямую из тестов, а также эмулировать состояние, необходимое для проверки функционала веб-приложения.
Для работы с базой данных в рамках теста обычно используют отдельные
библиотеки и инструменты, такие как pg для PostgreSQL или
mysql2 для MySQL. Они позволяют напрямую подключаться к
базе данных, выполнять запросы и проверять, как изменяются данные в
процессе теста. Важно помнить, что это не является частью самого
Playwright, но интегрировать работу с базой данных в тесты можно
достаточно легко.
const { Client } = require('pg');
const client = new Client({
user: 'user',
host: 'localhost',
database: 'test_db',
password: 'password',
port: 5432,
});
await client.connect();
const res = await client.query('SELECT * FROM users WHERE id = $1', [1]);
console.log(res.rows[0]);
await client.end();
Этот пример демонстрирует стандартное подключение к PostgreSQL, выполнение запроса и получение данных. Такой подход может быть использован для подготовки данных перед запуском тестов или для их проверки после выполнения действий в тестах.
Вместо того чтобы подключаться к базе данных напрямую, можно взаимодействовать с ней через API, если приложение предоставляет такой доступ. В Playwright можно использовать встроенные методы для отправки HTTP-запросов, что позволяет работать с API, которое изменяет или извлекает данные из базы.
Для этого можно использовать такие библиотеки, как axios
или node-fetch, чтобы эмулировать запросы к API. Например,
после выполнения теста на веб-странице можно отправить запрос на
изменение данных и затем проверить результат.
const axios = require('axios');
async function getUser(id) {
const response = await axios.get(`http://localhost/api/users/${id}`);
return response.data;
}
async function updateUser(id, data) {
await axios.put(`http://localhost/api/users/${id}`, data);
}
// Пример использования в тесте
const user = await getUser(1);
expect(user.name).toBe('John Doe');
await updateUser(1, { name: 'Jane Doe' });
const updatedUser = await getUser(1);
expect(updatedUser.name).toBe('Jane Doe');
Такой подход позволяет комбинировать взаимодействие с веб-приложением через Playwright и проверку состояния базы данных через API. Это даёт возможность создавать более гибкие и масштабируемые тесты.
Для выполнения качественного тестирования важно иметь возможность гибко управлять данными в базе данных. Например, часто нужно подготавливать данные перед запуском теста (например, создавать записи в базе данных) или очищать их после выполнения тестов. Для этих целей можно использовать методы для вставки, обновления и удаления данных непосредственно через запросы в базу.
const { Client } = require('pg');
async function setupTestData() {
const client = new Client({
user: 'user',
host: 'localhost',
database: 'test_db',
password: 'password',
port: 5432,
});
await client.connect();
// Создание тестовой записи в базе
await client.query(
'INSERT INTO users (id, name, email) VALUES ($1, $2, $3)',
[1, 'Test User', 'testuser@example.com']
);
await client.end();
}
// Вызов функции перед тестом
beforeAll(async () => {
await setupTestData();
});
Этот код использует метод beforeAll, чтобы подготовить
данные перед началом теста. После этого данные можно использовать для
взаимодействия с веб-страницей.
После выполнения теста важно очистить базу данных, чтобы обеспечить
независимость тестов друг от друга. Для этого можно использовать методы
удаления данных, например, с помощью SQL-запросов. В Playwright также
можно использовать метод afterAll для очистки данных.
const { Client } = require('pg');
async function cleanupTestData() {
const client = new Client({
user: 'user',
host: 'localhost',
database: 'test_db',
password: 'password',
port: 5432,
});
await client.connect();
// Удаление тестовой записи
await client.query('DELETE FROM users WHERE id = $1', [1]);
await client.end();
}
// Очистка данных после теста
afterAll(async () => {
await cleanupTestData();
});
Эти функции помогают обеспечить чистоту данных, что крайне важно при проведении большого числа тестов.
В случае, когда требуется изолировать тесты от реальной базы данных, можно использовать мокирование запросов. Мокирование позволяет эмулировать ответ базы данных, что ускоряет выполнение тестов и исключает зависимости от внешних факторов, таких как состояние базы данных или доступность сервера.
Для мокирования можно использовать различные библиотеки, такие как
jest с его встроенными функциями для мокирования, или
сторонние инструменты, например, sinon.
const axios = require('axios');
jest.mock('axios');
test('проверка данных пользователя', async () => {
axios.get.mockResolvedVal ue({ data: { id: 1, name: 'Test User' } });
const user = await axios.get('http://localhost/api/users/1');
expect(user.data.name).toBe('Test User');
});
Мокирование запросов помогает изолировать тесты и избежать зависимости от реальной базы данных, что особенно полезно при тестировании сложных пользовательских сценариев.
Работа с базами данных в автоматизированных тестах с использованием Playwright позволяет значительно повысить гибкость и надежность тестов. Использование прямых запросов к базе данных, взаимодействие через API и подготовка тестовых данных помогает создавать более стабильные и быстрые тесты. Мокирование запросов и очистка базы данных после тестов позволяет избежать нежелательных последствий от изменений, что важно для обеспечения независимости тестов.