Добро пожаловать на практикум по тестированию REST API!

Научитесь тестировать REST API на реальном проекте Transactions Manager за 1 день.

Что такое REST API?

REST (Representational State Transfer) — это архитектурный стиль для создания сетевых приложений.

API (Application Programming Interface) — интерфейс, через который разные программы обмениваются данными.

REST API позволяет клиенту (например, браузеру или приложению) общаться с сервером с помощью стандартных HTTP-запросов.

Основные HTTP-методы

Каждый метод описывает, что именно клиент хочет сделать:

МетодНазначениеПример использования
GETПолучить ресурсПолучить список товаров
POSTСоздать новый ресурсСоздать новый заказ
PUTПолностью обновить существующий ресурсОбновить профиль пользователя
PATCHЧастично обновить ресурсОбновить только email пользователя
DELETEУдалить ресурсУдалить отзыв к товару

Статус-коды HTTP-ответов

Сервер всегда возвращает код состояния, который говорит о результате обработки запроса:

 

КодКатегорияЗначение
200УспехOK — запрос выполнен успешно
201УспехCreated — ресурс успешно создан
204УспехNo Content — запрос выполнен, но без тела ответа
400Ошибка клиентаBad Request — неверный запрос
401Ошибка клиентаUnauthorized — нет авторизации
403Ошибка клиентаForbidden — нет прав на доступ
404Ошибка клиентаNot Found — ресурс не найден
500Ошибка сервераInternal Server Error — ошибка сервера

Структура HTTP-запроса

Запрос состоит из нескольких частей:

  • Метод (GET, POST и т.д.)

  • URL (адрес, куда отправляется запрос)

  • Заголовки (Headers) — метаинформация (например, Content-Type)

  • Тело запроса (Body) — данные, отправляемые на сервер (актуально для POST, PUT, PATCH)

Пример POST-запроса:

POST https://api.test.com/products
Content-Type: application/json

{
“name”: “Новый товар”,
“price”: 99.99
}

Структура HTTP-ответа:

  • Статус-код: например, 201 Created

  • Заголовки: информация о формате, длине ответа и т.д.

  • Тело ответа (Body): данные от сервера в формате JSON или XML

Пример ответа:

{
“id”: 123,
“name”: “Новый товар”,
“price”: 99.99
}

Полный цикл “Клиент отправляет запрос → Сервер отвечает

О проекте 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.

Коды ошибок
– **400 Bad Request**: Неверный формат запроса или отсутствуют обязательные параметры.
– **401 Unauthorized**: Отсутствует или недействителен API-ключ.
– **403 Forbidden**: У пользователя недостаточно прав для выполнения операции.
– **404 Not Found**: Транзакция с указанным ID не найдена.
– **500 Internal Server Error**: Внутренняя ошибка сервера.

 

Схема данных

ПолеТипОписаниеОбязательное
idUUIDУникальный идентификатор транзакцииНет (генерируется сервером)
from_userUUIDID пользователя-отправителяНет (заполняется сервером)
to_userStringEmail получателяДа
amountFloatСумма транзакцииДа
statusStringСтатус транзакции (pending, completed)Да
created_atTimestampДата и время созданияНет (генерируется сервером)

Предварительная проверка API
Перед тем как приступить к тестированию API в Postman, вы можете проверить его работу непосредственно на сайте  с помощью встроенного REST API Tester.

Для этого:

1. Перейдите в раздел **REST Tester**.
2. Выберите нужный метод (например, GET, POST, PATCH, DELETE) и эндпоинт (например, `/transactions`).
3. Нажмите кнопку **Send Request** и проверьте ответ от сервера.

Это позволит вам убедиться, что API работает корректно, прежде чем переходить к тестированию в Postman.

Создание окружения в Postman

 

  • Перейдите в раздел Environments (слева на панели).

  • Нажмите NewEnvironment.

  • Дайте имя, например: Supabase.

Добавление переменных

Добавьте следующие переменные:

VariableTypeCurrent value
apikeydefaulteyJhbGciOiJIUzI1NiIsInR5cCI6Ikp…
access_tokendefaultоставляем пустым
BASE_URLdefaulthttps://wfeyphieqwpnkkqgyvci.supabase.co
refresh_tokendefaultоставляем пустым
expires_atdefaultоставляем пустым
user_iddefaultоставляем пустым
transaction_iddefaultоставляем пустым

После успешной регистрации или авторизации  логина в ответе  автоматически получаем:

  • access_token

  • refresh_token

  • expires_at

  • user_id

Активировать окружение

  • В правом верхнем углу выберите окружение Supabase из выпадающего списка.

Тест-кейс на создание нового пользователя

Предусловия:
/auth/v1/signup

Headers: 
apikey: {{apikey}}
Content-Type: application/json

Шаги:
В теле запроса указать валидные данные:

{
    “email”: “test+user1@gmail.com”,
    “password”: “123456”
}

Ожидаемый результат:
Статус ответа 200 OK.

В ответе отображается JSON с:

{
“access_token”: “eyJhbGciOiJIUzI1NiIsI….”,
“token_type”: “bearer”,
“expires_in”: 3600,
“expires_at”: 1746959398,
“refresh_token”: “jNz4FQVNkq2g9MvhFfo5rg”,
“user”: {
“id”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”,
“aud”: “authenticated”,
“role”: “authenticated”,
“email”: “test+user1@gmail.com”,
“email_confirmed_at”: “2025-05-11T09:29:58.085353677Z”,
“phone”: “”,
“last_sign_in_at”: “2025-05-11T09:29:58.09131949Z”,
“app_metadata”: {
“provider”: “email”,
“providers”: [
“email”
]
},
“user_metadata”: {
“email”: “test+user1@gmail.com”,
“email_verified”: true,
“phone_verified”: false,
“sub”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”
},
“identities”: [
{
“identity_id”: “c58c2cb7-11c1-4fa2-8b68-25ed529f0c02”,
“id”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”,
“user_id”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”,
“identity_data”: {
“email”: “test+user1@gmail.com”,
“email_verified”: true,
“phone_verified”: false,
“sub”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”
},
“provider”: “email”,
“last_sign_in_at”: “2025-05-11T09:29:58.072334449Z”,
“created_at”: “2025-05-11T09:29:58.072406Z”,
“updated_at”: “2025-05-11T09:29:58.072406Z”,
“email”: “test+user1@gmail.com”
}
],
“created_at”: “2025-05-11T09:29:58.04943Z”,
“updated_at”: “2025-05-11T09:29:58.099853Z”,
“is_anonymous”: false
}
}

Перейти во вкладку Scripts

Post-Response

let json = pm.response.json(); // Преобразуем ответ сервера в JSON
if (json.access_token) {
    pm.environment.set(“access_token”, json.access_token); // Сохраняем access_token
    pm.environment.set(“user_id”, json.user.id);// Сохраняем user_id из объекта user
}

Тест-кейс на авторизацию под пользователем

Предусловия:

Headers: 
apikey: {{apikey}}
Content-Type: application/json

Шаги:
В теле запроса указать валидные данные:

{
    “email”: “test+user1@gmail.com”,
    “password”: “123456”
}

Ожидаемый результат:
Статус ответа 200 OK.

В ответе отображается JSON с:

{
“access_token”: “eyJhbGciOiJIUzI1NiIsImtpZCI6InArZENUNWlleld6d…”,
“token_type”: “bearer”,
“expires_in”: 3600,
“expires_at”: 1746959398,
“refresh_token”: “jNz4FQVNkq2g9MvhFfo5rg”,
“user”: {
“id”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”,
“aud”: “authenticated”,
“role”: “authenticated”,
“email”: “test+user1@gmail.com”,
“email_confirmed_at”: “2025-05-11T09:29:58.085353677Z”,
“phone”: “”,
“last_sign_in_at”: “2025-05-11T09:29:58.09131949Z”,
“app_metadata”: {
“provider”: “email”,
“providers”: [
“email”
]
},
“user_metadata”: {
“email”: “test+user1@gmail.com”,
“email_verified”: true,
“phone_verified”: false,
“sub”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”
},
“identities”: [
{
“identity_id”: “c58c2cb7-11c1-4fa2-8b68-25ed529f0c02”,
“id”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”,
“user_id”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”,
“identity_data”: {
“email”: “test+user1@gmail.com”,
“email_verified”: true,
“phone_verified”: false,
“sub”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”
},
“provider”: “email”,
“last_sign_in_at”: “2025-05-11T09:29:58.072334449Z”,
“created_at”: “2025-05-11T09:29:58.072406Z”,
“updated_at”: “2025-05-11T09:29:58.072406Z”,
“email”: “test+user1@gmail.com”
}
],
“created_at”: “2025-05-11T09:29:58.04943Z”,
“updated_at”: “2025-05-11T09:29:58.099853Z”,
“is_anonymous”: false
}
}

Перейти во вкладку Scripts

Post-Response

let json = pm.response.json();
pm.environment.set(“access_token”, json.access_token);
pm.environment.set(“user_id”, json.user.id);
pm.environment.set(“refresh_token”, json.refresh_token);
pm.environment.set(“expires_at”, String(Date.now() + json.expires_in * 1000));

Тест-кейс на создание транзакции

Название: Успешное создание транзакции с валидными данными
Предусловия:

  • Пользователь авторизован (например, test+user1@gmail.com).

  • API-интерфейс POST /rest/v1/transactions 
    доступен.

HEADERS: 
apikey:
{{apikey}}
Content-Type:
application/json
Authorization: Bearer Prefer: return=representation

Шаги:

В теле запроса указать валидные данные:

{
  “from_user”: “{{user_id}}”,
  “to_user”:   “recipient@test.com”,
  “amount”: 10.5,
  “status”: “pending”
}

Ожидаемый результат:

  • Статус ответа 201 Created.

  • В ответе отображается JSON с:

    • сгенерированным id,

    • корректным from_user (текущий пользователь),

    • полем to_user со значением "recipient@test.com",

    • полем amount со значением 10.5,

    • полем status со значением "pending",

    • полем created_at с актуальной меткой времени.

Перейти во вкладку Scripts

Post-Response

const response = pm.response.json();
pm.environment.set(“transaction_id”, response[0].id);


Что делает каждая строка:

  1. const response = pm.response.json();

    • Эта строка превращает ответ от сервера (обычно в формате JSON) в JavaScript-объект и сохраняет его в переменную response.

    • Если сервер возвращает массив объектов, response становится массивом.

  2. pm.environment.set("transaction_id", response[0].id);

    • Из этого массива берётся первый объект response[0], и из него — значение поля id.

    • Затем это значение сохраняется в переменную окружения transaction_id, чтобы можно было использовать её в других запросах как {{transaction_id}}.

Тест-кейс на редактирование транзакции

Название: Успешное обновление существующей транзакции
Предусловия:

  • Пользователь авторизован.

  • В системе уже существует транзакция с  id.

  • API /rest/v1/transactions?id=eq. поддерживает метод PATCH.

HEADERS: 
apikey:
{{apikey}}
Content-Type:
application/json
Authorization: Bearer Prefer: return=representation

Шаги:

В теле запроса указать валидные данные:

{
  “from_user”: “{{user_id}}”,
  “to_user”:   “recipient@test.com”,
  “amount”: 11.5,
  “status”: “completed”
}

Ожидаемый результат:

  • Статус ответа 200 OK.

  • В ответе отображается JSON с:

    [
        {
            “id”: “f7797fee-24c3-4578-ace1-8db281a9bb4d”,
            “from_user”: “43830d10-1c91-46f7-aaa7-573afc0b8fa5”,
            “to_user”: “recipient@test.com”,
            “amount”: 11.5,
            “status”: “completed”,
            “created_at”: “2025-05-11T10:02:40.654397+00:00”
        }
    ]
  1.  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Курсы

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