Санҷиши 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
{
"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 - деградатсияи дуруст ва мизоҷи ретро.
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 иҷро кунед. Манфӣ, схемаҳо, аблаҳӣ, бутпарастӣ ва маҳдудиятҳоро фаро гиред. Қадамҳоро бо тағирёбандаҳо муқоиса кунед, воридоти маълумотро истифода баред ва шустушӯ/мониторҳоро истифода баред. Асрҳо - танҳо аз СИ, гузоришҳо - артефактҳо месозанд.