GH GambleHub

API testi: Postman/Newman

1) Nega Postman/Newman

Postman - skriptlar va soʻrovlar toʻplamlari uchun qulay IDE. Newman - CI/CD’da xuddi shu kolleksiyalarni GUIsiz ishga tushiradigan CLI dvigateli. Ular birgalikda:
  • takrorlanadigan regress va tez smoklar;
  • atrof-muhit/sirlarni parametrlashtirish;
  • sifat metrikasi va mashinada o’qiladigan hisobotlar.

2) Bazaviy model

Kolleksiya - umumiy skriptlari boʻlgan soʻrovlar va jildlar daraxti.
Muhit -’{{vars}}’uchun dev/stage/prod (URL, kalitlar) toʻplami.
Pre-request script - tayyorlash: imzolar, tokenlar, ma’lumotlar korelatsiyasi.
Tests - oʻzgaruvchan/artefaktlarni tasdiqlash va saqlash.
Data-files - data-driven uchun CSV/JSON.
Mock/Monitor - bloklar va davriy tekshiruvlar.

Kolleksiya tuzilmasi (tavsiya):

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

3) O’zgaruvchan va sirlar

Oʻzgaruvchilarni aniq prefiks deb nomlang:’baseUrl’,’tenant’,’clientId’.
Sirlarni (parollar, client_secret, HMAC-kalitlar) C o’zgaruvchan muhitda saqlang, omborxonaga qo’ymang.
Shopdan foydalaning: local → collection → environment → globals (minimal).

Atrof-muhit namunasi (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) Autentifikatsiya: namunalar

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);
});
}

Soʻrovda:’Authorization: Bearer {{access _ token}}’.

4. 2 HMAC (vebxuklar/sheriklar)

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);

Sarlavhalar:’X-Timestamp: {{ts}}’,’X-Signature: {{sig}}’.

5) Testlar: tasdiqlash va korelatsiya

’pm’ dan foydalaning. expect(...)` и `pm. test("...", fn)`.
Keyingi qadamlar uchun identifikatorlarni’pm’orqali saqlang. collectionVariables. set`.

Misollar:
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) Sxemani validatsiya qilish (OpenAPI/JSON Schema)

JSON Schemani oʻzgaruvchan toʻplamda yoki alohida faylda saqlang.
OpenAPI uchun: pre-request/test (ajv, tv4) -’pm. sendRequest’ga raw-fayl yoki JSON inline.

Sxemani saqlash namunasi:
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 stsenariylari

CSV:

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

Soʻrov’{{email}}’,’{{currency}}’dan foydalanadi.

Ishga tushirish:

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

JSON (obyektlar massivi) - murakkab keyslar/tuzilmalar uchun qulay.

8) Salbiy seyslar va barqarorlik

Yoping:
  • 401/403 (tokensiz/notoʻgʻri scope/rol).
  • 400/422 (sxemaning validatsiyasi, majburiy maydonlar, chegaralar).
  • 404 (BOLA/begona resurs).
  • 409 (mojarolar, idempotent kalitlari).
  • 429 (limitlar) -’Retry-After’ni tekshiring.
  • 5xx - mijozning to’g "ri degradatsiyasi va retrasi.
’Retry-After’ tekshirish namunasi:
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) Idempotentlik, retraylar, paginatsiya

’Idempotency-Key’ ni uzating va takrorlash bir xil’id/status’ni berishiga ishonch hosil qiling.
’limit/offset ’/’ cursor’, dublikat va ruxsatnoma detalini sinab koʻring.
Test skriptidagi retraylarni taqlid qilish: bir xil kalitli ketma-ket qoʻngʻiroqlar.

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 Ishga tushirish


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 (parcha)

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

Mahalliy vizualizatsiya uchun JUnit (’-reporter-junit-export’) ni eksport qiling.
Payplaynda joblarni ajrating: smoke (tezkor), regression (toʻliq), security (salbiy/chegaralar).

10. 4 Docker


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

11) Moq va monitoring

Mock servers Postman - front va shartnomalar uchun tezkor bloklar.
Monitors - bulutdan smoklarni davriy haydash (latency, 5xx, SSL).
Repozitoriyada determinizatsiya qilingan moklar uchun javob namunalari fayllarini saqlang.

12) Test-ma’lumotlar va tozalash

Mavjudotlarni yarating/oʻchiring (_bootstrap/_teardown).
Test ob’ektlarini’e2e _’va TTL prefiksi bilan belgilang.

Toʻqnashuv maydonlari uchun tasodifiy qoʻshimchalardan foydalaning:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) «tizzada» ishlash

Postman - yuklash vositasi emas, lekin:
  • o’lchang’pm. response. responseTime`;
  • 5-10 iteratsiyani haydab chiqaring va p95/ostonalarni qayd qiling;
  • og’ir spektakl-progonlar - JMeter/k6/Gatling (ushbu moddadan tashqari).

14) Mahalliylashtirish va ko’p ijara

Oʻzgaruvchilar’tenant’,’region’,’lang’; muhit bilan almashtiring.
Testlar ma’lumotlar tenantlar o’rtasida «oqmasligini» tekshirishi kerak (BOLA-read, kross-tenant taqiqlar).
Mintaqaviy xususiyatlarga alohida kolleksiyalar/jildlar (limitlar, valyutalar).

15) Hisobot va artefaktlar

CI: HTML reportlari,’junit. xml’, muvaffaqiyatsiz javoblar daftarlari (response bodies).
Smokaning tushishi haqida Slack/Teams xabarnomalarini ulang.

16) Sifat va qoplash

Qoplamalar matritsasi:
  • CRUD per-resurs (200/201/204 + negativlar).
  • Avtorizatsiya: rollar/skoplar/multi-tenant.
  • Paginatsiya/filtrlar/saralash.
  • Idempotentlik va retralar.
  • Limitlar: 413/414/431/429.
  • Formatlar va sxemalar (JSON Schema/OpenAPI).
  • Integratsiyalar (HMAC/mTLS bilan vebxuklar) - anti-replay.

17) Antipatternlar

Salbiy testlarsiz bitta «baxtli yo’l».
Kolleksiya/repozitoriyada uzoq umr ko’radigan tokenlar.
Test-ma’lumotlarni prod-ma’lumotlar bilan aralashtirish.
Aniq korelatsiyasiz testlar tartibining yashirin bog’liqligi.
Katta data-files.

JUnit/HTML hisobotlari yoʻq

18) Prod-tayyorlik chek-varaqasi

  • Toʻplamlar domenlarga boʻlingan, mavjud’_ bootstrap/_ teardown’.
  • dev/stage/prod uchun muhit; CI-maxfiy ombordan sirlar.
  • Pre-request для auth (OAuth2/HMAC); tokenlar keshlanadi va rotatsiya qilinadi.
  • Testlar: ijobiy + salbiy, sxemalar (JSON Schema), paginatsiya, 429/Retry-After.
  • Idempotentlik:’Idempotency-Key’tekshiruvi, ikki marta chaqirish ekvivalentdir.
  • Data-driven CSV/JSON, noyoblik uchun tasodifiy qo’shimchalar.
  • Newman in CI: JUnit/HTML hisobotlari, artefaktlar, masalan, build outputs.
  • Asosiy yo’nalishlar uchun moki/monitorlar; Smokalar boʻyicha SLA.
  • Oʻzgaruvchan hujjatlar, teglar va ishga tushirish tartibi.

19) TL; DR

Test mantig’ini Postman to’plamlarida saqlang, parametrlarni esa JUnit/HTML hisobotlari bilan Newman orqali CI’da o’tkazing. Negativlar, sxemalar, idempotentlik, paginatsiya va limitlarni qoplang. Qadamlarni oʻzgaruvchan bilan bogʻlang, data-driven kirish va moki/monitorlardan foydalaning. Sirlar faqat CI dan, hisobotlar esa Bild artefaktlaridir.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.