Фикстуры и хелперы
Кастомные Playwright фикстуры для аутентификации и утилиты валидации API ответов.
Фикстуры
auth.fixture.ts
Фикстура для аутентифицированных API тестов. Расширяет стандартный test из @playwright/test.
Предоставляет:
authToken— JWT токен пользователя (черезPOST /api/auth/sign-in)authenticatedRequest—APIRequestContextс заголовкомAuthorization: Bearer <token>
import { test as base } from "@playwright/test";
import { environment } from "../../src/environments/environment";
export const test = base.extend<{ authToken: string; authenticatedRequest: APIRequestContext }>({
authToken: async ({ request }, use) => {
const response = await request.post(`${environment.apiBaseUrl}/api/auth/sign-in`, {
data: {
email: environment.testUserEmail,
password: environment.testUserPassword
}
});
const body = await response.json();
await use(body.data.accessToken);
},
authenticatedRequest: async ({ playwright, authToken }, use) => {
const context = await playwright.request.newContext({
baseURL: environment.apiBaseUrl,
extraHTTPHeaders: { Authorization: `Bearer ${authToken}` }
});
await use(context);
await context.dispose();
}
});Использование в тестах:
import { expect, test } from "../fixtures/auth.fixture";
test("GET /api/companies", async ({ authenticatedRequest }) => {
const response = await authenticatedRequest.get("/api/companies");
expect(response.ok()).toBe(true);
});admin-auth.fixture.ts
Аналогичная фикстура для admin тестов с отдельными credentials.
Предоставляет:
adminToken— JWT токен администратора (черезPOST /api/admin/auth/sign-in)adminRequest—APIRequestContextс admin Bearer токеном
Использование:
import { expect, test } from "../fixtures/admin-auth.fixture";
test("GET /api/admin/users", async ({ adminRequest }) => {
const response = await adminRequest.get("/api/admin/users");
expect(response.ok()).toBe(true);
});Хелперы
api.helper.ts
Утилиты для валидации структуры API ответов.
expectSuccessResponse(response)
Проверяет успешный ответ и возвращает body.data:
const data = await expectSuccessResponse(response);
// Проверяет: response.ok() && body.success === true
// Возвращает: body.dataexpectPaginatedResponse(response)
Проверяет пагинированный ответ:
const data = await expectPaginatedResponse(response);
// Проверяет: response.ok() && body.success === true
// Проверяет наличие: data, totalCount, page
// Возвращает: bodyexpectErrorResponse(response, statusCode)
Проверяет ошибочный ответ с конкретным HTTP статусом:
await expectErrorResponse(response, 401);
// Проверяет: response.status() === 401createResource(request, path, data) / deleteResource(request, path)
Хелперы для создания и удаления ресурсов:
const created = await createResource(authenticatedRequest, "/api/companies", { name: "Test" });
await deleteResource(authenticatedRequest, `/api/companies/${created.id}`);Setup
auth.setup.ts
Playwright setup-проект для browser аутентификации. Выполняется перед client тестами.
Шаги:
- Открывает
/auth/sign-inв Chromium - Заполняет поля email и password из environment
- Нажимает кнопку входа
- Ожидает навигацию (редирект с
/auth/) - Сохраняет
storageStateвplaywright/.auth/user.json
storageState
Файл playwright/.auth/user.json содержит cookies и localStorage после авторизации. Он автоматически подключается ко всем client тестам через настройку storageState в playwright.config.ts.
Следующие шаги
- Конфигурация — настройка Playwright
- CI/CD — автоматизация