GH GambleHub

בדיקת API: Postman/Newman

1) מדוע דוור/ניומן

דוור הוא תעודה מזהה שימושית לתסריטים ואוספי שאילתות. ניומן הוא מנוע CLI שמריץ את אותם אוספים ללא GUI ב CI/CD. יחד הם נותנים:
  • רגרסיות חוזרות וסיגריות מהירות;
  • פרמטריזציה של סביבות/סודות;
  • מדדים איכותיים ודיווחים ניתנים לקריאה.

2) מודל בסיס

אוסף - עץ של שאילתות ותיקיות עם תסריטים נפוצים.
סביבות - הגדרת '[vars]' עבור dev/stage/prod (כתובת, מפתחות).
תסריט מראש - הכנה: חתימות, אסימונים, מתאם נתונים.
בדיקות - קביעות ושימור של משתנים/חפצים.
קבצי נתונים - CSV/JSON לריצה מונעת נתונים.
Mock/Monitor - עדר ובדיקות תקופתיות.

מבנה אוסף (המלצה):

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

3) משתנים וסודות

התייחס למשתנים כקידומת מפורשת: ”eshurl”, ”terenant',” JId'.
שמור סודות (סיסמאות, client_secret, מפתחות HMAC) במשתני סביבת CI, אל תתחייב למאגר.
השתמש בהיקף: local action collection ac.globals.

דוגמה לסביבה (שבר 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);
});
}

בבקשה: ”אישור: Bearer [access _ token]”.

4. 2 HMAC (Webhooks/Partners)

בקשה מראש:
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:”, ”X-חתימה: [sig]”.

5) מבחנים: טענות וקורלציה

השתמש 'אחר הצהריים. מצפה (...) 'bullief' pm. מבחן ("...," fn) ".
תעודות זהות של הצעדים הבאים. משתנים. להגדיר '.

דוגמאות:
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) תסריטים מונעי נתונים

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 (לא סמלי/לא תקף היקף/תפקיד).
  • 400/422 (אישור התוכנית, שדות חובה, גבולות).
  • 404 (בולה/משאב זר).
  • 409 (סכסוכים, מפתחות אידיוטים).
  • 429 (גבולות) - לבדוק 'Retry-After'.
  • 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) אידמפוטנטיות, retrae, pagination

העבר 'Idempotency-Key' ולוודא כי החזרה נותנת את אותו 'id/status'.
pagination: ”הגבלה/קיזוז ”/” סמן”, זיהוי כפילויות ופערים.
הדמיית מגשים מחדש בתסריט מבחן: שיחות רצופות עם אותו מפתח.

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 (קטע)

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 ג 'נקינס/GitLab CI

ייצוא JUnit ("- reforter-junit-export') לתרגום ילידי.
בצינור, הפרד בין הדקירות: עשן (מהיר), רגרסיה (מלאה), ביטחון (שלילי/גבולות).

10. 4 Docker


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

11) מוקי וניטור

שרתים מדומים דוור - ערימות מהירות לחוזים וחזית.
צגים - ריצה מחזורית של עננים מהענן (latency, 5xx, SSL).
במאגר, שמור קבצי תגובת דגימה למוקים דטרמיניסטיים.

12) בדיקת נתונים וניקוי

צור/מחק ישויות (_bootstrap/_teardown).
אובייקטי בדיקה עם הקידומת e2e _' ו TTL.

עבור שדות סותרים, השתמש בסיומות אקראיות:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) ביצוע ”על הברך”

דוור הוא לא כלי טעינה, אבל:
  • מידה 'אחר הצהריים. תגובה. זמן ";
  • ריצת 5-10 חזרות ותיקון p95/סף;
  • ריצות ביצועים כבדות - JMeter/k6/Gatling (מחוץ למאמר זה).

14) לוקליזציה וריבוי דירות

משתנים ”דייר”, ”אזור”, ”לאנג”; מתחלפים בסביבות.
על הבדיקות לבדוק כי הנתונים אינם ”זורמים” בין הדיירים (איסורי בולה-קריאה, חוצה דיירים).
אוספים/תיקיות נפרדות עבור מאפיינים אזוריים (גבולות, מטבעות).

15) דיווח וחפצים

חפצי מודיע של החנות, דיווחים של האצ "ל, ג 'וניט. xml', גוף תגובה.
חבר הודעות רפוי/צוותים לטיפות הלם.

16) איכות וכיסוי

מטריצת ציפוי:
  • CRUD לכל משאב (200/201/204 + שלילי).
  • אישור: תפקידים/סקופים/רב-דייר.
  • סגידה/מסננים/מיון.
  • אימפוטנציה ונופש.
  • גבולות: 413/414/431/429.
  • תבניות וסכימות (JSON Schema/OpenAPI).
  • אינטגרציות (חוברות אינטרנט עם HMAC/mTLS) - אנטי-שידור חוזר.

17) תרופות אנטי ־ פטריות

”דרך שמחה” אחת בלי בדיקות שליליות.
אסימונים ארוכי חיים באוסף/מאגר.
ערבוב נתוני מבחן עם נתוני ייצור.
תלות בסדרי מבחן סמויים ללא קורלציה מפורשת.
קבצי נתונים ענקיים ללא דגימה.
אין דיווח של JUnit/HTML = אין ראות במודיעה.

18) רשימת מוכנות למומחים

[ האוספים ] מפורקים על ידי תחום, יש ”_ bootstrap/_ קורע”.
[ סביבות ] עבור dev/stage/prod; סודות מאחסון סודי של המודיעים.
[ בקשה מוקדמת ] OAuth2/HMAC; אסימונים מסודרים ומסובבים.
[ ] בדיקות: חיובי + שלילי, מזימות (JSON Schema), עבודת אלילים, 429/Retry-After.
[ ] אידמפוטנטיות: בדוק 'Idempotency-Key', מקבילה שיחה כפולה.
[ ] CSV/JSON מונע נתונים, סיומות אקראיות לייחודיות.
[ ] ניומן ב CI: JUnit/HTML מדווח, חפצים כתפוקות לבנות.
[ ] Mocks/Monitors עבור נתיבי מפתח; SLA על תאנים.
[ ] תיעוד של משתנים, תגיות והזמנת שיגור.

19) TL; DR

החנות בוחנת היגיון באוספי דוור, פרמטרים בסביבה, ורצה ב-CI דרך Newman עם דו "חות JUnit/HTML. לכסות תשלילים, תוכניות, אידמפוטנטיות, עבודת אלילים ומגבלות. התאמת צעדים עם משתנים, שימוש בקלט מונע נתונים ושטיפה/צגים. סודות - רק ממודיע, דיווחים - לבנות חפצים.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.