GH GambleHub

API testi: Postman/Newman

1) Niyə Postman/Newman

Postman - ssenarilər və sorğu kolleksiyaları üçün əlverişli IDE. Newman - CI/CD-də GUI olmadan eyni kolleksiyaları işə salan CLI mühərriki. Birlikdə verirlər:
  • təkrarlanan reqress və sürətli smoky;
  • mühitin/sirlərin parametrləşdirilməsi;
  • keyfiyyət metrik və maşın oxunan hesabatlar.

2) Əsas model

Kolleksiya - sorğu ağacı və ümumi skriptləri olan qovluqlar.
Çevrələr - dev/stage/prod (URL, açarlar) üçün '{{vars}}' dəsti.
Pre-request script - hazırlıq: imzalar, tokenlər, məlumatların korelyasiyası.
Tests - dəyişən/artefaktların təsdiqlənməsi və saxlanması.
Data-files - data-driven run üçün CSV/JSON.
Mock/Monitor - bloklar və dövri yoxlamalar.

Kolleksiyanın strukturu (tövsiyə):

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

3) Dəyişənlər və sirlər

Dəyişənləri açıq prefiks adlandırın: 'baseUrl', 'tenant', 'clientId'.
Sirləri (şifrələr, client_secret, HMAC açarları) CI mühit dəyişənlərində saxlayın, anbarda kommitasiya etməyin.
local → collection → environment → globals (minimal mümkün).

Ətraf mühit nümunəsi (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) Autentifikasiya: şablonlar

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

Sorğuda: 'Authorization: Bearer {{access _ token}}'.

4. 2 HMAC (Webhucks/Partners)

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

Başlıqlar: 'X-Timestamp: {{ts}}', 'X-Signature: {{sig}}'.

5) Testlər: təsdiq və korelasiya

'pm istifadə edin. expect(...)` и `pm. test("...", fn)`.
Sonrakı addımlar üçün identifikatorları «pm» vasitəsilə saxlayın. collectionVariables. set`.

Nümunələr:
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) Sxem validasiyası (OpenAPI/JSON Schema)

JSON Sxemini dəyişən kolleksiyada və ya ayrı bir faylda saxlayın.
OpenAPI üçün: pre-request/test (ajv, tv4) hazır liblardan istifadə edin - 'pm vasitəsilə. sendRequest 'raw fayl və ya JSON inline.

Nümunə saxlama sxemi:
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 ssenariləri

CSV:

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

Sorğu '{{email}}', '{{currency}}' istifadə edir.

Başlanğıc:

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

JSON (obyektlər massivi) - mürəkkəb hallar/strukturlar üçün əlverişlidir.

8) Mənfi hallar və sabitlik

Örtün:
  • 401/403 (heç bir token/səhv scope/rol).
  • 400/422 (sxemin validasiyası, məcburi sahələr, sərhədlər).
  • 404 (BOLA/başqasının resursu).
  • 409 (münaqişələr, idempotent açarları).
  • 429 (limitlər) - 'Retry-After' saytını yoxlayın.
  • 5xx - düzgün deqradasiya və müştərinin retraisi.
«Retry-After» test nümunəsi:
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) İdempotentlik, retraj, paginasiya

'Idempotency-Key' verin və təkrar eyni 'id/status' verdiyinə əmin olun.
Paqinasiyanı test edin: 'limit/offset '/' cursor', dublikat və keçidlərin detalı.
Test scriptində retrajların təqlidi: eyni açarla ardıcıl zənglər.

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 Başlanğıc


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

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

Yerli vizualizasiya üçün JUnit ('--reporter-junit-export') ixrac edin.
Payplaynda jobları bölün: smoke (sürətli), regression (tam), security (mənfi/sərhədlər).

10. 4 Docker


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

11) Moki və monitorinq

Mock servers Postman - cəbhə və müqavilələr üçün sürətli dəstələr.
Monitors - buluddan (latency, 5xx, SSL) periodik tərpənmə.
Anbarda determinasiya edilmiş moklar üçün cavab nümunələrinin fayllarını saxlayın.

12) Test məlumatları və təmizləmə

Varlıqları yarat/sil (_bootstrap/_teardown).
Test obyektlərini 'e2e _' və TTL prefiksi ilə qeyd edin.

Münaqişə sahələri üçün təsadüfi şəkilçilərdən istifadə edin:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) Performans «diz»

Postman yük aləti deyil, lakin:
  • 'pm ölçün. response. responseTime`;
  • 5-10 iterasiyanı sürün və p95/eşikləri düzəldin;
  • ağır performans - JMeter/k6/Gatling (bu məqalə xaricində).

14) Lokalizasiya və multi-icarə

'tenant', 'region', 'lang' dəyişənləri; mühitdə keçid.
Testlər məlumatların tenantlar arasında «axmadığını» yoxlamalıdır (BOLA-read, cross-tenant qadağalar).
Regional xüsusiyyətlər üçün ayrı-ayrı kolleksiyalar/qovluqlar (limitlər, valyutalar).

15) Hesabat və artefaktlar

CI artefaktlarını saxlayın: HTML reports, 'junit. xml ', uğursuz cavabların qeydləri (response bodies).
Slack/Teams siqaret düşməsi bildirişlərini qoşun.

16) Keyfiyyət və əhatə

Matris örtükləri:
  • CRUD per-resurs (200/201/204 + neqativlər).
  • Authorization: rolları/cups/multi-tenant.
  • Paginasiya/filtrlər/çeşidləmə.
  • İdempotentlik və retraj.
  • Limitlər: 413/414/431/429.
  • Formatlar və sxemlər (JSON Schema/OpenAPI).
  • İnteqrasiya (HMAC/mTLS ilə vebhuk) - anti-replay.

17) Antipattern

Mənfi testlər olmadan bir «xoşbəxt yol».
Kolleksiya/anbarda uzun ömürlü tokenlər.
Test məlumatlarının prod məlumatlarla qarışdırılması.
Aşkar korelasiya olmadan test prosedurunun gizli asılılığı.
Nəhəng data files heç bir sample.
JUnit/HTML hesabatlarının olmaması → CI-də görünürlük yoxdur.

18) Prod hazırlıq yoxlama siyahısı

  • Kolleksiyalar domenlərə bölünür, var '_ bootstrap/_ teardown'.
  • dev/stage/prod üçün mühit; CI gizli saxlama sirləri.
  • Pre-request для auth (OAuth2/HMAC); tokenlər cached və rotation.
  • Testlər: müsbət + mənfi, sxemlər (JSON Schema), paqinasiya, 429/Retry-After.
  • Idempotance: 'Idempotency-Key' yoxlama, ikiqat çağırış ekvivalentdir.
  • Data-driven CSV/JSON, unikallıq üçün təsadüfi şəkilçilər.
  • CI Newman: JUnit/HTML hesabatları, artefaktlar kimi build outputs.
  • əsas marşrutlar üçün moki/monitorlar; Smokes SLA.
  • Dəyişən sənədlər, etiketlər və başlanğıc qaydası.

19) TL; DR

Testlərin məntiqini Postman kolleksiyalarında, parametrləri mühitlərdə saxlayın və Newman vasitəsilə JUnit/HTML hesabatları ilə CI-yə keçin. Neqativlər, sxemlər, idempotentlik, pozğunluq və limitləri əhatə edin. Addımları dəyişənlərlə əlaqələndirin, data-driven girişləri və moki/monitorları istifadə edin. Sirlər - yalnız CI-dən, hesabatlar - bild artefaktları.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.