DEV Community

Cover image for API Testleri İçin En İyi Hafif Komut Satırı Araçları
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

API Testleri İçin En İyi Hafif Komut Satırı Araçları

Çoğu API test aracı, tek bir istek göndermeden önce bir pencere açmanızı, oturum açmanızı ve bir çalışma alanında tıklamanızı ister. İlk keşif için bu yaklaşım yeterli olabilir; ancak terminalde hızlıca bir istek gönderip yanıtı incelemek istiyorsanız gereksiz sürtünme yaratır. Hafif komut satırı araçları bu sırayı tersine çevirir: arayüz aradan çekilir ve istek doğrudan iş akışının merkezi olur.

Apidog'u bugün deneyin

Buradaki “hafif” ifadesi yalnızca az özellik anlamına gelmez. Küçük bir kurulum, hızlı başlangıç, düşük yapılandırma ihtiyacı ve terminale uygun çıktı anlamına gelir. İdeal olarak araç tek bir ikili dosya, hızlı bir npx komutu veya basit bir paket kurulumu ile çalışır; çıktıyı da jq, grep ya da CI adımlarına aktarabilirsiniz. Barındırılan GUI araçlarını da içeren daha geniş bir karşılaştırma için en iyi ücretsiz API test araçları derlemesine bakın.

Bu yazıda REST ve HTTP API'lerini test etmek için sekiz hafif CLI aracını inceleyeceğiz. Araçlar, en manuel HTTP istemcilerinden CI'da tam test paketleri çalıştıran çözümlere doğru sıralanmıştır. Her bölümde kurulum komutu, çalıştırılabilir örnek, uygun kullanım alanı ve sınırlamalar bulunur.

API Testi İçin Bir CLI Aracını “Hafif” Yapan Nedir?

Bir aracın terminalde çalışması, tek başına hafif olduğu anlamına gelmez. Bu liste için araçları şu dört ölçüte göre değerlendirebilirsiniz:

  • Küçük ayak izi: Tek ikili dosya, pip/npm paketi veya tek satırlık npx komutu. Ek bir servis veya karmaşık kurulum gerektirmez.
  • Hızlı başlangıç: Araç açılır açılmaz isteği gönderir. Rust ve Go ile derlenmiş ikili dosyalar burada avantajlıdır.
  • Düşük yapılandırma: İlk isteği göndermek için proje dosyası, hesap ya da oturum açma zorunlu değildir.
  • Terminal-yerel çıktı: Sonuçları kolayca okuyabilir, başka komutlara yönlendirebilir ve CI için anlamlı çıkış kodları kullanabilirsiniz.

Manuel uç nokta keşfine odaklanıyorsanız, REST API testi için curl alternatifleri rehberi de faydalı olabilir.

curl: Zaten Yüklü Olan Temel Araç

curl, çoğu macOS ve Linux sisteminde, ayrıca modern Windows kurulumlarında zaten bulunur. Bu nedenle en hafif kurulum çoğu zaman hiçbir şey kurmamaktır.

Önce sürümü kontrol edin, ardından JSON içeren bir POST isteği gönderin:

curl --version

# JSON gönder ve yalnızca HTTP durum kodunu yazdır
curl -s -o /dev/null -w "%{http_code}\n" \
  -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"user":"acme","plan":"pro"}'
Enter fullscreen mode Exit fullscreen mode

Yanıt gövdesini JSON olarak incelemek için jq ekleyin:

curl -s https://httpbin.org/get | jq .
Enter fullscreen mode Exit fullscreen mode

En iyi kullanım: Tek seferlik istekler, shell betikleri ve yeni araç yükleyemediğiniz ortamlar.

Sınırlama: Başlıklar, gövde ve doğrulamalar çoğunlukla elle yazılır. JSON çıktısını biçimlendirmek veya yanıtı doğrulamak için jq ve shell koşulları eklemeniz gerekir. curl güçlü bir istemcidir; tek başına test çalıştırıcısı değildir.

HTTPie: İnsanlar İçin curl

HTTPie, curl ile yaptığınız HTTP çağrılarını daha okunabilir bir sözdizimiyle yazmanızı sağlar. Komutu http olarak çalışır; başlıklar ve JSON alanları basit key=value çiftleriyle tanımlanır.

python -m pip install httpie
# veya: brew install httpie

# age:=24 sayısal değer, name= ise string gönderir
http POST httpbin.org/post name=acme age:=24 plan=pro
Enter fullscreen mode Exit fullscreen mode

Yetkilendirme başlığı eklemek de okunabilirdir:

http GET https://api.example.com/users \
  Authorization:"Bearer $TOKEN"
Enter fullscreen mode Exit fullscreen mode

En iyi kullanım: API'yi terminalden elle keşfederken okunabilir istek ve renkli çıktı istediğiniz durumlar.

Sınırlama: Python çalışma zamanı gerektirir. Derlenmiş bir ikili dosyaya göre başlangıcı daha yavaş olabilir. Ayrıca curl gibi, yanıtı varsayılan olarak test etmez; doğrulama mantığını sizin eklemeniz gerekir.

xh: HTTPie Sözdizimi, Tek İkili Dosya

xh, HTTPie'nin kullanıcı dostu sözdizimini Rust ile uygular. Tek bir ikili dosya olarak dağıtılır; Python veya Node.js çalışma zamanı gerektirmez. HTTP/2 desteği sunar ve --curl seçeneğiyle eşdeğer curl komutunu üretebilir.

brew install xh
# veya: cargo install xh --locked

xh POST httpbin.org/post name=acme age:=24 plan=pro
Enter fullscreen mode Exit fullscreen mode

Çalıştırılan isteğin curl karşılığını görmek için:

xh --curl POST httpbin.org/post name=acme age:=24
Enter fullscreen mode Exit fullscreen mode

En iyi kullanım: HTTPie ergonomisini sevip daha hızlı başlayan, çalışma zamanı gerektirmeyen bir araç isteyen geliştiriciler.

Sınırlama: HTTPie'nin tüm özelliklerini ve eklenti ekosistemini kapsamaz. Ayrıca bu da bir HTTP istemcisidir; yerleşik bir doğrulama motoru değildir.

Hurl: CI'da Çalışan Düz Metin Testleri

Hurl ile “istek gönderme” aşamasından “yanıtı doğrulama” aşamasına geçersiniz. İstekleri ve beklentileri .hurl dosyalarında saklayabilir, bunları sürüm kontrolüne ekleyebilir ve CI içinde çalıştırabilirsiniz.

brew install hurl
# veya: cargo install --locked hurl

cat > login.hurl <<'EOF'
POST https://httpbin.org/post
{ "user": "acme", "plan": "pro" }

HTTP 200
[Asserts]
jsonpath "$.json.user" == "acme"
EOF

hurl --test login.hurl
Enter fullscreen mode Exit fullscreen mode

Başarısız bir assertion, hurl --test komutunun sıfırdan farklı çıkış koduyla tamamlanmasına neden olur. Bu nedenle doğrudan CI adımı olarak kullanılabilir:

- name: API smoke test
  run: hurl --test login.hurl
Enter fullscreen mode Exit fullscreen mode

En iyi kullanım: Sözleşme kontrolleri, smoke testler ve sürüm kontrolünde okunabilir metin dosyaları olarak tutulacak HTTP testleri.

Sınırlama: HTTP odaklıdır. gRPC yönlendirme veya gerçekçi yük üretimi için uygun değildir. Karmaşık akışlar büyüdükçe .hurl dosyası sayısı ve değişken yönetimi artabilir.

Step CI: Çok Adımlı Akışlar İçin YAML

Step CI, API iş akışlarını tek bir YAML dosyasında tanımlamanıza yardımcı olur. REST, GraphQL, gRPC, tRPC ve SOAP akışlarını çalıştırabilir; ayrıca OpenAPI şemasına göre doğrulama yapabilir.

npm install -g stepci

# workflow.yml adımları, yakalanan değişkenleri ve kontrolleri tanımlar
stepci run workflow.yml
Enter fullscreen mode Exit fullscreen mode

Özellikle şu tür senaryolarda kullanışlıdır:

  1. Giriş isteği gönderin.
  2. Dönen erişim token'ını yakalayın.
  3. Token'ı sonraki isteğin Authorization başlığında kullanın.
  4. Yanıt durumunu ve gövdesini doğrulayın.

En iyi kullanım: Birden fazla API çağrısından oluşan iş akışlarını YAML ile tanımlamak ve aynı dosyayı yerelde ile CI'da çalıştırmak isteyen ekipler.

Sınırlama: Node.js çalışma zamanı gerektirir; bu nedenle Rust veya Go ikili dosyalarından daha ağırdır. Bir işlem hattına bağlamadan önce projenin güncel bakım ve sürüm aktivitesini kontrol edin. Daha geniş bağlam için API test stratejileri yazısına bakabilirsiniz.

k6: Terminalden Hafif Yük Testi

k6, “yanıt doğru mu?” sorusundan çok “servis yük altında dayanır mı?” sorusuna yanıt verir. Go ile yazılmıştır, tek ikili dosya olarak çalışır ve test senaryolarını JavaScript ile tanımlarsınız.

brew install k6
# veya Docker ile: docker run grafana/k6

cat > load.js <<'EOF'
import http from 'k6/http';
import { check } from 'k6';

export const options = {
  vus: 10,
  duration: '30s',
  thresholds: {
    http_req_duration: ['p(95)<500'],
  },
};

export default function () {
  const res = http.get('https://httpbin.org/get');

  check(res, {
    'status is 200': (r) => r.status === 200,
  });
}
EOF

k6 run load.js
Enter fullscreen mode Exit fullscreen mode

Bu örnek 30 saniye boyunca 10 sanal kullanıcıyla istek gönderir ve isteklerin %95'inin 500 ms altında tamamlanmasını bekler. Eşik aşılırsa k6, CI'ın başarısızlık olarak değerlendirebileceği 99 çıkış koduyla tamamlanır.

En iyi kullanım: Performans, yük ve gecikme eşiklerini CI içinde kontrol etmek.

Sınırlama: Tekil API yanıtlarını elle incelemek için tasarlanmış bir istemci değildir. Anlamlı senaryolar oluşturmak için k6 JavaScript API'sini öğrenmeniz gerekir.

Newman: Postman Koleksiyonlarını Başsız Çalıştırma

Ekibiniz Postman koleksiyonları kullanıyorsa Newman, bu koleksiyonları GUI olmadan terminalde ve CI içinde çalıştırır. Postman'dan koleksiyonu ve gerekiyorsa ortamı JSON olarak dışa aktarın.

npm install -g newman

# collection.json Postman'dan dışa aktarılmış koleksiyondur
# -e ile ortam değişkenlerini aktarabilirsiniz
newman run collection.json -e staging.json
Enter fullscreen mode Exit fullscreen mode

CI kullanımında komutu doğrudan bir adım olarak ekleyin:

- name: Run Postman collection
  run: newman run collection.json -e staging.json
Enter fullscreen mode Exit fullscreen mode

Newman, koleksiyondaki bir test başarısız olduğunda sıfırdan farklı çıkış kodu döndürür.

En iyi kullanım: Postman'da oluşturulmuş mevcut test koleksiyonlarını CI'da başsız çalıştırmak.

Sınırlama: Node.js gerektirir ve yalnızca Postman koleksiyon formatına dayanır. Test yazımı hâlâ büyük ölçüde Postman ekosisteminde gerçekleşir.

Apidog CLI: Senaryoları Başsız Çalıştırın ve CI'ı Çıkış Koduyla Yönlendirin

Apidog CLI, Apidog içinde görsel olarak oluşturduğunuz test senaryolarını terminalden çalıştırmanızı sağlayan apidog-cli npm paketidir. İstek zincirleme, değişken çıkarma ve doğrulama gibi senaryo tasarımını GUI'de yapabilir; ardından aynı senaryoyu CI'da başsız olarak çalıştırabilirsiniz.

npm install -g apidog-cli

apidog login --with-token <YOUR_TOKEN>

# Senaryonuzun CI/CD sekmesinden üretilen komutu kopyalayın
apidog run -t <scenario_id> -e <env_id> -r cli
Enter fullscreen mode Exit fullscreen mode

Senaryo ve ortam kimliklerini elle tahmin etmeyin. Apidog'da test senaryosunu açın, CI/CD sekmesine gidin ve kimlikleri önceden doldurulmuş apidog run komutunu doğrudan kopyalayın.

Terminal çıktısına ek olarak JUnit raporu üretmek için:

apidog run -t <scenario_id> -e <env_id> -r cli,junit
Enter fullscreen mode Exit fullscreen mode

apidog run, tüm doğrulamalar geçtiğinde 0, herhangi bir doğrulama başarısız olduğunda sıfırdan farklı bir kod döndürür. Bu davranış, komutu CI geçidi olarak kullanmanızı sağlar. Çıktı ayrıca agentHints.nextSteps alanını içeren yapılandırılmış JSON sağlayarak yapay zeka kodlama araçlarının sonuçları işlemesini kolaylaştırır.

En iyi kullanım: Karmaşık ve çok adımlı senaryoları görsel bir düzenleyicide tasarlayıp bunları terminal, CI veya bir aracı üzerinden başsız çalıştırmak.

Sınırlama: curl veya xh gibi bağımsız bir HTTP istemcisi değildir; Apidog projesinde tuttuğunuz senaryolara bağlıdır. Tam komutlar için Apidog CLI tam kılavuzuna, apidog run komut referansına ve Apidog CLI ile komut satırından REST API testi rehberine bakın.

Nasıl Seçilir?

Doğru araç, yalnızca istek göndermek mi yoksa doğrulama, iş akışı ve yük testi mi yapmak istediğinize bağlıdır.

Araç En iyi kullanım Kurulum Açık kaynak mı? Notlar
curl Tek seferlik istekler, betikler Önceden yüklü Evet (MIT/curl) Evrensel; doğrulamalar elle yazılır
HTTPie Okunabilir manuel istekler pip install httpie Evet (BSD-3) Kullanıcı dostu sözdizimi; Python çalışma zamanı
xh HTTPie deneyimi, hızlı başlangıç brew install xh Evet (MIT) Tek Rust ikili dosyası
Hurl Düz metin HTTP testleri brew install hurl Evet (Apache-2.0) --test CI'ı yönlendirir
Step CI Çok adımlı YAML akışları npm i -g stepci Evet (MPL-2.0) REST/GraphQL/gRPC; Node.js çalışma zamanı
k6 Yük ve performans brew install k6 Evet (AGPL-3.0) JavaScript betikleri; eşikler çalıştırmayı başarısız kılar
Newman CI'da Postman koleksiyonları npm i -g newman Evet (Apache-2.0) Postman JSON'unu başsız çalıştırır
Apidog CLI Görsel olarak oluşturulmuş senaryoları başsız çalıştırma npm i -g apidog-cli Hayır (ücretsiz katman) Çıkış kodu geçidi; aracıya uygun JSON

Pratik seçim akışı şu şekilde olabilir:

  • Tek bir uç noktayı hızlıca çağırmak için curl veya xh kullanın.
  • İstekleri insan tarafından kolay okunacak biçimde yazmak için HTTPie seçin.
  • HTTP testlerini depoda saklayıp CI'da çalıştırmak için Hurl kullanın.
  • Giriş, token alma ve sonraki çağrılarda token kullanma gibi çok adımlı akışlar için Step CI değerlendirin.
  • Performans ve gecikme eşiklerini ölçmek için k6 kullanın.
  • Testleriniz zaten Postman'daysa Newman ile başlayın.
  • Senaryoları görsel olarak oluşturup her yerde başsız çalıştırmak istiyorsanız Apidog CLI'ı kullanın.

Tamamen arayüzsüz bir iş akışını değerlendiriyorsanız, başsız API test aracı rehberi de testleri herhangi bir GUI olmadan çalıştırma seçeneklerini ele alır.

Hafif Araçlar Nerede İşe Yarar?

Hafif CLI araçları, GUI'nin iş akışını yavaşlattığı durumlarda öne çıkar:

  • Terminalde hata ayıklarken,
  • Yerel ortamda hızlı smoke test çalıştırırken,
  • CI içinde insan müdahalesi olmadan doğrulama yaparken,
  • Bir yapay zeka aracısının test komutunu çalıştırıp sonucu değerlendirmesi gerektiğinde.

curl ve xh, manuel geri bildirim döngüsünü kısa tutar. Hurl ve Step CI, özel istekleri tekrarlanabilir testlere dönüştürür. k6 performans sorularını yanıtlar. Newman, Postman'da mevcut olan testleri çalıştırır.

Apidog CLI ise senaryo oluşturma ile bu senaryoyu her yerde çalıştırma arasındaki boşluğu kapatır. Senaryoyu Apidog içinde bir kez tasarlayın; ardından apidog run komutunu terminalinizde veya CI yapılandırmanızda çalıştırın. Başarı ya da başarısızlık, doğrudan komutun çıkış koduyla belirlenir. Apidog'u indirin, bir senaryo oluşturun ve apidog run komutunu CI hattınıza ekleyin.

Top comments (0)