GH GambleHub

اختبار واجهة برمجة التطبيقات: ساعي البريد/نيومان

1) لماذا ساعي البريد/نيومان

ساعي البريد هو IDE مفيد للنصوص ومجموعات الاستفسارات. نيومان هو محرك CLI يدير نفس المجموعات بدون واجهة المستخدم الرسومية في CI/CD. معًا يقدمون:
  • والتراجع المتكرر والتدخين السريع ؛
  • ووضع بارامترات للبيئات/الأسرار ؛
  • مقاييس الجودة والتقارير المقروءة آليا.

2) نموذج القاعدة

المجموعة - شجرة من الاستفسارات والمجلدات ذات نصوص مشتركة.
البيئات - set '{{vars}}' for dev/stage/prod (URL, keys).
نصي الطلب المسبق - التحضير: التوقيعات، الرموز، ارتباط البيانات.
الاختبارات - التأكيدات والحفاظ على المتغيرات/القطع الأثرية.
ملفات البيانات - CSV/JSON لتشغيل البيانات.
Mock/Monitor - قطعان وفحوصات دورية.

هيكل التحصيل (توصية):

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

3) المتغيرات والأسرار

الرجوع إلى المتغيرات كبادئة صريحة: "baseUrl'،" المستأجر "،" معرف العميل ".
احتفظ بالأسرار (كلمات المرور، client_secret، مفاتيح HMAC) في متغيرات بيئة CI، لا تلتزم بالمستودع.
استخدام النطاق: جمع → المحلية → البيئة → العالمية.

مثال البيئة (الجزء 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 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: {{ts}}،" X-Signature: {{sig}} ".

5) الاختبارات: التأكيدات والارتباط

استخدم 'pm. توقع (...) «и» مساءً. الاختبار (... "," fn) ".
قم بتخزين معرفات الخطوات اللاحقة عبر '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 Schema)

قم بتخزين مخطط JSON في متغيرات التجميع أو في ملف منفصل.
بالنسبة إلى OpenAPI: استخدم libs الجاهزة في الطلب المسبق/الاختبار (ajv، tv4) - عبر 'pm. أرسل الطلب إلى الملف الخام أو JSON inline.

مثال على تخزين المخطط:
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

الاستعلام يستخدم «{{email}}»، «{{currency}}».

الإطلاق:

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

JSON (مجموعة من الكائنات) - مناسب للحالات/الهياكل المعقدة.

8) الحالات السلبية والمرونة

تغطية:
  • 401/403 (بدون رمز/نطاق/دور غير صالح).
  • 400/422 (التصديق على المخطط، المجالات الإلزامية، الحدود).
  • 404 (BOLA/Alien resource).
  • 409 (النزاعات، المفاتيح الحمقاء).
  • 429 (حدود) - تحقق من «إعادة المحاولة بعد».
  • 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) الغباء، العودة، الوثب

اجتاز «Idempotency-Key» وتأكد من أن التكرار يعطي نفس «المعرف/الحالة».
استعداد الاختبار: «الحد/الإزاحة »/« المؤشر»، والكشف عن النسخ المكررة والثغرات.
محاكاة إعادة التصوير في نص الاختبار: مكالمات متتالية بنفس المفتاح.

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 Jenkins/GitLab CI

تصدير JUnit ('-- reporter-junit-export') للعرض المحلي.
في خط الأنابيب، افصل اللكمات: الدخان (السريع)، الانحدار (الكامل)، الأمن (السلبي/الحدود).

10. 4 Docker


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

11) الموكي والرصد

ساعي البريد الخوادم الوهمية - أكوام سريعة للأمام والعقود.
الشاشات - تشغيل دوري للسحب من السحابة (زمن الوصول، 5xx، SSL).
في المستودع، احتفظ بعينة من ملفات الاستجابة للموك الحتمية.

12) بيانات الاختبار والتنظيف

إنشاء/حذف الكيانات (_bootstrap/_teardown).
علامة اختبار كائنات مع البادئة 'e2e _' و TTL.

للحقول المتضاربة، استخدم اللواحق العشوائية:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) الأداء «على الركبة»

ساعي البريد ليس أداة تحميل، ولكن:
  • تدبير 'pm. الرد. وقت الاستجابة '؛
  • تشغيل 5-10 تكرارات وإصلاح p95/عتبات ؛
  • الأداء الثقيل - في JMeter/k6/Gatling (خارج هذه المقالة).

14) التوطين وتعدد الحيازات

المتغيرات 'المستأجر' و 'الإقليم' و 'اللانغ' ؛ التبديل في البيئات.
يجب أن تتحقق الاختبارات من أن البيانات لا «تتدفق» بين المستأجرين (BOLA-read، الحظر عبر المستأجر).
مجموعات/مجلدات منفصلة للخصائص الإقليمية (الحدود والعملات).

15) الإبلاغ والتحف

متجر CI القطع الأثرية: تقارير HTML، 'junit. xml'، هيئات الاستجابة.
قم بتوصيل إشعارات Slack/Teams لقطرات الصدمة.

16) الجودة والتغطية

مصفوفة الطلاء:
  • CRUD لكل مورد (200/201/204 + السلبيات).
  • الإذن: الأدوار/النطاقات/المستأجرين المتعددين.
  • التثبيت/المرشحات/الفرز.
  • الغباء والتراجع.
  • الحدود: 413/414/431/429.
  • الأشكال والمخططات (مخطط JSON/OpenAPI).
  • التكامل (خطابات الويب مع HMAC/mTLS) - مضاد لإعادة التشغيل.

17) أنتيباترن

«طريقة سعيدة» بدون اختبارات سلبية.
رموز طويلة العمر في المجموعة/المستودع.
خلط بيانات الاختبار مع بيانات الإنتاج.
الاعتماد على ترتيب الاختبار الكامن دون ارتباط صريح.

ملفات بيانات عملاقة بدون أخذ عينات

لا توجد تقارير JUnit/HTML → أي رؤية في CI.

18) قائمة التحقق من الاستعداد

  • يتم تقسيم المجموعات حسب المجال، وهناك «تمزيق bootstrap/_».
  • بيئات للتطوير/المرحلة/الدفع ؛ أسرار من المخزن السري
  • طلب مسبق для auth (OAuth2/HMAC) ؛ يتم تخزين الرموز وتدويرها.
  • الاختبارات: إيجابية + سلبية، مخططات (مخطط JSON)، الاستعداد، 429/Retry-After.
  • الخصوصية: تحقق من «Idempotency-Key»، مكافئ مكالمة مزدوجة.
  • CSV/JSON القائم على البيانات، اللواحق العشوائية للتفرد.
  • Newman in CI: تقارير JUnit/HTML، القطع الأثرية كمخرجات بناء.
  • سخرية/مراقبين للطرق الرئيسية ؛ SLA على التين.
  • توثيق المتغيرات والعلامات وأوامر الإطلاق.

19) TL ؛ د

تخزين منطق اختبار في مجموعات Postman، والمعلمات في البيئات، وتشغيل في CI عبر Newman مع تقارير JUnit/HTML. تغطية السلبيات والمخططات والغباء والترقيم والحدود. ربط الخطوات بالمتغيرات، واستخدام المدخلات المستندة إلى البيانات والغسالات/الشاشات. الأسرار - فقط من CI، التقارير - تبني القطع الأثرية.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.