GH GambleHub

Test API Postman/Newman

1) Perché Postman/Newman

Postman è un IDE conveniente per script e raccolte di richieste. Newman è un motore CLI che lancia le stesse collezioni senza GUI in CHI/CD. Insieme danno:
  • regressione ripetuta e smokes veloci;
  • parametrare ambienti/segreti;
  • metriche di qualità e report di lettura automatica.

2) Modello di base

La raccolta è una struttura di query e cartelle condivise.
Gli ambienti sono un set dì {{vars}} "per la versione uv/stage/prod (URL, chiavi).
Pre-sollest script - Preparazione: firme, token, corollazione dei dati.
Test - Approvazioni e salvataggio di variabili/artefatti.
Data-files - CSV/JSON per il test data-driven.
Mok/Monitor - controlli periodici e di greggi.

Struttura della raccolta (raccomandazione):

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

3) Variabili e segreti

Definire le variabili con un prefisso esplicito: «baseUrl», «tenant», «clientId».
Tieni i segreti (password, client _ segreto, chiavi HMAC) nelle variabili dell'ambiente CI, non la commetti nel repository.
Utilizzare la raccolta locale environment dei globals (il minimo possibile).

Esempio di ambiente (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) Autenticazione: modelli

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

Nella query «Authorization: Bearer {{access _ token}}».

4. 2 HMAC (webhook/partner)

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

Intestazioni: 'X-Timestamp: {{ts}}', 'X-Firma: {{sig}}'.

5) Test: approvazione e corellazione

Usa «pm». expect(...)` и `pm. test("...", fn)`.
Salvare gli ID per i passaggi successivi tramite "pm. collectionVariables. set`.

Esempi:
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) Convalida schema (OpenAPI/JSON Schema)

Memorizzare JSON Schema in variabili di raccolta o file separati.
Per OpenAPI: usa le lime pronte in pre-richiest/test (ajv, tv4) tramite "pm. sendRequest "su un file raw o inline JSON.

Esempio di storage dello schema:
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) Script data-driven

CSV:

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

La query utilizza «{{{email}}», «{{currency}}».

Avvio:

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

JSON (array di oggetti) - Utile per portaoggetti e strutture complesse.

8) Valigette negative e sostenibilità

Copri:
  • 401/403 (senza token/scope/ruolo non valido).
  • 400/422 (convalida dello schema, campi obbligatori, limiti).
  • 404 (PALLA/risorsa estranea).
  • 409 (conflitti, chiavi idipotenti).
  • 429 (limiti) - Controlla Retry-After.
  • 5xx - degrado corretto e retrai del client.
Esempio di convalida 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) Idempotenza, retrai, paginazione

Trasmetti Idempotency-Key e assicurati che la ripetizione dia lo stesso id/status.
Prova la paginazione con «limit/offset »/« cursor», un file di duplicati e omissioni.
Simulazione dei retrai nello script Test: chiamate sequenziali con la stessa chiave.

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 Avvia


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 Action (frammento)

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

Esporta JUnit ('--reporter-junit-export') per la visualizzazione nativa.
In Pipline, separare i jobs: smoke (veloce), regolution (completa), sicurezza (negativo/limite).

10. 4 Docker


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

11) Moki e monitoraggio

Mok servers Postman è un gruppo veloce per il fronte e i contratti.
Monitorors è una prova periodica di smog dalla nuvola (latency, 5xx, SSL).
Nel repository, tenete i file di esempio delle risposte per i motori determinati.

12) Test-dati e pulizia

Crea/rimuove entità (_ bootstrap/_ teardown).
Contrassegna gli oggetti di prova con il prefisso «e2e _» e TTL.

Per i campi in conflitto, utilizzare suffissi casuali:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) Prestazioni sul ginocchio

Postman non è uno strumento di carico, ma:
  • misurate'pm. response. responseTime`;
  • perlustrare 5-10 iterazioni e fissare p95/soglie;
  • Le prestazioni pesanti sono in JMeter/k6/Gatling (fuori da questo articolo).

14) Localizzazione e polivalenza

Variabili tenant, region, lang; spostarsi negli ambienti.
I test devono verificare che i dati non siano «fluidi» da tenenti (BOLA-read, cross-tenant proibizioni).
Raccolte/cartelle separate per caratteristiche regionali (limiti, valute).

15) Rapporti e manufatti

Memorizza gli artefatti CI: reperti HTML, 'junit. xml ', fogli di risposte non completate (response bodies).
Collegare le notifiche Slack/Teams per le cadute degli SMS.

16) Qualità e copertura

Matrice dei rivestimenti:
  • CRUD per-risorsa (200/201/204 + negativi).
  • Autorizzazioni: ruoli/scoop/multi-tenant.
  • Paginazione/filtri/ordinamento.
  • Idampotenza e retrai.
  • Limiti: 413/414/431/429.
  • Formati e schemi (JSON).
  • Integrazioni (webhoop con HMAC/mTLS) - anti-replay.

17) Antipattern

Un lieto fine senza test negativi.
Token a lunga vita nella raccolta/repository.
Combinazione dei dati di prova con i dati di prod.
Dipendenza nascosta dall'ordine dei test senza una chiara flessione.
File di dati giganti senza semilibertà.
Nessun rapporto JUnit/HTML è visibile in CHI.

18) Assegno-foglio prod-pronto

  • Le raccolte sono suddivise in domini, ci sono «_ bootstrap/_ teardown».
  • Ambienti per le dive/stage/prod; I segreti di CHI-segreto-magazzino.
  • Pre-request для auth (OAuth2/HMAC); i token vengono memorizzati nella cache e rotati.
  • Test positivi + negativi, schemi (JSON Schema), paginazione, 429/Retry-After.
  • Idempotence: convalida Idempotency-Key, doppia chiamata è equivalente.
  • Data-driven CSV/JSON, suffissi casuali per l'esclusività.
  • Newman in CI: JUNnit/HTML report, artefatti come build outputs.
  • Moki/monitor per percorsi chiave SLA di smog.
  • Documentazione relativa a variabili, tag e ordine di avvio.

19) TL; DR

Memorizzare la logica dei test nelle raccolte Postman, i parametri negli ambienti e eseguire il test in CI tramite Newman con i report JUNnit/HTML. Coprire negativi, schemi, idepotenza, paginazione e limiti. Correlare i passi con le variabili, utilizzare gli ingressi data-driven e i moki/monitor. I segreti sono solo di CHI, i rapporti sono artefatti di un biglietto.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.