एपीआई परीक्षण: पोस्टमैन/न्यूमैन
1) पोस्टमैन/न्यूमैन क्यों
पोस्टमैन स्क्रिप्ट और क्वेरी संग्रह के लिए एक आसान आईडीई है। न्यूमैन एक सीएलआई इंजन है जो सीआई/सीडी में जीयूआई के बिना समान संग्रह चलाता है। साथ में वे देते हैं:- पुनरावृत्ति और तेजी से धूम्रपान;
- वातावरण/रहस्यों का पैरामेटराइजेशन;
- गुणवत्ता मैट्रिक्स और मशीन-पढ़ने योग्य रिपोर्ट
2) बेस मॉडल
संग्रह - सामान्य स्क्रिप्ट के साथ प्रश्नों और फ़ोल्डरों का एक वृ
वातावरण - dev/stage/prod (URL, कुंजी) के लिए '{vars}' सेट करें.
पूर्व अनुरोध स्क्रिप्ट - तैयारी: हस्ताक्षर, टोकन, डेटा सहसंबंध।
परीक्षण - चर/कलाकृतियों के दावे और संरक्षण।
डेटा-फ़ाइलें - डेटा-चालित रन के लिए CSV/JSON।
मॉक/मॉनिटर - झुंड और आवधिक जांच।
संग्रह संरचना (सिफारिश):
<API v1>
├─ _bootstrap (auth, health, seeds)
├─ Public
├─ Authenticated
│ ├─ Accounts
│ ├─ Payments
│ └─ Reports
└─ _teardown (cleanup)
3) चर और रहस्य
चर को स्पष्ट उपसर्ग के रूप में संदर्भित करें: 'BaseUrl', 'किरायेदार', 'ClientId'।
CI वातावरण चर में रहस्य (पासवर्ड, client_secret, HMAC कुंजी) रखें, भंडार के लिए प्रतिबद्ध न हों।
गुंजाइश का उपयोग करें: स्थानीय → संग्रह → पर्यावरण → ग्लोबल्स।
पर्यावरण का उदाहरण (टुकड़ा 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 (क्लाइंट क्रेडेंशियल्स)
पूर्व अनुरोध: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);
});
}
अनुरोध में: 'प्राधिकरण: वाहक {access _ token}'.
4. 2 एचएमएसी (वेबहूक/पार्टनर्स)
पूर्व अनुरोध: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: {{sig}}'.
5) परीक्षण: दावे और सहसंबंध
'pm का उपयोग करें। उम्मीद (...) 'и' pm। परीक्षण ("...", "एफएन) '।
'pm' के माध्यम से बाद के चरणों के लिए आईडी स्टोर करें। संग्रह चर। सेट '।
उदाहरण: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 स्कीमा)
JSON स्कीमा को संग्रह चर में या एक अलग फ़ाइल में संग्रहीत करें।
OpenAPI के लिए: पूर्व-अनुरोध/परीक्षण (ajv, tv4) में तैयार किए गए लिब्स का उपयोग करें - 'pm के माध्यम से। कच्ची फ़ाइल या 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) डेटा-संचालित स्क्रिप्ट
सीएसवी:
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 (कोई टोकन/अवैध गुंजाइश/भूमिका नहीं)।
- 400/422 (योजना का सत्यापन, अनिवार्य क्षेत्र, सीमा)।
- 404 (BOLA/विदेशी संसाधन)।
- 409 (संघर्ष, अज्ञात कुंजी)।
- 429 (सीमा) - 'रीट्री-आफ्टर' की जाँच करें।
- 5xx - सही गिरावट और रेट्रो क्लाइंट।
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) आइडेम्पोटेंस, रेट्रे, पैगिनेशन
'आइडेम्पोटेंसी-की' पास करें और सुनिश्चित करें कि पुनरावृत्ति समान 'आईडी/स्थिति' देती है।
परीक्षण पृष्ठभूमि: 'सीमा/ऑफसेट '/' कर्सर', डुप्लिकेट और अंतराल का पता लगाना।
एक टेस्ट स्क्रिप्ट में पुनरावृत्ति का अनुकरण: एक ही कुंजी के साथ लगातार कॉल।
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) न्यूमैन в सीआई/सीडी
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 क्रियाएँ (स्निपेट)
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 जेनकिन्स/गिटलैब सीआई
देशी रेंडरिंग के लिए JUnit ('-reporter-junit-export') निर्यात करें.
पाइपलाइन में, जैब्स को अलग करें: धुआं (तेज), प्रतिगमन (पूर्ण), सुरक्षा (नकारात्मक/सीमाएं)।
10. 4 डॉकर
docker run --rm -v $PWD:/etc/newman postman/newman \
run collection. json -e stage-eu. json
11) मोकी और निगरानी
मॉक सर्वर पोस्टमैन - सामने और अनुबंधों के लिए तेजी से ढेर।
मॉनिटर - बादल से बादलों का आवधिक रन (विलंबता, 5xx, SSL)।
भंडार में, नियतात्मक mocs के लिए नमूना प्रतिक्रिया फ़ाइलें रखें।
12) डेटा और सफाई का परीक्षण करें
इकाइयाँ बनाएँ/मिटाएँ (_bootstrap/_teardown)।
उपसर्ग 'e2e _' और TTL के साथ परीक्षण वस्तुओं को लेबल करें।
परस्पर विरोधी क्षेत्रों के लिए, यादृच्छिक प्रत्यय का
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));
13) प्रदर्शन "घुटने पर"
पोस्टमैन एक लोडिंग टूल नहीं है, लेकिन:- उपाय 'pm। प्रतिक्रिया। समय ';
- 5-10 पुनरावृत्तियों को चलाएं और p95/थ्रेसहोल्ड को ठीक करें;
- भारी प्रदर्शन रन - इन (इस लेख के बाहर)।
14) स्थानीयकरण और बहु-किरायेदारी
चर 'किरायेदार', 'क्षेत्र', 'लैंग'; वातावरण में स्विच करें।
परीक्षणों की जांच करनी चाहिए कि डेटा किरायेदारों (बोला-पढ़ा, क्रॉस-किरायेदार निषेध) के बीच "प्रवाह" नहीं करता है।
क्षेत्रीय विशेषताओं (सीमाओं, मुद्राओं) के लिए अलग संग्रह/फ़ोल्डर।
15) रिपोर्टिंग और कलाकृतियाँ
स्टोर सीआई कलाकृतियां: एचटीएमएल रिपोर्ट, 'जूनिट। xml ', प्रतिक्रिया निकाय।
शॉक ड्रॉप्स के लिए कनेक्ट स्लैक/टीम सूचनाएं।
16) गुणवत्ता और कवरेज
कोटिंग मैट्रिक्स:- CRUD प्रति-संसाधन (200/201/204 + नकारात्मक)।
- प्राधिकरण: भूमिकाएँ/स्कोप/बहु-किरायेदार।
- पैगिनेशन/फ़िल्टर/सॉर्टिंग।
- मूर्खता और पीछे हटना।
- सीमाएँ: 413/414/431/429।
- प्रारूप और स्कीमा (JSON स्कीमा/OpenAPI)।
- एकीकरण (HMAC/mTLS के साथ वेबहूक) - एंटी-रीप्ले।
17) एंटीपैटर्न
नकारात्मक परीक्षणों के बिना एक "खुश तरीका"।
संग्रह/भंडार में लंबे समय तक रहने वाले टोकन।
उत्पादन डेटा के साथ परीक्षण डेटा मिलाना।
स्पष्ट सहसंबंध के बिना अव्यक्त परीक्षण आदेश निर्भरता।
नमूना के बिना विशाल डेटा-फ़ाइलें।
कोई JUnit/HTML रिपोर्ट नहीं - सीआई में कोई दृश्यता नहीं।
18) प्रोड रेडीनेस चेकलिस्ट
- संग्रह डोमेन द्वारा टूट जाते हैं, '_ bootstrap/_ teardown' होता है।
- देव/चरण/प्रोड के लिए वातावरण; सीआई-सीक्रेट-स्टोरेज से रहस्य।
- पूर्व अनुरोध для auth (OAuth2/HMAC); टोकन कैश और घुमाए जाते हैं।
- परीक्षण: सकारात्मक + नकारात्मक, योजनाएं (JSON स्कीमा), पृष्ठभूमि, 429/Retry-After।
- आइडेम्पोटेंसी: चेक 'आइडेम्पोटेंसी-की', डबल कॉल समकक्ष।
- डेटा-चालित CSV/JSON, विशिष्टता के लिए यादृच्छिक प्रत्यय।
- न्यूमैन इन सीआई: JUnit/HTML रिपोर्ट, आउटपुट के रूप में कलाकृतियां।
- प्रमुख मार्गों के लिए मॉनिटर/मॉनिटर; अंजीर पर SLA।
- चर, टैग और लॉन्च ऑर्डर का दस्तावेजीकरण।
19) टीएल; डीआर
पोस्टमैन संग्रह में परीक्षण तर्क, वातावरण में मापदंडों को संग्रहीत करें, और JUnit/HTML रिपोर्ट के साथ न्यूमैन के माध्यम से CI में चलाएं। नकारात्मक, स्कीमा, पहचान, पैगिनेशन और सीमाओं को कवर करें। चर के साथ सहसंबंधित कदम, डेटा-चालित इनपुट और वॉश/मॉनिटर का उपयोग करें। रहस्य - केवल सीआई से, रिपोर्ट - कलाकृतियों का निर्माण।