DEV Community

Cover image for Apidog ve Schemathesis Karşılaştırması: Fonksiyonel ve Kontrat Testi ile Özellik Tabanlı Fuzzing
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

Apidog ve Schemathesis Karşılaştırması: Fonksiyonel ve Kontrat Testi ile Özellik Tabanlı Fuzzing

Apidog ve Schemathesis'i karşılaştırıyorsanız, büyük olasılıkla CI hattınızda hangi aracı nereye koyacağınıza karar veriyorsunuz. Kısa cevap: aynı problemi çözmüyorlar. Schemathesis, şemadan uç durumlar üreten özellik tabanlı fuzz test aracıdır. Apidog ise API tasarımı, fonksiyonel test, sözleşme testi, mock, dokümantasyon ve CI/CD çalıştırmalarını tek çalışma alanında toplar. Daha geniş bağlam için API testleri nihai kılavuzu bu kategorileri açıklar; Schemathesis de açık kaynak belgelerini ve kodunu GitHub'da yayınlar.

Apidog'u bugün deneyin

Kısa versiyon

Schemathesis özellik tabanlı bir fuzz test aracıdır. Ona bir OpenAPI veya GraphQL şeması verirsiniz; API'nizin çöktüğü, belgelenmemiş veri döndürdüğü ya da kabul etmemesi gereken değerleri kabul ettiği durumları bulmak için çok sayıda giriş üretir. Python'ın özellik tabanlı test kütüphanesi olan Hypothesis üzerine kuruludur.

Schemathesis demo

Apidog hepsi bir arada API platformudur. API'leri görsel olarak tasarlayabilir, iddialarla fonksiyonel ve sözleşme testleri yazabilir, testleri CSV veya JSON verileriyle çalıştırabilir, endpoint'leri mock'layabilir ve apidog run komutuyla CI/CD hattınıza bağlayabilirsiniz. REST, gRPC, WebSocket, SSE, SOAP ve GraphQL tek çalışma alanında yönetilir.

Pratik ayrım şu:

  • Schemathesis: Şemadan otomatik uç durumlar üretir.
  • Apidog: Ekibin bilerek yazdığı, tekrar edilebilir ve sürdürülebilir test paketini yönetir.

Bu yüzden en sağlıklı kurulum genellikle ikisini birlikte kullanmaktır.

Schemathesis nerede iyi çalışır?

Schemathesis, şemanızı sözleşme kabul eder ve bu sözleşmeyi zorlamaya çalışır. Tanımlı tiplerden, formatlardan ve kısıtlamalardan test girdileri üretir, istekleri gönderir ve yanıtları spesifikasyonla karşılaştırır.

Özellikle şunları yakalamak için kullanışlıdır:

  • Manuel testlerde düşünülmeyen uç durum girdilerinin tetiklediği 500 hataları.
  • Belgelenmiş şemayla eşleşmeyen yanıtlar.
  • Yanlış tipler, eksik zorunlu alanlar veya beklenmeyen alanlar.
  • Geçersiz veri kabul edilmesine rağmen 2xx dönen doğrulama açıkları.

Basit bir CI veya lokal kullanım akışı şöyle olabilir:

schemathesis run openapi.yaml --base-url http://localhost:8000
Enter fullscreen mode Exit fullscreen mode

Ya da canlı bir OpenAPI dokümanından çalıştırabilirsiniz:

schemathesis run http://localhost:8000/openapi.json
Enter fullscreen mode Exit fullscreen mode

Schemathesis'in güçlü tarafı, tek tek test senaryosu yazmanızı gerektirmemesidir. Siz şemayı verirsiniz; araç giriş alanını keşfeder. Bir hata bulduğunda girdiyi küçülterek minimal, tekrar üretilebilir örneğe indirir. Bu, hata ayıklarken büyük fark yaratır.

Örneğin büyük bir JSON payload yerine hatayı tetikleyen en küçük örneği görürsünüz. Ayrıca işlemleri zincirleyebilir; bir yanıttan gelen veriyi sonraki isteği oluşturmak için kullanabilir. Böylece sadece izole endpoint çağrılarını değil, daha gerçekçi API akışlarını da test edebilir.

Schemathesis şu ortamlarda çalışabilir:

  • CLI
  • Docker
  • GitHub Actions
  • pytest
  • OpenAPI 2.0, 3.0, 3.1
  • GraphQL

Sınırları da nettir: Schemathesis bir tasarım, mock veya ekip işbirliği platformu değildir. Var olan bir şema bekler, Python/CLI merkezlidir ve özel iş mantığı iddialarını görsel olarak yönetmek için tasarlanmamıştır. Bu bir eksik değil; aracın kapsamıdır.

Apidog nerede iyi çalışır?

Apidog, fuzzing katmanının etrafındaki API yaşam döngüsünü yönetir. Bir ekip için günlük API iş akışında şunları sağlar:

  • OpenAPI destekli görsel API tasarımı.
  • Şemayı doğruluk kaynağı olarak kullanma.
  • Görsel iddialarla fonksiyonel test oluşturma.
  • Adımlar arasında veri taşıyan test senaryoları kurma.
  • Canlı API'nin kabul edilen şemaya uyduğunu doğrulayan sözleşme testleri.
  • CSV veya JSON üzerinden veri odaklı test çalıştırma.
  • Backend hazır olmadan endpoint mock'lama.
  • apidog run komutu ile CI/CD entegrasyonu.
  • REST, gRPC, WebSocket, SSE, SOAP ve GraphQL testlerini tek yerden yönetme.

Örneğin aynı senaryoyu farklı veri setleriyle çalıştırmak için tipik yaklaşım şöyledir:

apidog run -d test-data.csv
Enter fullscreen mode Exit fullscreen mode

veya JSON veriyle:

apidog run -d test-data.json
Enter fullscreen mode Exit fullscreen mode

Bu model, özellikle şu tarz testler için uygundur:

  • "Geçerli payload ile sipariş oluşturulduğunda 201 dönmeli."
  • "Süresi dolmuş token ile istek atıldığında 401 dönmeli."
  • "Ödeme akışında sepet ID'si ilk adımdan sonraki adıma aktarılmalı."
  • "Canlı API yanıtı OpenAPI sözleşmesiyle uyumlu olmalı."

Buradaki avantaj, Apidog'un Schemathesis'ten daha iyi fuzz test yapması değildir. Apidog, özellik tabanlı fuzz test aracı değildir. Avantajı; ekip tarafından sahiplenilen fonksiyonel testler, sözleşme testleri, mock, dokümantasyon ve çok protokollü test yönetimini tek akışta toplamasıdır.

Önemli ayrım: Apidog, rastgele girdiler gönderen maymun testini destekler. Ancak bu, Schemathesis'in yaptığı özellik tabanlı test ile aynı şey değildir. Maymun testi rastgele ve daha yapılandırılmamış bir yaklaşımdır. Schemathesis ise şemadaki tiplerden ve kısıtlamalardan stratejik girdiler üretir.

Kafa kafaya karşılaştırma

Yetenek Apidog Schemathesis
Ana iş Fonksiyonel test, sözleşme testi, tasarım, mock, dokümantasyon Şemadan özellik tabanlı fuzz test
Test yazma Görsel, kodsuz iddialar ve senaryolar Şemadan otomatik üretim; kodda özellikler
Giriş stratejisi Kasıtlı senaryolar + CSV/JSON veri odaklı test Şemanın giriş alanından üretilen girdiler
Bilinmeyen uç durumları bulma Sınırlı; maymun testi vardır ama özellik tabanlı değildir Evet, temel gücü budur
Şema/sözleşme kontrolleri Evet, sözleşme testi Evet, yanıtları spesifikasyonla doğrular
Protokoller REST, gRPC, WebSocket, SSE, SOAP, GraphQL OpenAPI REST + GraphQL
Mock Dahili mock desteği Hayır
API tasarımı + dokümantasyon Görsel tasarımcı + otomatik dokümantasyon Hayır
CI/CD Herhangi bir hatta apidog run CLI, Docker, GitHub Actions, pytest
Arayüz Masaüstü uygulaması + CLI CLI / Python kütüphanesi
Hedef kitle Geliştiriciler, QA, teknik liderler, frontend geliştiriciler, teknik yazarlar Python/CLI ile rahat çalışan mühendisler

Özet: Apidog geniş kapsamlı ve niyetli testler için uygundur. Schemathesis ise dar bir alanda çok derindir: şemadan uç durum üretmek.

İkisini birlikte kullanma modeli

Seçim yapmak zorunda değilsiniz. Sağlıklı bir API test stratejisinde roller şöyle ayrılabilir.

1. Apidog'u kasıtlı test katmanı için kullanın

Apidog'da ekibin açıkça önem verdiği iş senaryolarını yönetin:

  • Başarılı kullanıcı kaydı.
  • Token süresi dolduğunda yetkilendirme hatası.
  • Sipariş oluşturma ve ödeme akışı.
  • Negatif validasyon senaryoları.
  • Sözleşmeye uygunluk kontrolleri.
  • Mock endpoint'ler.
  • API dokümantasyonu.

Örnek CI adımı:

name: Apidog API Tests

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  apidog-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Apidog tests
        run: apidog run -d test-data.csv
Enter fullscreen mode Exit fullscreen mode

Bu katman deterministik olmalıdır. Yani her pull request'te çalışmalı ve başarısız olursa merge'i engellemelidir.

2. Schemathesis'i üretken fuzz katmanı için kullanın

Aynı OpenAPI veya GraphQL şemasını Schemathesis'e verin. Amaç, elle yazılmış testlerin kaçırdığı uç durumları bulmaktır.

Örnek GitHub Actions işi:

name: Schemathesis Fuzz Tests

on:
  schedule:
    - cron: "0 2 * * *"
  workflow_dispatch:

jobs:
  schemathesis:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Schemathesis
        run: pip install schemathesis

      - name: Run fuzz tests
        run: schemathesis run openapi.yaml --base-url http://localhost:8000
Enter fullscreen mode Exit fullscreen mode

Bu işi ayrı veya gece çalışan bir aşama olarak konumlandırmak genellikle daha pratiktir. Fuzz testleri daha uzun sürebilir ve deterministik fonksiyonel geçit kadar sessiz olmayabilir.

3. Şemayı ortak sözleşme olarak tutun

İki aracın ortak zemini şemadır.

  • Apidog, OpenAPI belirtimini tasarım, mock ve sözleşme testi için kullanır.
  • Schemathesis, aynı belirtimden test girdileri üretir.

Bu nedenle şema kalitesi doğrudan test kalitesidir. Eksik, eski veya yanlış bir OpenAPI dosyası iki aracı da zayıflatır. Şemayı güncel tutmak, her iki katmana da aynı anda yatırım yapmak demektir.

Pratik kontrol listesi:

  • Yeni endpoint eklenince OpenAPI şeması güncelleniyor mu?
  • Zorunlu alanlar doğru işaretlenmiş mi?
  • Yanıt şemaları gerçek API ile uyumlu mu?
  • Hata yanıtları dokümante edilmiş mi?
  • Enum, format, minimum/maximum gibi kısıtlar belirtilmiş mi?
  • CI'da sözleşme testi çalışıyor mu?

Önerilen CI yapısı

Basit ve sürdürülebilir bir kurulum şöyle olabilir:

Pull Request
├─ Lint / build
├─ Unit tests
├─ Apidog functional tests
├─ Apidog contract tests
└─ Merge engeli

Nightly
├─ Schemathesis fuzz tests
└─ Rapor / issue oluşturma
Enter fullscreen mode Exit fullscreen mode

Bu ayrım gürültüyü azaltır:

  • PR hattında deterministik testler çalışır.
  • Gece hattında daha keşif odaklı fuzz testleri çalışır.
  • İki taraf da aynı OpenAPI/GraphQL şemasını kullanır.

Sıkça sorulan sorular

Apidog, Schemathesis'e alternatif midir?

Kısmen. Eğer özellikle şemadan üretilen özellik tabanlı fuzz test istiyorsanız, Apidog doğrudan Schemathesis'in yerine geçmez. Bunu yapmaz.

Ancak "alternatif" derken API tasarımı, fonksiyonel testler, sözleşme testi, mock, dokümantasyon ve CI için tek platformu kastediyorsanız, Apidog yaşam döngüsünün daha büyük bir kısmını kapsar. Daha gerçekçi çerçeve: birbirlerinin yerine değil, birbirlerini tamamlarlar.

Fonksiyonel taraf için Apidog'da sözleşme testinin nasıl çalıştığına bakabilirsiniz.

Özellik tabanlı test ile fonksiyonel API testi arasındaki fark nedir?

Fonksiyonel test, belirli ve bilinen senaryoları doğrular:

Bu girdi verildiğinde bu çıktı dönmeli.
Enter fullscreen mode Exit fullscreen mode

Özellik tabanlı test ise çok sayıda üretilmiş girdi üzerinde genel özellikleri kontrol eder:

API hiçbir zaman 500 dönmemeli.
Her yanıt belirtilen şemayla eşleşmeli.
Geçersiz veri 2xx ile kabul edilmemeli.
Enter fullscreen mode Exit fullscreen mode

Fonksiyonel testler tasarladığınız davranışı doğrular. Özellik tabanlı testler öngörmediğiniz davranışları bulur. İkisine de ihtiyaç vardır.

Apidog fuzz testi yapıyor mu?

Apidog rastgele girdiler gönderen maymun testini destekler, ancak bu özellik tabanlı fuzz test değildir. Özellik tabanlı test, şemanızın tiplerinden ve kısıtlamalarından stratejik girdiler üretir ve hataları minimal örneklere indirir.

Bu özel yetenek için doğru araç Schemathesis'tir. Apidog'un gücü; kasıtlı, veri odaklı, çok protokollü test paketi ile tasarım ve mock katmanıdır.

İkisini aynı CI hattında çalıştırabilir miyim?

Evet. Önerilen ayrım şu şekildedir:

  • apidog run ile fonksiyonel ve sözleşme testlerini PR hattında engelleyici geçit olarak çalıştırın.
  • Schemathesis'i ayrı bir CI işi veya gece aşaması olarak çalıştırın.
  • İki araca da aynı OpenAPI veya GraphQL şemasını verin.

Böylece test tanımlarını iki kez elle yönetmezsiniz.

Sonuç

Schemathesis güçlü bir özellik tabanlı fuzz test aracıdır. Elle yazılmış testlerin kaçırdığı uç durum hatalarını doğrudan şemanızdan bulur.

Apidog ise bunun etrafındaki platformdur: görsel API tasarımı, fonksiyonel testler, sözleşme testleri, veri odaklı çalıştırmalar, mock, CI/CD ve REST, gRPC, WebSocket, SSE, SOAP ve GraphQL desteği.

En pratik model şudur:

  • Kasıtlı ve sürdürülebilir test paketi için Apidog'u indirin.
  • Üretken fuzz test için Schemathesis kullanın.
  • Ortak sözleşme olarak OpenAPI veya GraphQL şemanızı güncel tutun.

Apidog'u ücretsiz deneyebilir ve fonksiyonel testlerinizi Apidog'da oluşturduktan sonra CI hattınıza tek komutla bağlayabilirsiniz.

Top comments (0)