GH GambleHub

API synagy: Postman/Newman

1) Näme üçin Postman/Newman

Postman - ssenariler we soraglar ýygyndysy üçin amatly IDE. Newman - CI/CD-de GUI-siz şol kolleksiýalary işe girizýän CLI hereketlendirijisi. Bilelikde berýärler:
  • gaýtalanýan regresler we çalt şireler;
  • gurşawyň/syrlaryň parametrlenmegi;
  • hil ölçegleri we maşyn okalýan hasabatlar.

2) Esasy model

Kolleksiýa - umumy skriptleri bolan soraglar we bukjalar agajy.
Gurşaw - dev/stage/prod (URL, açarlar) üçin '{vars}}' toplumy.
Pre-request script - taýynlyk: gollar, bellikler, maglumatlaryň korelýasiýasy.
Tests - üýtgeýän/artefaktlary tassyklamak we saklamak.
Data-files - Data-driven run üçin CSV/JSON.
Mock/Monitor - gabyklar we döwürleýin barlaglar.

Kolleksiýanyň gurluşy (maslahat):

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

3) Üýtgeýjiler we syrlar

Üýtgeýjileri aç-açan prefiks diýip atlandyryň: 'baseUrl', 'tenant', 'clientId'.
Syrlary (parollar, client_secret, HMAC-açarlar) CI gurşaw üýtgeýjilerinde saklaň, repozitoriýa jemlemäň.
Satyn alyň: local → collection → environment → globals (iň az mümkin).

Gurşaw mysaly (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) Tassyklamak: ş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);
});
}

Soralanda: 'Authorization: Bearer {{access _ token}}'.

4. 2 HMAC (webhuklar/hyzmatdaşlar)

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

Sözbaşylar: 'X-Timestamp: {{ts}}', 'X-Signature: {{sig}}'.

5) Synaglar: tassyklamalar we korelýasiýa

'pm' ulanyň. expect(...)` и `pm. test("...", fn)`.
"pm" arkaly indiki ädimler üçin kesgitleýjileriňizi saklaň. collectionVariables. set`.

Mysal üçin:
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) Shemany tassyklamak (OpenAPI/JSON Shema)

JSON Schema-ny üýtgeýän kolleksiýada ýa-da aýratyn faýl bilen saklaň.
OpenAPI üçin: taýýar libalary pre-request/test (ajv, tv4) - 'pm. sendRequest 'raw faýlyna ýa-da JSON lineine.

Shemany saklamagyň mysaly:
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 ssenarileri

CSV:

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

'{{email}}', '{{currency}}' ulanýar.

Başla:

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

JSON (obýektleriň toplumy) - çylşyrymly ýagdaýlar/gurluşlar üçin amatly.

8) Negatiw ýagdaýlar we durnuklylyk

Örtüň:
  • 401/403 (belliksiz/nädogry skope/rol).
  • 400/422 (shemany tassyklamak, hökmany meýdanlar, çäkler).
  • 404 (BOLA/keseki çeşme).
  • 409 (gapma-garşylyklar, idempotent açarlary).
  • 429 (çäkler) - 'Retry-After' -i barlaň.
  • 5xx - müşderiniň dogry pese gaçmagy we retrasy.
'Retry-After' barlagynyň mysaly:
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, retralar, paginasiýa

'Idempotency-Key' -ni beriň we şol bir 'id/status' -y berýändigine göz ýetiriň.
'limit/offset '/' cursor', dublikatlaryň we geçişleriň jikme-jikligini synagdan geçiriň.
Synag skriptindäki retraýlary simulýasiýa etmek: şol bir açar bilen yzygiderli jaňlar.

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şlamak


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 (bölek)

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

Milli wizualizasiýa üçin JUnit ('--reporter-junit-export') eksport ediň.
Paýplaynda joblary bölüň: smoke (çalt), regression (doly), security (negatiw/serhet).

10. 4 Docker


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

11) Moki we gözegçilik

Mock servers Postman - front we şertnamalar üçin çalt bloklar.
Monitors - bulutdan (latency, 5xx, SSL) smokalaryň wagtal-wagtal geçmegi.
Repozitoriýada kesgitlenen moklar üçin jogap mysallarynyň faýllaryny saklaň.

12) Synag maglumatlary we arassalamak

Mazmuny dörediň/aýyryň (_bootstrap/_teardown).
Synag obýektlerini 'e2e _' we TTL prefiksi bilen belläň.

Gapma-garşylykly ýerler üçin tötänleýin goşulmalary ulanyň:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) Öndürijilik "dyzynda"

Postman ýük guraly däl, ýöne:
  • 'pm ölçäň. response. responseTime`;
  • 5-10 iterasiýany sürüň we p95/bosagany düzüň;
  • agyr çykyş-geçişler - JMeter/k6/Gatling (bu makalanyň daşynda).

14) Lokalizasiýa we köp kärende

Üýtgeýjiler 'tenant', 'region', 'lang'; gurşawda çalşyň.
Synaglar maglumatlaryň tenantlaryň arasynda "akmaýandygyny" barlamaly (BOLA-read, cross-tenant gadaganlyklar).
Sebit aýratynlyklary üçin aýry-aýry kolleksiýalar/bukjalar (çäkler, walýutalar).

15) Hasabat we artefaktlar

CI: HTML habarlaryny saklaň, 'junit. xml ', şowsuz jogaplar (response bodies).
"Slack/Teams" yz habarnamalaryny birikdiriň.

16) Hili we ýapylmagy

Örtük matrisi:
  • CRUD per-resurs (200/201/204 + negatiwler).
  • Awtorizasiýa: rollar/satyn almalar/multi-tenant.
  • Paginasiýa/süzgüçler/sortlamak.
  • Idempotentlik we retra.
  • Çäkler: 413/414/431/429.
  • Formatlar we shemalar (JSON Schema/OpenAPI).
  • Integrasiýa (HMAC/mTLS bilen webhuklar) - anti-replay.

17) Antipatternler

Negatiw synaglarsyz bir "bagtly ýol".
Kolleksiýada/repozitoriýada uzak ömürli tokenler.
Synag maglumatlaryny nusga maglumatlary bilen garyşdyrmak.
Aç-açan korelýasiýa bolmazdan synaglaryň tertibine gizlin garaşlylyk.
Ullakan data files.
JUnit/HTML hasabatlarynyň ýoklugy → CI-de görünmeýär.

18) Prod-taýynlyk çek-sanawy

  • Kolleksiýalar '_ bootstrap/_ teardown' bar.
  • dev/stage/prod üçin gurşaw; CI-gizlin ammardan syrlar.
  • Pre-request для auth (OAuth2/HMAC); bellikler kesilýär we aýlanýar.
  • Synaglar: oňyn + negatiw, shemalar (JSON Shema), paginasiýa, 429/Retry-After.
  • Idempotentlik: 'Idempotency-Key' barlagy, goşa çagyryşa deňdir.
  • Data-driven CSV/JSON, üýtgeşiklik üçin tötänleýin goşulmalar.
  • CI-de Newman: JUnit/HTML hasabatlary, artefaktlar build outputs.
  • Esasy ugurlar üçin moki/monitorlar; SLA.
  • Üýtgeýjiler, bellikler we işe başlamak tertibi boýunça resminamalar.

19) TL; DR

Synaglaryň logikasyny Postman kolleksiýalarynda saklaň, parametrleri gurşawda saklaň we JUnit/HTML hasabatlary bilen Newman arkaly CI-de geçiň. Negatiwleri, shemalary, idempotentligi, paginasiýany we çäkleri ýapyň. Ädimleriňizi üýtgeýän ädimler bilen baglanyşdyryň, data-driven girelgelerini we mok/monitorlary ulanyň. Syrlar - diňe CI-den, hasabatlar - bild artefaktlary.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.