GH GambleHub

Санҷиши API: Почтачин/Нюман

1) Чаро Постман/Нюман

Почтачин IDE-и мувофиқ барои скриптҳо ва маҷмӯаҳои дархостҳо мебошад. Newman як муҳаррики CLI мебошад, ки ҳамон маҷмӯаҳоро бидуни GUI дар CI/CD идора мекунад. Якҷоя онҳо медиҳанд:
  • регрессияи такрорӣ ва дудҳои зуд;
  • параметри муҳит/асрори;
  • ченакҳои сифат ва ҳисоботҳои хонданашаванда.

2) Модели асосӣ

Маҷмӯа - дарахти дархостҳо ва ҷузвдонҳо бо скриптҳои умумӣ.
Муҳитҳо - маҷмӯи '{{vars}}' барои dev/stage/prod (URL, калидҳо).
Скрипти пешакӣ дархост - тайёрӣ: имзоҳо, нишонаҳо, таносуби маълумот.
Санҷишҳо - тасдиқ ва нигоҳ доштани тағирёбандаҳо/артефактҳо.
Файлҳои маълумот - CSV/JSON барои идоракунии маълумот.
Масхара/Монитор - рамаҳо ва чекҳои даврӣ.

Сохтори ҷамъоварӣ (тавсия):

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

3) Тағирёбандаҳо ва асрори

Ба тағирёбандаҳо ҳамчун префикси возеҳ муроҷиат кунед: 'base

Нигоҳ доштани асрори (паролҳо, 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);
});
}

Дар дархост: 'Авторизатсия: Bearer {{access _ token}}'.

4. 2 HMAC (Webhooks/Шарикон)

Дархости пешакӣ:
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. интизор шавед (...) 'i' pm. озмоиш ("...," fn) '.
ID-ро барои қадамҳои минбаъда тавассути '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) Санҷиши схема (Схемаи Open/API/JSON)

Нақшаи JSON-ро дар тағирёбандаҳои коллексия ё дар файли алоҳида нигоҳ доред.
Барои кушодани API: либҳои тайёрро дар дархости пешакӣ/санҷиш истифода баред (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}}', '{{асъор}}' -ро истифода мебарад.

Оғози кор:

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, pagination

'Idempotency-Key' -ро гузаред ва боварӣ ҳосил кунед, ки такрори ҳамон 'id/status' медиҳад.
Саҳифаҳои санҷишӣ: 'маҳдуд/ҷуброн '/' курсор', ошкор кардани нусхаҳо ва холигоҳҳо.
Симулятсияи ретрейҳо дар скрипти Санҷиш: зангҳои пайдарпай бо ҳамон калид.

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 Амалҳои Git- Hub (порча)

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

Барои содироти ватанӣ JU ‌ nit ('-- reporter-junit-export') содир кунед.
Дар қубур ҷаббҳоро ҷудо кунед: дуд (зуд), регрессия (пурра), амният (манфӣ/сарҳадӣ).

10. 4 Docker


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

11) Моки ва мониторинг

Серверҳои масхара Postman - стекҳои зуд барои фронт ва шартномаҳо.
Мониторҳо - даврии даврии абрҳо аз абр (ниҳонӣ, 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) Маҳаллисозӣ ва бисёрҳуҷрагӣ

Тағирёбандаҳои 'иҷорагир', 'минтақа', 'lang'; гузариш дар муҳит.
Санҷишҳо бояд тафтиш кунанд, ки маълумот дар байни иҷорагирон "ҷараён надорад" (Манъи хондани BOLA, манъи иҷорагир).
Маҷмӯаҳо/ҷузвдонҳои алоҳида барои хусусиятҳои минтақавӣ (маҳдудиятҳо, асъорҳо).

15) Ҳисобот ва артефактҳо

Артефактҳои CI-ро нигоҳ доред: гузоришҳои HTML, 'junit. xml ', мақомоти вокуниш.
Огоҳиномаҳои Slack/Teamsро барои қатраҳои зарба пайваст кунед.

16) Сифат ва фарогирӣ

Матритсаи рӯйпӯш:
  • CRUD ба як манбаъ (200/201/204 + манфӣ).
  • Авторизатсия: нақшҳо/соҳаҳо/бисёр иҷорагир.
  • Пагинатсия/филтрҳо/навъбандӣ.
  • Idempotence ва ақибнишинӣ.
  • Маҳдудиятҳо: 413/414/431/429.
  • Форматҳо ва схемаҳо (JSON Schema/Open
  • Интегратсияҳо (webhooks бо HMAC/MTLS) - зидди такрорӣ.

17) Антипаттернҳо

Як "роҳи хушбахт" бе санҷишҳои манфӣ.
Нишонаҳои дарозмуддат дар коллексия/анбор.
Омезиши маълумоти санҷишӣ бо маълумоти истеҳсолӣ.
Вобастагии фармоишии пинҳонӣ бидуни таносуби возеҳ.
Файлҳои бузурги додаҳо бидуни интихоб.
Дар бораи JU-nit/HTML ҳеҷ гуна ҳисобот дар бораи CI мавҷуд нест.

18) Рӯйхати санҷиши омодагии Prod

  • Маҷмӯаҳо аз рӯи домен тақсим карда мешаванд, '_ bootstrap/_ ашк' мавҷуд аст.
  • Муҳитҳо барои dev/stage/prod; асрори CI-махфӣ.
  • дархости пешакӣ для аут (OA buth2/HMAC); токенҳо нигоҳ дошта мешаванд ва чарх мезананд.
  • Санҷишҳо: мусбат + манфӣ, схемаҳо (JSON Schema), бутпарастӣ, 429/Retry-After.
  • Идентификатсия: Санҷиши 'Idempotency-Key', эквиваленти занги дукарата.
  • CSV/JSON-и иттилоотӣ, суффиксҳои тасодуфӣ барои беҳамто.
  • Нюман дар CI: Ҳисоботҳои JU 'nit/HTML, артефактҳо ҳамчун натиҷаи натиҷа.
  • Масхарабозӣ/мониторҳо барои хатсайрҳои асосӣ; SLA оид ба анҷир.
  • Ҳуҷҷатгузории тағирёбандаҳо, барчаспҳо ва тартиби роҳандозӣ.

19) TL; ДР

Мантиқи санҷиширо дар маҷмӯаҳои Postman, параметрҳо дар муҳит нигоҳ доред ва дар CI тавассути Newman бо гузоришҳои JU 'nit/HTML иҷро кунед. Манфӣ, схемаҳо, аблаҳӣ, бутпарастӣ ва маҳдудиятҳоро фаро гиред. Қадамҳоро бо тағирёбандаҳо муқоиса кунед, воридоти маълумотро истифода баред ва шустушӯ/мониторҳоро истифода баред. Асрҳо - танҳо аз СИ, гузоришҳо - артефактҳо месозанд.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.