GH GambleHub

API тестілеу: Postman/Newman

1) Неге Postman/Newman

Postman - сценарийлер мен сұраулар жиынтығы үшін ыңғайлы IDE. Newman - CI/CD-де GUI-сіз сол коллекцияларды іске қосатын CLI қозғалтқышы. Олар бірге:
  • қайталанатын регрестер мен жылдам смокстер;
  • қоршаған ортаны/құпияларды параметрлеу;
  • сапа өлшемдері және машинамен оқылатын есептер.

2) Базалық модель

Жиын - ортақ скрипттері бар сұраулар мен қалталар ағашы.
Қоршаулар - dev/stage/prod үшін '{{vars}}' жиынтығы (URL, кілттер).
Pre-request script - дайындау: қолтаңбалар, белгілер, деректерді корелляциялау.
Tests - айнымалы/артефактілерді бекіту және сақтау.
Data-files - data-driven үшін CSV/JSON.
Mock/Monitor - тұрақтар және мерзімді тексерулер.

Коллекция құрылымы (ұсыным):

<API v1>
├─ _bootstrap (auth, health, seeds)
├─ Public
├─ Authenticated
│  ├─ Accounts
│  ├─ Payments
│  └─ Reports
└─ _teardown (cleanup)

3) Ауыспалы және құпия

Айнымалыларды айқын префикспен атаңыз: 'baseUrl', 'tenant', 'clientId'.
Құпияларды (парольдер, client_secret, HMAC-кілттер) CI айналасындағы ауыспалыларда сақтаңыз, репозиторийге коммиттемеңіз.
Сатып алуды пайдаланыңыз: local → collection → environment → globals (минималды мүмкін).

Қоршаған ортаның мысалы (fragment JSON):
json
{
"name": "stage-eu",
"values": [
{"key":"baseUrl","value":"https://api. stage. example. com","type":"text","enabled":true},
{"key":"tenant","value":"eu-1","type":"text","enabled":true}
]
}

4) Аутентификация: үлгілер

4. 1 OAuth2/OIDC (Client Credentials)

Pre-request:
js if (!pm.environment. get("access_token")          Date. now() > pm. environment. get("token_exp")) {
pm. sendRequest({
url: pm. environment. get("authUrl"),
method: 'POST',
header: {'Content-Type':'application/x-www-form-urlencoded'},
body: { mode:'urlencoded', urlencoded:[
{key:'grant_type',value:'client_credentials'},
{key:'client_id',value:pm. environment. get('clientId')},
{key:'client_secret',value:pm. environment. get('clientSecret')},
{key:'scope',value:'payments:read payments:write'}
]}
}, (err, res) => {
pm. environment. set("access_token", res. json(). access_token);
pm. environment. set("token_exp", Date. now()+ (res. json(). expires_in-30)1000);
});
}

Сұрауда: 'Authorization: Bearer {{access _ token}}'.

4. 2 HMAC (вебхактар/серіктестер)

Pre-request:
js const body = pm. request. body? pm. request. body. raw          '': '';
const ts = Math. floor(Date. now()/1000);
const msg = `${ts}.${body}`;
const sig = CryptoJS. HmacSHA256(msg, pm. environment. get('hmacSecret')). toString();
pm. variables. set('ts', ts);
pm. variables. set('sig', sig);

Тақырыптар: 'X-Timestamp: {{ts}}', 'X-Signature: {{sig}}'.

5) Тесттер: бекіту және корелляция

'pm. expect(...)` и `pm. test("...", fn)`.
Келесі қадамдар үшін идентификаторларды 'pm' арқылы сақтаңыз. collectionVariables. set`.

Мысалдар:
js pm. test("HTTP 200", () => pm. response. to. have. status(200));
pm. test ("Scheme is valid," () => {
const schema = pm. collectionVariables. get("schema_wallet");
pm. expect(tv4. validate(pm. response. json(), JSON. parse(schema))). to. be. true;
});
pm. test ("Contains id," () => {
const id = pm. response. json(). id;
pm. expect(id). to. be. a('string');
pm. collectionVariables. set("wallet_id", id);
});

6) Схема валидациясы (OpenAPI/JSON Schema)

JSON Schema бағдарламасын айнымалы жиында немесе жеке файлда сақтаңыз.
OpenAPI үшін: pre-request/test (ajv, tv4) - 'pm арқылы дайын либаларды пайдаланыңыз. sendRequest 'raw файлына немесе JSON инлайнына.

Схеманы сақтау үлгісі:
js pm. collectionVariables. set("schema_wallet", JSON. stringify({
"type":"object",
"required":["id","currency","balance"],
"properties":{
"id":{"type":"string"},
"currency":{"type":"string","pattern":"^[A-Z]{3}$"},
"balance":{"type":"number","minimum":0}
}
}));

7) Data-driven сценарийлер

CSV:

email, password, currency u1@example. com, P@ss1, EUR u2@example. com, P@ss2, USD

Сұрау '{{email}}', '{{currency}}' пайдаланады.

Жегу:

newman run collection. json -e stage-eu. json -d users. csv

JSON (объектілер жиыны) - күрделі кейстер/құрылымдар үшін қолайлы.

8) Теріс кейстер және орнықтылық

Жабыңыз:
  • 401/403 (токенсіз/дұрыс емес scope/рөлі).
  • 400/422 (схеманың валидациясы, міндетті өрістер, шектер).
  • 404 (BOLA/бөтен ресурс).
  • 409 (жанжалдар, идемпотенттік кілттер).
  • 429 (лимиттер) - 'Retry-After' -ді тексеріңіз.
  • 5xx - клиенттің дұрыс деградациясы мен ретрациясы.
'Retry-After' тексеру мысалы:
js pm. test ("There is Retry-After at 429," () => {
if (pm. response. code === 429) pm. expect(pm. response. headers. has('Retry-After')). to. be. true;
});

9) Теңсіздік, ретра, пагинация

'Idempotency-Key' дегенді беріңіз және қайталаудың сол 'id/status' дегенді беретініне көз жеткізіңіз.
'limit/offset '/' cursor' пагинациясын, дубликаттар мен рұқсатнамалар жобасын тестілеңіз.
Test скриптіндегі ретрайлерді имитациялау: бір кілтпен дәйекті шақырулар.

js pm. test ("Idempotent repetition," () => {
pm. sendRequest(pm. request, (err, res2) => {
pm. expect(res2. code). to. eql(pm. response. code);
pm. expect(res2. json(). id). to. eql(pm. response. json(). id);
});
});

10) Newman в CI/CD

10. 1 Іске қосу


newman run collection. json \
-e stage-eu. json \
-d data. csv \
--timeout-request 30000 \
--reporters cli,htmlextra,junit \
--reporter-htmlextra-export./reports/report. html \
--reporter-junit-export./reports/junit. xml

10. 2 GitHub Actions (үзік)

yaml
- uses: actions/setup-node@v4 with: { node-version: '20' }
- run: npm i -g newman newman-reporter-htmlextra
- run: newman run collection. json -e stage-eu. json --reporters cli,junit --reporter-junit-export reports/junit. xml
- uses: actions/upload-artifact@v4 with: { name: newman-reports, path: reports }

10. 3 Jenkins/GitLab CI

Жергілікті визуализация үшін JUnit ('--reporter-junit-export') экспорттаңыз.
Пайплайнда джобтарды бөліңіз: smoke (жылдам), regression (толық), security (негатив/шекара).

10. 4 Docker


docker run --rm -v $PWD:/etc/newman postman/newman \
run collection. json -e stage-eu. json

11) Моки және мониторинг

Mock servers Postman - майдан мен келісімшарттар үшін жылдам қақтығыстар.
Monitors - бұлттан смокстарды кезеңді айдап өту (latency, 5xx, SSL).
Репозиторийде детерминирленген шыбықтар үшін жауап үлгілерінің файлдарын сақтаңыз.

12) Тест-деректер және тазарту

Мәндерді жасаңыз/жойыңыз (_bootstrap/_teardown).
Тест нысандарын 'e2e _' және TTL префиксімен белгілеңіз.

Қайшылық өрістер үшін кездейсоқ суффикстерді пайдаланыңыз:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) «Тізе үстіндегі» өнімділігі

Postman - жүктеме құралы емес, бірақ:
  • 'pm. response. responseTime`;
  • 5-10 итерацияны айдап, р95/табалдырықты бекітіңіз;
  • ауыр перформанс-прогондар - JMeter/k6/Gatling (осы баптың шегінен тыс).

14) Оқшаулау және көп жалдау

'tenant', 'region', 'lang'; қоршауларда ауыстырыңыз.
Тестілер деректердің тенанттар арасында «ақпауын» тексеруі тиіс (BOLA-read, кросс-tenant тыйым салулар).
Өңірлік ерекшеліктерге арналған жеке коллекциялар/папкалар (лимиттер, валюталар).

15) Есептілік және артефактілер

CI: HTML репорттары, 'junit. xml ', сәтсіз жауаптар логтары (response bodies).
Slack/Teams бағдарламасына смокинг құлақтандыруларын қосыңыз.

16) Сапасы және жабыны

Жабын матрицасы:
  • CRUD per-ресурс (200/201/204 + негативтер).
  • Авторизация: рөлдер/сатып алулар/мульти-тенант.
  • Пагинация/сүзгілер/сұрыптау.
  • Теңсіздік және ретра.
  • Лимиттер: 413/414/431/429.
  • Пішімдер мен схемалар (JSON Schema/OpenAPI).
  • Интеграциялар (HMAC/mTLS бар вебхактар) - anti-replay.

17) Антипаттерндер

Теріс тестісіз бір «бақытты жол».
Коллекциядағы/репозиторийдегі ұзақ өмір сүретін токендер.
Тест-деректерді прод-деректермен араластыру.
Айқын корелляциясыз тест тәртібінің жасырын тәуелділігі.
Алпауыт data files.
JUnit/HTML → есептерінің жоқтығы.

18) Prod-дайындық чек-парағы

  • Жиындар домендерге бөлінген, '_ bootstrap/_ teardown' бар.
  • dev/stage/prod үшін орталар; CI-құпия-қоймасынан құпиялар.
  • Pre-request для auth (OAuth2/HMAC); токендер кэштеледі және ротацияланады.
  • Тесттер: оң + теріс, схемалар (JSON Schema), пагинация, 429/Retry-After.
  • Сәйкестік: 'Idempotency-Key' тексеруі, қос қоңырау баламалы.
  • Data-driven CSV/JSON, бірегейлік үшін кездейсоқ суффикстер.
  • Newman в CI: JUnit/HTML есептер, артефакттар ретінде build outputs.
  • Негізгі бағыттарға арналған моки/мониторлар; Смокстер бойынша SLA.
  • Айнымалылар, тегтер және іске қосу тәртібі бойынша құжаттама.

19) TL; DR

Сынақ логикасын Postman жинақтарында сақтаңыз, параметрлерді - қоршауларда сақтаңыз және Newman арқылы JUnit/HTML есептері арқылы CI-ге кіріңіз. Негативтерді, схемаларды, демпотенттілікті, пагинацияны және лимиттерді жабыңыз. Қадамдарды айнымалылармен корреляциялаңыз, data-driven кірістер мен жуғыштар/мониторларды пайдаланыңыз. Құпиялар - тек CI-дан, есептер - билд артефактілері.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.