DEV Community

Cover image for Postman ile API Testi Nasıl Yapılır: Uygulamalı Rehber
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

Postman ile API Testi Nasıl Yapılır: Uygulamalı Rehber

Postman, HTTP istekleri göndermek ve bir API'nin davranışını doğrulamak için en yaygın kullanılan araçlardan biridir. Hızlı bir GET isteğinden CI’da çalışan test paketlerine kadar birçok API test senaryosunu destekler. API geliştiriyor veya tüketiyorsanız, Postman’i günlük iş akışınızda pratik bir test aracı olarak kullanabilirsiniz.

Apidog'u bugün deneyin

Bu kılavuzda Postman ile bir API’yi adım adım test edeceksiniz: istek gönderecek, yanıtı inceleyecek, Testler/Betrikler alanında assertion yazacak, ortam değişkenleriyle staging ve production arasında geçiş yapacak ve Collection Runner ile tüm koleksiyonu çalıştıracaksınız. Örneklerde herkese açık JSONPlaceholder API’si kullanıldığı için ön kurulum yapmadan takip edebilirsiniz.

Postman’i Kurun ve İlk İsteğinizi Gönderin

Postman’i resmi siteden indirin ve masaüstü uygulamasını yükleyin. Yerel kullanım için hesap zorunlu değildir; ancak oturum açarsanız koleksiyonlarınızı cihazlar arasında senkronize edebilirsiniz.

İlk isteği oluşturmak için:

  1. Postman’i açın.
  2. New / Yeni düğmesine tıklayın.
  3. HTTP Request / HTTP İsteği seçeneğini seçin.
  4. Metodu GET olarak bırakın.
  5. Aşağıdaki URL’yi girin:
GET https://jsonplaceholder.typicode.com/users/1
Enter fullscreen mode Exit fullscreen mode

Ardından Send / Gönder düğmesine tıklayın.

Yanıt panelinde şunları kontrol edin:

  • Durum kodu: 200 OK
  • Yanıt süresi
  • Yanıt boyutu
  • JSON response body

JSON’u daha okunabilir görmek için gövde görünümünü Pretty, Raw veya Preview arasında değiştirebilirsiniz.

Bir POST isteği denemek için:

  1. Metodu POST yapın.
  2. Body / Gövde sekmesine geçin.
  3. raw seçeneğini seçin.
  4. Formatı JSON olarak ayarlayın.
  5. Aşağıdaki gövdeyi ekleyin:
{
  "name": "Maria Chen",
  "email": "maria.chen@example.com"
}
Enter fullscreen mode Exit fullscreen mode

JSON gövde tipi seçildiğinde Postman genellikle Content-Type: application/json başlığını otomatik ekler. Gerekirse Headers / Başlıklar sekmesinden Authorization, Accept veya özel header’lar ekleyebilirsiniz.

HTTP durum kodlarını nasıl yorumlamanız gerektiğinden emin değilseniz, REST API’lerinin kullanması gereken HTTP durum kodları rehberine bakabilirsiniz.

İstekleri Koleksiyonlar Halinde Düzenleyin

Tek bir istek hızlı kontrol için yeterlidir. Ancak gerçek API testi genellikle birden fazla isteği kapsar:

  • Kullanıcı oluşturma
  • Kullanıcıyı getirme
  • Kullanıcıyı güncelleme
  • Kullanıcıyı silme

Postman’de bu istekleri Collection / Koleksiyon altında gruplandırabilirsiniz.

Koleksiyon oluşturmak için:

  1. Sol menüden Collections / Koleksiyonlar sekmesine gidin.
  2. + simgesine tıklayın.
  3. Koleksiyona açıklayıcı bir ad verin, örneğin: Kullanıcı API duman testleri.
  4. Her isteği Ctrl/Cmd + S ile bu koleksiyona kaydedin.
  5. İstekleri anlamlı adlarla kaydedin:
    • Kullanıcı getir
    • Kullanıcı oluştur
    • Kullanıcı güncelle
    • Kullanıcı sil

Daha düzenli bir yapı için koleksiyon içinde klasörler kullanabilirsiniz:

Kullanıcı API duman testleri
├── Auth
│   └── Login
├── Users
│   ├── Get user
│   ├── Create user
│   ├── Update user
│   └── Delete user
Enter fullscreen mode Exit fullscreen mode

Koleksiyonlar aynı zamanda paylaşım birimidir. Bir koleksiyonu JSON olarak dışa aktarabilir veya Postman Cloud kullanıyorsanız bağlantı üzerinden paylaşabilirsiniz. Ekip arkadaşlarınız koleksiyonu içe aktardığında sizinle aynı istekleri, değişkenleri ve testleri kullanabilir.

Koleksiyon düzeyinde ortak davranışlar da tanımlayabilirsiniz:

  • Pre-request Script / Ön istek betiği: Koleksiyondaki her istekten önce çalışır.
  • Tests / Test betiği: Koleksiyondaki her istekten sonra çalışır.

Örneğin tüm istekler için ortak response time kontrolü ekleyebilirsiniz:

pm.test("Response time is acceptable", function () {
    pm.expect(pm.response.responseTime).to.be.below(1000);
});
Enter fullscreen mode Exit fullscreen mode

Bu yaklaşım, aynı assertion’ı her isteğe tek tek yazmanızı engeller.

Testler Sekmesinde Assertion Yazın

Bir istek göndermek, API’nin ne döndürdüğünü gösterir. Assertion ise dönen yanıtın doğru olup olmadığını otomatik doğrular.

Postman, yanıt geldikten sonra JavaScript çalıştırır. Yeni sürümlerde bu alan genellikle Scripts / Betikler altında bulunur; eski sürümlerde Tests / Testler sekmesi olarak geçer.

Temel yapı şöyledir:

pm.test("Test adı", function () {
    // assertion
});
Enter fullscreen mode Exit fullscreen mode

Sık kullanılan assertion örnekleri:

// Durum kodunu kontrol edin
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

// Yanıt süresini kontrol edin
pm.test("Response is under 500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

// JSON gövdesindeki bir alanı kontrol edin
pm.test("User has the expected email", function () {
    const body = pm.response.json();
    pm.expect(body.email).to.eql("maria.chen@example.com");
});

// Bir başlığı kontrol edin
pm.test("Content-Type is JSON", function () {
    pm.expect(pm.response.headers.get("Content-Type"))
      .to.include("application/json");
});
Enter fullscreen mode Exit fullscreen mode

Postman’in assertion sözdizimi Chai tabanlıdır. Bu nedenle aşağıdaki ifadeleri kullanabilirsiniz:

pm.expect(value).to.eql(expectedValue);
pm.expect(value).to.include("text");
pm.expect(value).to.be.above(10);
pm.expect(value).to.be.below(500);
pm.expect(value).to.exist;
Enter fullscreen mode Exit fullscreen mode

Assertion yazarken şu pratik kuralları kullanın:

  • Her pm.test bloğunu tek bir beklentiye odaklayın.
  • Test adını davranışa göre verin, örneğin: User email is returned.
  • Sadece istemciyi gerçekten etkileyen alanları kontrol edin.
  • Rastgele veya sunucu tarafından üretilen değerlerde katı assertion yazmaktan kaçının.
  • Önce durum kodunu, sonra response body yapısını doğrulayın.

Örnek response body kontrolü:

pm.test("User response has required fields", function () {
    const body = pm.response.json();

    pm.expect(body).to.have.property("id");
    pm.expect(body).to.have.property("name");
    pm.expect(body).to.have.property("email");
});
Enter fullscreen mode Exit fullscreen mode

Postman editörünün yanındaki Snippets / Kod Parçacıkları paneli, sık kullanılan test kalıplarını hızlıca eklemek için kullanışlıdır.

Assertion tasarımı hakkında daha detaylı bilgi için API onaylamalarının nasıl iyi yazılacağına dair rehbere bakabilirsiniz. Testleri senaryo bazlı yapılandırmak istiyorsanız API test senaryosu örneği rehberi de faydalıdır.

Ortamları ve Değişkenleri Kullanın

API URL’lerini her isteğe sabit yazmak bakım maliyeti oluşturur. Örneğin staging ortamından production ortamına geçerken tüm URL’leri tek tek değiştirmeniz gerekir.

Bunun yerine Postman Environment / Ortam değişkenlerini kullanın.

Örnek ortam değişkeni:

base_url = https://jsonplaceholder.typicode.com
Enter fullscreen mode Exit fullscreen mode

Ortam oluşturmak için:

  1. Sol menüden Environments / Ortamlar bölümüne gidin.
  2. Hazırlık adında bir ortam oluşturun.
  3. base_url değişkenini ekleyin.
  4. Değer olarak şunu girin:
https://jsonplaceholder.typicode.com
Enter fullscreen mode Exit fullscreen mode

Artık isteği şöyle yazabilirsiniz:

GET {{base_url}}/users/1
Enter fullscreen mode Exit fullscreen mode

Sağ üstteki ortam seçicisinden aktif ortamı değiştirdiğinizde {{base_url}} kullanan tüm istekler otomatik olarak yeni hedefe gider.

Değişkenler, istekler arasında veri taşımak için de kullanılır. Örneğin login isteğinden dönen token’ı kaydedebilirsiniz:

pm.test("Kimlik doğrulama jetonunu kaydet", function () {
    const token = pm.response.json().token;
    pm.environment.set("auth_token", token);
});
Enter fullscreen mode Exit fullscreen mode

Sonraki isteklerde bu token’ı header olarak kullanabilirsiniz:

Authorization: Bearer {{auth_token}}
Enter fullscreen mode Exit fullscreen mode

Postman’de sık kullanılan değişken kapsamları:

Kapsam Kullanım
Environment variables Staging, production, local gibi ortama göre değişen değerler
Collection variables Belirli bir koleksiyona ait sabit değerler
Global variables Tüm workspace genelinde geçerli değerler
Local variables Sadece mevcut çalıştırma sırasında kullanılan geçici değerler

Pratik öneri:

  • base_url, auth_token gibi hedefe göre değişen değerleri environment değişkeni yapın.
  • API’ye özgü ama ortamdan bağımsız değerleri collection değişkeni yapın.
  • Global değişkenleri sınırlı kullanın; aksi halde farklı koleksiyonlar arasında beklenmeyen çakışmalar oluşabilir.

Tüm Koleksiyonu Collection Runner ile Çalıştırın

Her isteği tek tek Send / Gönder ile çalıştırmak küçük kontroller için yeterlidir. Ancak regresyon testi için tüm koleksiyonu sırayla çalıştırmanız gerekir.

Bunun için Collection Runner kullanılır.

Collection Runner ile çalıştırmak için:

  1. Koleksiyonu açın.
  2. Run / Çalıştır düğmesine tıklayın.
  3. Çalıştırılacak istekleri kontrol edin.
  4. Ortamı seçin.
  5. Iteration sayısını belirleyin.
  6. Gerekirse CSV veya JSON veri dosyası ekleyin.
  7. Run düğmesine tıklayın.

Postman istekleri yukarıdan aşağıya çalıştırır ve her isteğin testlerini yürütür.

Sonuç ekranında şunları görürsünüz:

  • Başarılı assertion sayısı
  • Başarısız assertion sayısı
  • Hangi istekte neyin bozulduğu
  • Response time bilgileri
  • Önceki çalıştırmalarla karşılaştırılabilecek run geçmişi

Sıralama önemlidir. Örneğin token gerektiren bir akışta koleksiyonu şöyle düzenleyin:

1. Login
2. Kullanıcı oluştur
3. Kullanıcı getir
4. Kullanıcı güncelle
5. Kullanıcı sil
Enter fullscreen mode Exit fullscreen mode

Login isteği önce çalışır ve auth_token değişkenini doldurur. Alttaki istekler aynı token’ı kullanır.

Veri odaklı test için CSV veya JSON dosyası ekleyebilirsiniz. Örneğin login testi için CSV:

username,password,expected_status
valid@example.com,correct-password,200
wrong@example.com,bad-password,401
empty@example.com,,400
Enter fullscreen mode Exit fullscreen mode

Test içinde beklenen durum kodunu veri dosyasından okuyabilirsiniz:

pm.test("Status code matches expected status", function () {
    pm.response.to.have.status(Number(pm.iterationData.get("expected_status")));
});
Enter fullscreen mode Exit fullscreen mode

Bu yöntemle aynı isteği kopyalamadan farklı girdi kombinasyonlarını test edebilirsiniz.

Veri odaklı API testi hakkında daha fazla örnek için CSV ve JSON ile veri odaklı API testi rehberine bakabilirsiniz. Aynı koleksiyonu GUI olmadan CI’da çalıştırmak için Postman’in Newman komut satırı aracı kullanılır; detaylar Newman ile Postman karşılaştırmasında açıklanmıştır.

Postman’in Ağırlaştığı Noktalar

Postman, keşifsel testler ve küçük-orta ölçekli test paketleri için güçlü bir araçtır. Ancak proje büyüdükçe iki yaygın sorun ortaya çıkar.

İlk sorun, otomatik assertion’ların JavaScript ile yazılmasıdır. Geliştiriciler için bu çoğu zaman sorun değildir; ancak görsel bir test akışı bekleyen QA ekipleri veya teknik olmayan ekip üyeleri için öğrenme eğrisi oluşturabilir.

İkinci sorun, API tasarımı, test, mock ve dokümantasyonun ayrı alanlarda yönetilmesidir. Bu durum zamanla API sözleşmesi ile testlerin birbirinden uzaklaşmasına neden olabilir.

Apidog, bu iş akışlarını tek bir platformda birleştiren bir API aracıdır. Postman koleksiyonlarını doğrudan içe aktarabilir. Assertion’lar görsel olarak oluşturulabilir; gerektiğinde betik kullanımı da desteklenir. Tasarım, hata ayıklama, mock, test ve dokümantasyon aynı kaynak üzerinden yönetildiği için API spesifikasyonu ile testler daha kolay senkron kalır.

Alternatifleri değerlendiriyorsanız API testi için Postman alternatifleri özetine bakabilirsiniz. Ayrıca Apidog’u indirebilir ve mevcut Postman koleksiyonunuzu içe aktararak doğrudan karşılaştırma yapabilirsiniz.

Bu, Postman’i bırakmanız gerektiği anlamına gelmez. Postman hâlâ hızlı kontroller, manuel testler ve mevcut yatırımı olan ekipler için sağlam bir seçenektir. Önemli olan, aracın güçlü olduğu kullanım alanını doğru belirlemektir.

Sıkça Sorulan Sorular

Postman’de API’leri test etmek için kod yazmam gerekiyor mu?

İstek göndermek ve yanıtları incelemek için hayır. Ancak otomatik assertion yazmak için genellikle biraz JavaScript gerekir. Postman’in testleri pm nesnesi üzerinden çalışır. Hazır kod parçacıklarını kullanarak hızlı başlayabilirsiniz; fakat yine de temel JavaScript bilgisi faydalıdır. Kodsuz, görsel assertion oluşturmak istiyorsanız Apidog gibi araçları değerlendirebilirsiniz.

Bir Postman koleksiyonu ile ortam arasındaki fark nedir?

Koleksiyon, gruplanmış API isteklerini ve testlerini tutar. Ortam ise base_url, auth_token veya client_id gibi değişkenleri tutar. Aynı koleksiyonu farklı ortamlarla çalıştırarak staging, production veya local API’leri test edebilirsiniz.

Postman testlerini CI’da otomatik olarak nasıl çalıştırırım?

Postman’in komut satırı çalıştırıcısı Newman’ı kullanabilirsiniz. Koleksiyonunuzu ve ortamınızı dışa aktarın, ardından şu komutu çalıştırın:

newman run collection.json -e environment.json
Enter fullscreen mode Exit fullscreen mode

Herhangi bir test başarısız olursa Newman sıfır olmayan exit code döndürür. CI hattınız bu sonucu kullanarak build’i başarısız sayabilir. Daha detaylı akış için CI/CD’de API testlerini otomatikleştirme rehberine bakabilirsiniz.

Postman REST API’lerinden fazlasını test edebilir mi?

Evet. Postman, HTTP ve REST dışında GraphQL, gRPC, WebSocket ve SOAP isteklerini de destekler. Assertion mantığı çoğu senaryoda kullanılabilir; ancak istek yapılandırması protokole göre değişir.

Bir istekte kaç assertion olmalı?

Yanıtın doğru olduğunu doğrulamaya yetecek kadar assertion yazın, ancak tek bir küçük değişikliğin onlarca testi bozmasına neden olacak kadar aşırıya kaçmayın. İyi bir başlangıç noktası:

  • Durum kodu
  • Yanıt süresi
  • Response body’de zorunlu alanlar
  • İstemcinin bağımlı olduğu 2-3 kritik değer

Her pm.test bloğunu tek bir beklentiye odaklayın. Böylece test kırıldığında hangi davranışın bozulduğunu hızlıca anlarsınız.

Top comments (0)