GH GambleHub

API Testi: Postman/Newman

1) Neden postacı/Newman

Postman, komut dosyaları ve sorgu koleksiyonları için kullanışlı bir IDE'dir. Newman, CI/CD'de GUI olmadan aynı koleksiyonları çalıştıran bir CLI motorudur. Birlikte veriyorlar:
  • Tekrarlanabilir regresyonlar ve hızlı sigaralar;
  • Ortamların/sırların parametrelendirilmesi;
  • Kalite metrikleri ve makine tarafından okunabilir raporlar.

2) Temel model

Koleksiyon - ortak komut dosyalarına sahip bir sorgu ve klasör ağacı.
Ortamlar - dev/stage/prod (URL, anahtarlar) için '{{vars}}' ayarlayın.
Ön talep betiği - hazırlık: imzalar, belirteçler, veri korelasyonu.
Testler - değişkenlerin/eserlerin iddiaları ve korunması.
Veri dosyaları - Veri odaklı çalışma için CSV/JSON.
Mock/Monitör - sürüler ve periyodik kontroller.

Koleksiyon yapısı (öneri):

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

3) Değişkenler ve sırlar

Değişkenlere açık önek olarak bakın: 'baseUrl', 'tenant', 'clientId'.
CI ortam değişkenlerinde sırları (şifreler, client_secret, HMAC anahtarları) saklayın, bilgi havuzuna bağlı kalmayın.
Kapsamını kullanın: local ^ collection ^ environment ^ globals.

Çevre örneği (JSON parçası):
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) Kimlik doğrulama: şablonlar

4. 1 OAuth2/OIDC (Müşteri Kimlik Bilgileri)

Ön talep:
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);
});
}

Talepte: 'Yetkilendirme: Taşıyıcı {{access _ token}}'.

4. 2 HMAC (Webhooks/İş Ortakları)

Ön talep:
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);

Başlıklar: 'X-Timestamp: {{ts}}', 'X-Signature: {{sig}}'.

5) Testler: iddialar ve korelasyon

PM kullan. (...) 'и' pm bekliyoruz. test ("...", fn) '.
'PM' aracılığıyla sonraki adımlar için kimlikleri saklayın. collectionVariables. Set '.

Örnekler:
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) Şema doğrulama (OpenAPI/JSON Schema)

JSON Şemasını koleksiyon değişkenlerinde veya ayrı bir dosyada saklayın.
OpenAPI için: ready-made libs in pre-request/test (ajv, tv4) - via 'pm. SendRequest 'ham dosyaya veya JSON satır içi.

Şema depolama örneği:
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) Veri odaklı komut dosyaları

CSV:

email, password, currency u1@example. com, P@ss1, EUR u2@example. com, P@ss2, USD

Sorgu '{{email}}', '{{currency}}' kullanır.

Başlat:

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

JSON (nesne dizisi) - karmaşık durumlar/yapılar için uygundur.

8) Negatif vakalar ve direnç

Kapak:
  • 401/403 (belirteç/geçersiz kapsam/rol yok).
  • 400/422 (planın doğrulanması, zorunlu alanlar, sınırlar).
  • 404 (BOLA/yabancı kaynak).
  • 409 (çakışmalar, idempotent anahtarlar).
  • 429 (limitler) - 'Retry-After' seçeneğini işaretleyin.
  • 5xx - doğru bozulma ve retro istemci.
'Retry-After' test örneği:
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'i geçin ve tekrarlamanın aynı'id/statü' verdiğinden emin olun.
Test sayfalama: 'limit/offset'/' imleç', yinelenen ve boşlukların tespiti.
Test betiğinde retrays benzetimi: aynı anahtarla ardışık çağrılar.

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 Fırlatma


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 Eylemleri (snippet)

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

Yerel oluşturma için JUnit'i ('--reporter-junit-export') dışa aktarın.
Boru hattında, jabları ayırın: duman (hızlı), regresyon (tam), güvenlik (negatif/sınırlar).

10. 4 Docker


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

11) Moki ve izleme

Sahte sunucular Postman - ön ve sözleşmeler için hızlı yığınları.
Monitörler - buluttan bulutların periyodik çalışması (gecikme, 5xx, SSL).
Bilgi havuzunda, deterministik mocs için örnek yanıt dosyalarını saklayın.

12) Test verileri ve temizlik

Varlık oluşturma/silme (_bootstrap/_teardown).
Test nesnelerini 'e2e _' ve TTL önekiyle etiketleyin.

Çakışan alanlar için rastgele sonekler kullanın:
js pm. collectionVariables. set("uniq", Date. now()+"_"+Math. floor(Math. random()1e6));

13) Performans "dizde"

Postacı bir yükleme aracı değildir, ama:
  • measure 'pm. Yanıt. YanıtZamanı ';
  • 5-10 yinelemelerini çalıştırın ve p95/eşikleri düzeltin;
  • Ağır performans çalışır - JMeter/k6/Gatling (bu makalenin dışında).

14) Yerelleştirme ve çoklu kiracılık

Değişkenler 'kiracı', 'bölge', 'lang'; Ortamlarda geçiş yapın.
Testler, verilerin kiracılar arasında "akmadığını" kontrol etmelidir (BOLA-okuma, kiracılar arası yasaklar).
Bölgesel özellikler için ayrı koleksiyonlar/klasörler (limitler, para birimleri).

15) Raporlama ve eserler

Mağaza CI eserler: HTML raporları, 'junit. Xml ', tepki organları.
Şok düşüşleri için Slack/Teams bildirimlerini bağlayın.

16) Kalite ve kapsama alanı

Kaplama matrisi:
  • Kaynak başına CRUD (200/201/204 + negatifler).
  • Yetkilendirme: roller/kapsamlar/çok kiracılı.
  • Sayfalama/filtreler/sıralama.
  • Idempotence ve geri çekilme.
  • Sınırları: 413/414/431/429.
  • Formatlar ve şemalar (JSON Schema/OpenAPI).
  • Entegrasyonlar (HMAC/mTLS'li webhook'lar) - anti-replay.

17) Antipatterns

Negatif testler olmadan bir "mutlu yol".
Koleksiyon/depoda uzun ömürlü belirteçler.
Test verilerini üretim verileriyle karıştırma.
Açık korelasyon olmaksızın gizli test sırası bağımlılığı.
Örnekleme olmadan dev veri dosyaları.
JUnit/HTML raporları yok - CI'da görünürlük yok.

18) Prod Hazırlık Kontrol Listesi

  • Koleksiyonlar etki alanına göre ayrılır, '_ bootstrap/_ teardown' vardır.
  • Dev/stage/prod için ortamlar; CI-gizli-depolama sırları.
  • Ön talep для auth (OAuth2/HMAC); Jetonlar önbelleğe alınır ve döndürülür.
  • Testler: pozitif + negatif, şemalar (JSON Şeması), sayfalama, 429/Retry-After.
  • Idempotency: Check 'Idempotency-Key', çift çağrı eşdeğeri.
  • Veri odaklı CSV/JSON, benzersizlik için rastgele sonekler.
  • Newman CI: JUnit/HTML raporları, yapı çıktıları olarak eserler.
  • Anahtar yollar için alay/monitörler; İncirde SLA.
  • Değişkenlerin, etiketlerin ve başlatma sırasının belgelenmesi.

19) TL; DR

Test mantığını Postman koleksiyonlarında, ortamlardaki parametrelerde saklayın ve JUnit/HTML raporlarıyla Newman aracılığıyla CI'da çalıştırın. Negatifleri, şemaları, idempotensi, sayfalama ve sınırları örtün. Adımları değişkenlerle ilişkilendirin, veriye dayalı girişler ve yıkama/monitörler kullanın. Sırlar - sadece CI, raporlar - eserler inşa edin.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.