GH GambleHub

API թեստավորում: Postman/Newman

1) Ինչու՞ Postman/Newman

POSTMAN-ը հարմար IDE-ն է դիմումների և հավաքածուների համար։ Newman-ը CLI շարժիչն է, որը սկսում է նույն հավաքածուները առանց GUI-ի CI/CD-ում։ Միասին նրանք տալիս են

կրկնվող ռեգրեսիաներ և արագ սկուտերներ;

շրջակա միջավայրի/գաղտնիքների բևեռացումը;

որակի նշաններ և մեքենայական ընթերցումներ։

2) Ռուսական մոդելը

Հավաքածուը հարցումների ծառն է և համագործակցում է ռուսական ջութակների հետ։

Շրջապատը "+ + vars++ + -ի հավաքածու է dev/stage/2019 համար (URL, բանալիներ)։

Pre-request script-ը 'ստորագրություններ, հոսանքներ, տվյալների կորլացիա։

Tesault-ը փոփոխականների/արտեֆակտների հայտարարությունն ու պահպանումն է։

Express-Express-ը CSV/JSON-ն է 71-driven-ի համար։

Mock/Monitor - ալյումինե և պարբերական ստուգումներ։

Հավաքածուի կառուցվածքը (առաջարկություն)


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

3) Մոսկվան և գաղտնիքները

Անվանեք պարզ նախածանց '«box Url», «tenae», «clientId»։

Գաղտնիքները (գաղտնաբառեր, client _ secret, HMAC-բանալիներ) պահեք CI-ի փոփոխականների մեջ, մի զեկուցեք ռեպոզորիայի մեջ։

Օգտագործեք սկոուպը 'wwww.al collection.envi.ru (նվազագույն հնարավոր)։

Շրջապատման օրինակ (fragram 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) Վավերացում ՝ ձևանմուշներ

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

Հարցման մեջ '"Authorization: Bearer++ + + բանաձևը _ token++ +։

4. 2 HMAC (webhuks/գործընկերներ)

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

Վերնագրեր ՝ "X-Timestamp: + + ts++ +," X-Signature: կոդ "։

5) Թեստեր ՝ հայտարարություններ և կորլացիա

Օգտագործեք 'pm։ expect(...)` и `pm. test("...", fn)`.
Պահպանեք ցուցիչները հաջորդ քայլերի համար '«pm»։ collectionVariables. set`.

Օրինակներ

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) սխեմայի վալիդացիան (OpenAPI/JSON Schema)

Պահպանեք JSON Schema-ը փոփոխական հավաքածուներում կամ առանձին հավաքածուներում։

OpenAPI-ի համար օգտագործեք պատրաստի լիբներ pre-request/test (ajv, tv4) - «pm» միջոցով։ sendRequest-ը rault ֆայլի վրա կամ inline JSON-ում։

Սխեմայի պահպանման օրինակ

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) System-driven սցենարները

CSV:

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

Հարցումը օգտագործում է <,> ։

Մեկնարկը


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

JSON (օբյեկտի ստանդարտ) - հարմար բարդ դեպքերի/կառուցվածքների համար։

8) Բացասական դեպքեր և կայունություն

Ծածկեք

401/403 (առանց տոկենի/սխալ scope/դեր)։

400/422 (սխեմայի վալիդացիա, պարտադիր դաշտեր, սահմաններ)։

404 (BOLA/օտար ռեսուրս)։

407 (հակամարտություններ, գաղափարական բանալիներ)։

429 (լիմիտներ) - ստուգեք «Retry-After»։

5xx - ճիշտ դեգրադացիա և հաճախորդի վերափոխում։

«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) Idempotenty, retrai, pagination

Փոխանցեք «Idempotency-Key» և համոզվեք, որ խոհարարը տալիս է նույն «id/status» -ը։

Փորձարկեք պագինացիան '"limit/www.set '/" cursor", կրկնօրինակների և բացթողումների։

Test-ջութակի ռեակտորների իմիտացիան նույն բանալին է։

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 Արձակումը


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 (հատված)

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

Էքսպորտացրեք JUnit («-reporter-junit-export») national տեսողության համար։

Դելֆինայում բաժանեք ջոբները 'smoke (արագ), regression (ամբողջական), regression (բացասական/սահմաններ)։

10. 4 Docker


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

11) Մոկի և Եվգենիա

Mock servers Postman-ը արագ ֆորումներ է առջևի և ռուսական համար։

Monitors-ը ամպերի (latency, 5xx, SSL) սոխերի պարբերական պրոթոն է։

Պահեք դետերմինացված մոծակների համար պատասխանների օրինակներ։

12) Թեստային տվյալները և մաքրումը

Ստեղծեք/հեռացրեք էությունը (_ bootstrap/_ teardown)։

Տեղադրեք թեստային օբյեկտները «e2e _» և TTL-ի նախածանցով։

Հակամարտական դաշտերի համար օգտագործեք պատահական վերջածանցներ

js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) «Ծնկի վրա» արտադրողականությունը

Postman-ը բեռի գործիք չէ, բայց

չափեք 'pm։ response. responseTime`;

թողեք 5-10 iteration և գրանցեք r95/press;

ծանր պերֆորանսային պրոգոնները 'JMeter/k6/Gatling (այս հոդվածի սահմաններից դուրս)։

14) Տեղայնացումը և բազմապատկումը

Windows ', «region», «lang»; անջատեք ձեր շրջապատը։

Թեստերը պետք է ստուգեն, որ տվյալները չեն հոսում տենանտների միջև (BOLA-read, cross-tenae արգելքներ)։

Առանձին հավաքածուներ/թղթապանակներ տարածաշրջանային հատկությունների վրա (լիմիտներ, արժույթներ)։

15) Հաշվետվություններ և արտեֆակտներ

Պահեք CI արտեֆակտները 'HTML լրագրողներ,' junit։ Xl ', անհաջող պատասխանների լոգներ (response bodies)։

Միացրեք Slack/Teams ծանուցումները մթության անկման մասին։

16) Որակը և ծածկույթը

Ծածկույթի մատրիցը

CRUD per ռեսուրսը (200/201/204 + բացասական)։

Հեղինակային իրավունքը 'դերեր/սկուտերներ/մուլտֆիլմ-տենանտ։

Պագինացիա/ֆիլտրեր/տեսակավորում։

Idempotenty և retray.

Լիմիտներ ՝ 413/414/431/429։

Ստանդարտ և սխեմաներ (JSON Schema/OpenAPI)։

Express (webhuks HMAC/mTSA) - anti-replay։

17) Անտիպատերնի

Մեկ «երջանիկ ճանապարհ» առանց բացասական թեստերի։

Երկար գոյատևող հոսանքները հավաքածուի/ավանդության մեջ։

Թեստային տվյալների խառնուրդը պրոդ տվյալների հետ։

Թաքնված կախվածությունը թեստերի կարգին առանց ակնհայտ կորստի։

Հսկա կոմպոզիցիաներ առանց սերմերի։

JUnit/HTML փաթեթների բացակայությունը չի երևում CI-ում։

18) Չեկ-թուղթ պատրաստակամության համար

  • Հավաքածուները բաժանված են օրինագծերով, կա «_ bootstrap/_ teardown»։
  • Շրջապատեր dev/stage/2019; գաղտնիքները CI գաղտնիք-2019-ից։
  • Pre-request для auth (OAuth2/HMAC); պտտվում և պտտվում են։
  • Թեստեր ՝ + բացասական, սխեմաներ (JSON Schema), պագինացիա, 429/Retry-After։
  • Idempotenty: Idempotency-Key "ստուգումը, կրկնակի զանգը համարժեք է։
  • System-driven CSV/JSON, պատահական վերջածանցներ եզակի համար։
  • Newman CI: JUnit/HTML հաշվետվությունները, արտեֆակտները որպես build puts։
  • Մոկի/մոնիտորներ հիմնական երթուղիների համար; SLA-ն սայթաքում է։
  • Փոփոխություններ, թեստեր և գործարկման կարգեր։

19) TL; DR

Պահպանեք թեստերի տրամաբանությունը Postman հավաքածուներում, պարամետրերը շրջապատված են, իսկ grogone անում եք CI-ում Newman-ի միջոցով JUnit/HTML զեկույցներով։ Ծածկեք բացասական, սխեմաներ, գաղափարախոսություն, պագինացիա և սահմանաչափեր։ Փոխկապակցեք քայլերը փոփոխական, օգտագործեք ստանդարտ-driven մուտքեր և կամուրջներ/մոնիտորներ։ Գաղտնիքները միայն CI-ից են, հաշվետվությունները տոմսի արտեֆակտներ են։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։