GH GambleHub

تست API: پستچی/نیومن

1) چرا پستچی/نیومن

Postman یک IDE مفید برای اسکریپت ها و مجموعه های پرس و جو است. نیومن یک موتور CLI اجرا می شود که مجموعه همان بدون GUI در CI/CD است. با هم می دهند:
  • رگرسیون های مکرر و سیگار کشیدن سریع ؛
  • پارامترسازی محیط/اسرار ؛
  • معیارهای کیفیت و گزارش های قابل خواندن ماشین.

2) مدل پایه

Collection - درختی از پرس و جوها و پوشه ها با اسکریپت های مشترک.
محیط ها: {{vars}} را برای dev/stage/prod (URL, keys) تنظیم کنید.
اسکریپت پیش درخواست - آماده سازی: امضاها، نشانه ها، همبستگی داده ها.
تست ها - اظهارات و حفظ متغیرها/مصنوعات.
فایل های داده - CSV/JSON برای اجرای داده ها.
مدل/مانیتور - گله ها و چک های دوره ای.

ساختار مجموعه (توصیه):

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

3) متغیرها و اسرار

به متغیرها به عنوان پیشوند صریح اشاره کنید: 'baseUrl'، 'tenant'، 'clientId'.
اسرار (رمزهای عبور، client_secret، کلیدهای HMAC) را در متغیرهای محیطی CI نگه دارید، به مخزن متعهد نباشید.
از scope استفاده کنید: local → collection → environment → 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);
});
}

در درخواست: «مجوز: حامل {{access _ token}}».

4. 2 HMAC (وب سایت/همکاران)

پیش درخواست:
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. تست ("...،" 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 طرح)

طرح JSON را در متغیرهای مجموعه یا در یک فایل جداگانه ذخیره کنید.
برای OpenAPI: استفاده از لیبهای آماده در pre-request/test (ajv, tv4) - via '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

پرس و جو با استفاده از «{{email}}»، «{{currency}}».

راه اندازی:

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

JSON (آرایه ای از اشیاء) - مناسب برای موارد/ساختارهای پیچیده.

8) موارد منفی و مقاومت

پوشش:
  • 401/403 (بدون توکن/دامنه/نقش نامعتبر).
  • 400/422 (اعتبار سنجی طرح، زمینه های اجباری، محدودیت ها).
  • 404 (BOLA/منابع بیگانه).
  • 409 (درگیری ها، کلید های idempotent).
  • 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) idempotence، retrae، صفحه بندی

«Idempotency-Key» را منتقل کنید و مطمئن شوید که تکرار همان شناسه/وضعیت را می دهد.
صفحه بندی تست: 'limit/offset '/' cursor'، تشخیص تکراری و شکاف.
شبیه سازی مجدد در اسکریپت تست: تماس های متوالی با همان کلید.

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) نیومن в 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 ('--reporter-junit-export') برای رندر بومی.
در خط لوله، جابجایی ها را جدا کنید: دود (سریع)، رگرسیون (کامل)، امنیت (منفی/مرزها).

10. 4 کارگر بارانداز


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

11) Moki و نظارت

سرورهای ساختگی پستچی - پشته سریع برای جلو و قرارداد.
مانیتورها - اجرای دوره ای ابرها از ابر (تاخیر، 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/آستانه ؛
  • عملکرد سنگین اجرا می شود - در JMeter/k6/Gatling (خارج از این مقاله).

14) محلی سازی و چند اجاره ای

متغیرهای «مستاجر»، «منطقه»، «لنگ» ؛ تغییر در محیط ها

تست ها باید بررسی کنند که داده ها بین مستاجران «جریان» نداشته باشند (BOLA خواندن، ممنوعیت های متقابل مستاجر).
مجموعه ها/پوشه های جداگانه برای ویژگی های منطقه ای (محدودیت ها، ارزها).

15) گزارش و مصنوعات

مصنوعات CI را ذخیره کنید: گزارش های HTML، "junit. xml، بدنه پاسخ

اطلاعیه های Slack/Teams را برای قطره های شوک وصل کنید.

16) کیفیت و پوشش

ماتریس پوشش:
  • CRUD در هر منبع (200/201/204 + منفی).
  • مجوز: نقش/حوزه/چند مستاجر.
  • صفحه بندی/فیلترها/مرتب سازی.
  • شکست و عقب نشینی
  • محدودیت ها: 413/414/431/429
  • فرمت ها و طرح ها (JSON Schema/OpenAPI).
  • یکپارچگی (webhooks با HMAC/mTLS) - ضد پخش.

17) ضد گلوله

یک «راه شاد» بدون تست منفی.
نشانه های طولانی مدت در مجموعه/مخزن.
مخلوط کردن داده های آزمون با داده های تولید.
وابستگی به دستور تست پنهان بدون همبستگی صریح.
فایل های داده غول پیکر بدون نمونه برداری.
بدون گزارش JUnit/HTML → بدون دید در CI.

18) تولید لیست آمادگی

  • مجموعه ها توسط دامنه شکسته می شوند، «_ bootstrap/_ teardown» وجود دارد.
  • محیط برای dev/stage/prod ؛ اسرار از CI راز ذخیره سازی.
  • پیش درخواست для auth (OAuth2/HMAC) ؛ توکن ها ذخیره و چرخانده می شوند.
  • تست: مثبت + منفی، طرح (طرح JSON)، صفحه بندی، 429/Retry-After.
  • Idempotency: بررسی 'Idempotency-Key'، معادل دو تماس.
  • CSV/JSON داده محور، پسوندهای تصادفی برای منحصر به فرد.
  • نیومن در CI: گزارش JUnit/HTML، مصنوعات به عنوان خروجی ساخت.
  • Mocks/مانیتور برای مسیرهای کلیدی ؛ SLA در انجیر.
  • مستند سازی متغیرها، برچسب ها و سفارش راه اندازی.

19) TL ؛ دکتر متخصص

منطق تست را در مجموعه های Postman، پارامترها در محیط ها ذخیره کنید و در CI از طریق Newman با گزارش های JUnit/HTML اجرا کنید. پوشش منفی، طرح، idempotency، صفحه بندی و محدودیت ها. مراحل مرتبط با متغیرها، استفاده از ورودی های مبتنی بر داده ها و شستشو/مانیتور. اسرار - فقط از CI، گزارش - ساخت مصنوعات.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.