GH GambleHub

Testarea API: Poștaș/Newman

1) De ce poștaș/Newman

Poștașul este un IDE la îndemână pentru scripturi și colecții de interogări. Newman este un motor CLI care rulează aceleași colecții fără GUI în CI/CD. Împreună dau:
  • regresii repetabile și fumuri rapide;
  • parametrizarea mediilor/secretelor;
  • măsurători de calitate și rapoarte care pot fi citite automat.

2) Modelul de bază

Colectarea - un arbore de interogări și foldere cu scripturi comune.
Medii - setați „{{vars}}” pentru dev/stage/prod (URL, chei).
Script pre-cerere - pregătirea: semnături, token-uri, corelarea datelor.
Teste - afirmații și conservarea variabilelor/artefactelor.
Fișiere de date - CSV/JSON pentru rularea bazată pe date.
Mock/Monitor - efective și controale periodice.

Structura colectării (recomandare):

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

3) Variabile și secrete

Consultați variabilele ca prefix explicit: „baseUrl',” chiriaș „,” clientId'.
Păstrați secrete (parole, client_secret, chei HMAC) în variabilele de mediu CI, nu se angajeze la depozit.
Utilizați domeniul de aplicare: colectarea → locale → mediu → globale.

Exemplu de mediu (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) Autentificare: șabloane

4. 1 OAuth2/OIDC (acreditări clienți)

Cerere prealabilă:
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);
});
}

În cerere: „Autorizație: Purtător {{access _ token}}”.

4. 2 HMAC (Webhooks/Parteneri)

Cerere prealabilă:
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);

Titluri: 'X-Timestamp: {{ts}}', 'X-Signature: {{dig}}'.

5) Teste: afirmații și corelație

Foloseşte pm. așteptați (...) 'и' pm. test ("...," fn) ".
Păstrați ID-urile pentru pașii următori prin "pm. collectionVariables. set ".

Exemple:
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) Schema de validare (OpenAPI/JSON Schema)

Stocați schema JSON în variabile de colectare sau într-un fișier separat.
Pentru OpenAPI: utilizați libs gata făcute în pre-cerere/test (ajv, tv4) - via 'pm. Trimite cererea "la fișier brut sau JSON inline.

Exemplu de stocare a schemei:
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) scripturi bazate pe date

CSV:

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

Interogarea folosește '{{email}}', '{{currency}}'.

Lansare:

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

JSON (matrice de obiecte) - convenabil pentru cazuri complexe/structuri.

8) Cazuri negative și reziliență

Coperta:
  • 401/403 (fără scop/rol nevalid).
  • 400/422 (validarea schemei, câmpuri obligatorii, limite).
  • 404 (BOLA/resursă extraterestră).
  • 409 (conflicte, chei idempotente).
  • 429 (limite) - verificați „Retry-After”.
  • 5xx - degradare corectă și client retro.
Exemplu de test „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) Idempotence, retrae, pagination

Treceți 'Idempotency-Key' și asigurați-vă că repetarea dă același 'id/status'.
Paginarea testului: „limită/offset ”/„ cursor”, detectarea duplicatelor și a lacunelor.
Simularea retroactivelor într-un script de testare: apeluri consecutive cu aceeași cheie.

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 Lansare


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 Acțiuni GitHub (fragment)

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

Exportați JUnit („--reporter-junit-export”) pentru randare nativă.
În conductă, separați jabs: fum (rapid), regresie (plin), securitate (negativ/limite).

10. 4 Docker


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

11) Moki și monitorizare

Servere Mock Postman - stive rapide pentru front și contracte.
Monitoare - rularea periodică a norilor din nor (latență, 5xx, SSL).
În depozit, păstrați fișierele de răspuns eșantion pentru mocs deterministe.

12) Date de testare și curățare

Creați/ștergeți entitățile (_bootstrap/_teardown).
Obiecte de testare a etichetelor cu prefixul 'e2e _' și TTL.

Pentru câmpuri conflictuale, utilizaţi sufixe aleatorii:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) Performanță „pe genunchi”

Poștașul nu este un instrument de încărcare, dar:
  • measure 'pm. răspuns. Timp de răspuns ";
  • rulați 5-10 iterații și fixați p95/praguri;
  • performanțe grele - în JMeter/k6/Gatling (în afara acestui articol).

14) Localizare și multi-chirie

Variabile „chiriaș”, „regiune”, „lang”; comutați în medii.
Testele ar trebui să verifice dacă datele nu „curg” între chiriași (BOLA-citit, interdicții de chiriaș încrucișat).
Colecții/foldere separate pentru caracteristici regionale (limite, valute).

15) Raportarea și artefacte

Stoca artefacte CI: rapoarte HTML, "junit. XML, organisme de răspuns.
Conectați notificările Slack/Echipe pentru picăturile de șoc.

16) Calitate și acoperire

Matrice de acoperire:
  • CRUD per-resursă (200/201/204 + negative).
  • Autorizatie: roluri/scopuri/multi-chirias.
  • Paginare/filtre/sortare.
  • Idemptence și se retrage.
  • Limite: 413/414/431/429.
  • Formate și scheme (JSON Schema/OpenAPI).
  • Integrări (webhooks cu HMAC/mTLS) - anti-reluare.

17) Antipattern

Un „mod fericit” fără teste negative.
Jetoane cu durată lungă de viață în colecție/depozit.
Amestecarea datelor de testare cu datele de producție.
Dependență latentă de ordin de testare fără corelație explicită.
Fișiere de date gigant fără eșantionare.
Nu există rapoarte JUnit/HTML → nici o vizibilitate în CI.

18) Lista de verificare Prod Readiness

  • Colecțiile sunt defalcate pe domenii, există '_ bootstrap/_ teardown'.
  • Medii pentru dev/etapa/prod; secrete de la CI-secret-stocare.
  • Pre-cerere для auth (OAuth2/HMAC); jetoanele sunt cache și rotite.
  • Teste: pozitive + negative, scheme (Schema JSON), paginare, 429/Retry-After.
  • Idempotency: Check 'Idempotency-Key', dublu apel echivalent.
  • CSV/JSON bazate pe date, sufixe aleatorii pentru unicitate.
  • Newman în CI: rapoarte JUnit/HTML, artefacte ca ieșiri de construcție.
  • Mocks/monitoare pentru rutele cheie; SLA pe smochine.
  • Documentarea variabilelor, etichetelor și ordinii de lansare.

19) TL; DR

Stocați logica de testare în colecțiile Postman, parametrii în medii și rulați în CI prin Newman cu rapoarte JUnit/HTML. Acoperă negativele, schemele, idempotența, paginația și limitele. Corelați pașii cu variabilele, utilizați intrări și spălări/monitoare bazate pe date. Secretele - numai de la CI, rapoarte - construi artefacte.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Telegram
@Gamble_GC
Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.