Тестируем REST API на реальном проекте с использованием Playwright и TypeScript

Научитесь писать автотесты используя Playwright на Typescript

О проекте Transactions Manager API

Проект для тестирования API управления финансовыми транзакциями.

Вы будете писать автотести для эндпоинтов для операций CRUD, аутентификации и обработки ошибок.

Ссылка: https://transactionsmanagerapi.netlify.app/

Transaction Manager — веб-приложение для управления финансовыми транзакциями

Приложение предоставляет пользователям возможность:

  • Создавать, просматривать, редактировать и удалять транзакции

  • Следить за текущим состоянием операций (в ожидании, завершены, неудачные)

  • Отслеживать общую сумму отправленных и полученных средств

  • Использовать встроенный интерфейс для тестирования API-запросов (REST Tester)

Документация по API

Перед тестированием проекта давайте ознакомимся с документацией. 
Этот API предоставляет функциональность для управления финансовыми транзакциями между пользователями в приложении. Поддерживаются операции создания, получения, обновления и удаления транзакций. 

Версия: 1.0.0

Аутентификация 
Для доступа к API требуется API-ключ, который можно получить в личном кабинете  после регистрации пользователя. Ключ передается в заголовке Authorization: Authorization: Bearer [apikey].
Если ключ отсутствует или недействителен, сервер вернет ошибку 401 Unauthorized.

Базовая структура Playwright + TypeScript + Page Object для проверки создания пользователя, логина и создания транзакции через REST API.

Шаг 1: Установка Node.js

Перейдите на официальный сайт: https://nodejs.org

Загрузите LTS-версию (рекомендуемую).

Установите Node.js (включая npm — Node Package Manager).

Проверьте установку в терминале (PowerShell, Terminal, Bash):
node -v
npm -v

Шаг 2: Установка Git (для Windows)

Загрузите Git: https://git-scm.com/downloads

Установите Git, оставляя настройки по умолчанию.

Проверьте установку:
git –version

Шаг 3: Установка Visual Studio Code

Скачать: https://code.visualstudio.com

Установите VS Code.

Шаг 4: Инициализация проекта

Создание проекта playwright-tests

Шаг 5: Установка Playwright из TypeScript

npm init playwright@latest

Шаг 6: Создание Page Object структуры

/tests
└── api
├── pages
│ ├── auth.api.ts
│ └── transaction.api.ts
├── utils
│ └── types.ts
├── create-user.spec.ts
├── login-user.spec.ts
└── create-transaction.spec.ts
/playwright.config.ts

types.ts – описание типов

export interface AuthResponse {
access_token: string;
refresh_token: string;
expires_at: number;
user: {
id: string;
email: string;
};
}

export interface TransactionResponse {
id: string;
from_user: string;
to_user: string;
amount: number;
status: string;
created_at: string;
}

auth.api.ts – API Page Object для автоматизации

import { request } from ‘@playwright/test’;
import { AuthResponse } from ‘../utils/types’;

const BASE_URL = process.env.BASE_URL || ‘https://wfeyphieqwpnkkqgyvci.supabase.co’;
const API_KEY = process.env.API_KEY || ‘eyJhbGciOiJIUzI1NiIsInR5cCI…’;

export class AuthAPI {
static async registerUser(email: string, password: string): Promise<AuthResponse> {
const context = await request.newContext();
const response = await context.post(`${BASE_URL}/auth/v1/signup`, {
headers: {
apikey: API_KEY,
‘Content-Type’: ‘application/json’
},
data: { email, password }
});

return response.json();
}

static async loginUser(email: string, password: string): Promise<AuthResponse> {
const context = await request.newContext();
const response = await context.post(`${BASE_URL}/auth/v1/token?grant_type=password`, {
headers: {
apikey: API_KEY,
‘Content-Type’: ‘application/json’
},
data: { email, password }
});

return response.json();
}
}

transaction.api.ts – Page Object для транзакций

import { request } from ‘@playwright/test’;
import { TransactionResponse } from ‘../utils/types’;

const BASE_URL = process.env.BASE_URL || ‘https://wfeyphieqwpnkkqgyvci.supabase.co’;
const API_KEY = process.env.API_KEY || ‘eyJhbGciOiJIUzI1NiIsInR5cCI…’;

export class TransactionAPI {
static async createTransaction(token: string, fromUser: string): Promise<TransactionResponse> {
const context = await request.newContext();
const response = await context.post(`${BASE_URL}/rest/v1/transactions`, {
headers: {
apikey: API_KEY,
Authorization: `Bearer ${token}`,
Prefer: ‘return=representation’,
‘Content-Type’: ‘application/json’
},
data: {
from_user: fromUser,
to_user: ‘recipient@test.com’,
amount: 10.5,
status: ‘pending’
}
});

return response.json();
}
}

create-user.spec.ts – тест создания пользователя

import { test, expect } from ‘@playwright/test’;
import { AuthAPI } from ‘./pages/auth.api’;

test(‘Пользователь успешно регистрируется’, async () => {
const email = `test+${Date.now()}@gmail.com`;
const password = ‘123456’;

const response = await AuthAPI.registerUser(email, password);

expect(response.access_token).toBeTruthy();
expect(response.user.email).toBe(email);
});

login-user.spec.ts – тест логина

import { test, expect } from ‘@playwright/test’;
import { AuthAPI } from ‘./pages/auth.api’;

test(‘Пользователь успешно авторизуется’, async () => {
const email = ‘test+user1@gmail.com’;
const password = ‘123456’;

const response = await AuthAPI.loginUser(email, password);

expect(response.access_token).toBeTruthy();
expect(response.user.email).toBe(email);
});

create-transaction.spec.ts – создание транзакций

import { test, expect } from ‘@playwright/test’;
import { AuthAPI } from ‘./pages/auth.api’;
import { TransactionAPI } from ‘./pages/transaction.api’;

test(‘Успешное создание транзакции’, async () => {
const email = ‘test+user1@gmail.com’;
const password = ‘123456’;

const auth = await AuthAPI.loginUser(email, password);
const transaction = await TransactionAPI.createTransaction(auth.access_token, auth.user.id);

expect(transaction.to_user).toBe(‘recipient@test.com’);
expect(transaction.amount).toBe(10.5);
expect(transaction.status).toBe(‘pending’);
expect(transaction.created_at).toBeTruthy();
});

Вы можете скачать коллекцию в формате JSON и импортировать её в Postman.

Задания для самостоятельной работы

Получение транзакции по ID

Цель: Научиться отправлять GET-запрос на получение одной транзакции по id.

Получение списка всех транзакций

Цель: Получить массив всех созданных транзакций.

Удаление транзакции

Цель: Научиться удалять транзакции по ID.

Больше тест-кейсов по созданию/редактированию транзакций

Поддержка и вопросы

Если вам требуется какая-либо поддержка или у вас возникли дополнительные вопросы, не стесняйтесь связаться с нами – мы готовы быстро оказать вам помощь.

Через чат-бот

Часто задаваемые вопросы

Коллекция в Postman — это набор API-запросов, сгруппированных по смыслу. Она упрощает тестирование и автоматизацию работы с API.

Скачайте файл коллекции в формате .json, откройте Postman, нажмите Import, выберите файл и нажмите Open.

Да, после импорта вы можете изменять запросы, добавлять новые, сохранять переменные и делиться коллекцией с коллегами.

После завершения практикума вы сможете продолжить обучение на углублённом месячном курсе по REST API.

Мы также присутствуем в социальных сетях! Подписывайтесь на нас и получайте последние новости, акции, скидки, бесплатные тренинги и участие в марафонах.
Будем рады видеть вас в нашем сообществе!

Курсы

Публичная оферта. Авторское право © 2024 Школа подготовки тестировщиков