Перейти к основному содержимому

Практикум — проверка в Postman

Разработчику Тестировщику

Практикум, шаг 8 из 8. E2E-проверка OrderDesk. Сервисы из шага 4 и 5 должны быть запущены. Ожидаемые статусы можно заранее посмотреть в интерактивной песочнице.


Pre-request на уровне коллекции

Чтобы каждый запрос нёс трассировку, в Collection → Pre-request Script:

if (!pm.environment.get("request_id")) {
pm.environment.set("request_id", pm.variables.replaceIn("{{$guid}}"));
}
pm.request.headers.add({ key: "X-Request-Id", value: pm.environment.get("request_id") });

Окружение Postman

Создайте environment OrderDesk Local:

ПеременнаяНачальное значение
catalog_basehttp://localhost:8100
orders_basehttp://localhost:5200
api_keydev-catalog-key-change-me
access_token(пусто, заполнит тест)
product_id(пусто)
order_id(пусто)

Порядок запросов в коллекции

1. Catalog — создать товар

POST {{catalog_base}}/api/v1/products

Body (raw JSON):

{
"sku": "POSTMAN-1",
"name": "Demo product",
"price": 19.5,
"stockAvailable": 25
}

Tests (вкладка Tests):

pm.test("201 Created", () => pm.response.to.have.status(201));
const body = pm.response.json();
pm.environment.set("product_id", body.id);

2. Orders — получить JWT

POST {{orders_base}}/api/v1/auth/token

{ "username": "demo", "password": "demo" }

Tests:

pm.test("token issued", () => pm.response.to.have.status(200));
pm.environment.set("access_token", pm.response.json().access_token);

Authorization для следующих запросов: Bearer Token{{access_token}}.


3. Orders — создать заказ

POST {{orders_base}}/api/v1/orders

{
"lines": [
{ "productId": "{{product_id}}", "quantity": 2 }
]
}

Tests:

pm.test("order reserved", () => {
pm.response.to.have.status(201);
pm.expect(pm.response.json().status).to.eql("reserved");
});
pm.environment.set("order_id", pm.response.json().id);

4. Catalog — проверить остаток

GET {{catalog_base}}/api/v1/products/{{product_id}}

Ожидание: stockAvailable уменьшился на 2 (было 25 → стало 23).


5. Orders — подтвердить заказ

POST {{orders_base}}/api/v1/orders/{{order_id}}/confirm

Ожидание: 200, status: confirmed.


6. WebSocket — подписка на события

В Postman New → WebSocket Request:

ws://localhost:5200/ws/orders?access_token={{access_token}}

После подключения отправьте:

{ "v": 1, "type": "ping" }

Ответ: { "v": 1, "type": "pong" }.

Повторите запрос Confirm или Cancel в REST — в WebSocket должно прийти order.status_changed.


Негативные сценарии

#ДействиеОжидание
APOST /orders с quantity: 9999409 Conflict
BPOST /reservations без X-Api-Key (отдельный raw-запрос к catalog)401
CGET /orders без Bearer401
DОстановить catalog-api, создать заказ502

Зафиксируйте результаты в Postman Collection Runner — прогон всей цепочки одной кнопкой.


Экспорт и CI

  1. Export коллекции и environment в JSON — положите в OrderDesk/postman/.
  2. Newman:
newman run OrderDesk.postman_collection.json -e OrderDesk.local.json

REST-часть войдёт в CI; WebSocket — вручную или через отдельный скрипт (k6, websockets в Python).


Сверка с локальными сервисами

Шаг PostmanПесочница (intro)Локальный вызов
Создать товарPOST productPOST :8100/api/v1/products
JWTPOST tokenPOST :5200/api/v1/auth/token
ЗаказPOST orderPOST :5200/api/v1/orders + Bearer
502Catalog downОстановить uvicorn, повторить заказ
WS eventЛента после confirmPostman WebSocket

Collection Runner

  1. Выберите environment OrderDesk Local.
  2. Порядок папок: Catalog → Auth → Orders → Negative.
  3. В отчёте Runner все тесты должны быть зелёными; при 409 / 502 в негативной папке — ожидаемый красный статус с assert в Tests.

Итог практикума

Вы прошли полный цикл:

  1. Архитектура и границы сервисов
  2. Контракт API и OpenAPI
  3. Маппинг DTO
  4. catalog-api на Python
  5. orders-api на C#
  6. Безопасность
  7. WebSocket
  8. Postman — проверка сквозного сценария

Дальше — контейнеры (8.06), интеграционные тесты (1012) и нагрузочное тестирование (1014).

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").