Schemathesis Nedir? OpenAPI Spesifikasyonundan Özellik Tabanlı API Testi

Schemathesis nedir? OpenAPI veya GraphQL belirtimlerinizi st run aracılığıyla binlerce uç durum testine dönüştüren, özellik tabanlı bir API test aracıdır.

Ashley Innocent

Ashley Innocent

24 June 2026

Schemathesis Nedir? OpenAPI Spesifikasyonundan Özellik Tabanlı API Testi

Kurumsal İçin Apidog

Şirket İçi (On-Premises) Dağıtım

SSO ve RBAC

SOC 2 Uyumlu

Apidog Enterprise'ı Keşfedin

Bir OpenAPI veya GraphQL şemanız varsa, Schemathesis, tek bir doğrulama ifadesi yazmanıza gerek kalmadan bunu binlerce test senaryosuna dönüştürebilir. Şartnameyi okur, çeşitli ve geçerli girdiler oluşturur, bunları API'nize gönderir ve yanıtların sözleşmeyi nerede ihlal ettiğini rapor eder. Bu kılavuz, Schemathesis'in ne olduğunu, nasıl kurulup çalıştırılacağını, özellik tabanlı testin aslında ne anlama geldiğini ve sözleşme testi iş akışının yanı sıra Apidog'daki işlevsel testlerle nasıl birleştiğini açıklar.

button

Schemathesis Nedir?

Schemathesis, bir şemadan otomatik olarak API testleri oluşturan açık kaynaklı bir Python aracıdır. Bunu bir OpenAPI veya GraphQL tanımına yönlendirirsiniz ve zaten tanımladığınız türlerden, biçimlerden ve kısıtlamalardan test senaryoları oluşturur. Python için özellik tabanlı test kütüphanesi olan Hypothesis üzerine inşa edilmiştir ve MIT lisansı altında dağıtılmaktadır.

Temel fikir basit. Şartnameniz zaten geçerli bir isteğin ve yanıtın nasıl göründüğünü açıklıyor. Schemathesis bu açıklamayı bir doğruluk kaynağı olarak kabul eder ve çalışan API'nizin buna gerçekten uyup uymadığını kontrol eder. API 500 hatası döndürdüğünde, beyan edilen şemayı ihlal eden bir yanıt gönderdiğinde veya reddetmesi gereken bir girişi kabul ettiğinde, Schemathesis bunu işaretler.

Bunu komut satırından schemathesis run (veya daha kısa takma adı olan st run) ile çalıştırırsınız. CLI yerine pytest'ten yönlendirmek isterseniz bir Python entegrasyonu da mevcuttur. Çoğu ekip, neredeyse hiç kurulum gerektirmediği için CLI ile başlar.

Özellik Tabanlı Test Ne Anlama Geliyor?

Çoğu API testi örnek tabanlıdır. Bir istek yazarsınız, belirli bir yanıtı onaylarsınız ve test o tek durumda geçer veya başarısız olur. Bu faydalıdır, ancak yalnızca test yazmayı düşündüğünüz hataları yakalarsınız.

Özellik tabanlı test yaklaşımı tersine çevirir. Tek bir sabit örnek yerine, her zaman geçerli olması gereken bir özelliği tanımlarsınız, ardından aracın bunu bozmaya çalışmak için yüzlerce girdi oluşturmasına izin verirsiniz. Schemathesis için özellik kabaca şudur: “Hiçbir geçerli istek sunucuyu çökertmemeli veya şemayı ihlal eden bir yanıt üretmemelidir.”

Schemathesis, şartnamenizdeki kısıtlamalardan girdiler oluşturur. Bir alan, minimum 1 olan bir tamsayı ise, 1'i, büyük sayıları, sınır değerlerini ve saf doğrulamayı yanıltabilecek türden girdileri deneyecektir. Bir test başarısız olduğunda, Hypothesis girdiyi hatayı hala yeniden üreten en küçük duruma kadar küçültür, böylece 4KB'lık rastgele bir yük yerine minimal, okunabilir bir yeniden üretim elde edersiniz.

Bu, bir arayüze neyin çöktüğünü görmek için rastgele girdiler atan maymun testinden farklıdır. Özellik tabanlı test yapılandırılmıştır. Şemayı, makul ve hedeflenmiş girdiler oluşturmak için kullanır ve şartname kendisine ne söylediği için doğru sonucun neye benzediğini bilir.

Schemathesis Kurulumu ve Çalıştırılması

Schemathesis bir Python paketidir, bu yüzden Python 3 ve pip'e ihtiyacınız var. Normal yolla kurun:

pip install schemathesis

uv kuruluysa uvx schemathesis kullanarak kalıcı bir kurulum olmadan da çalıştırabilirsiniz. Kurulduktan sonra, temel komut bir şemayı ve bir temel URL'yi işaret eder:

st run http://127.0.0.1:8000/openapi.json

Şemanız bir URL yerine diskte yaşıyorsa, dosya yolunu geçirin ve Schemathesis'e canlı API'nin nerede olduğunu söyleyin:

st run ./openapi.yaml --url http://127.0.0.1:8000

Kimlik doğrulaması olan bir API için bir başlık ekleyin:

st run http://127.0.0.1:8000/openapi.json \
  --header 'Authorization: Bearer your-token'

Schemathesis, şartnamedeki her işlemi keşfeder, her biri için senaryolar oluşturur ve hangi kontrollerin geçtiği ve hangilerinin başarısız olduğu hakkında bir özet yazdırır. Başarısızlıklar, gönderdiği tam istek ile birlikte gelir, böylece bunları curl ile veya herhangi bir API istemcisinde tekrar oynatabilirsiniz. Ana sürümler arasında bayrak adları ve varsayılanlar değiştiği için, bu blog parçasındaki bilgilere güvenmek yerine yüklü sürümünüze karşı st run --help'i kontrol edin.

Schemathesis Neleri Yakalar?

Varsayılan kontroller, şartnamenizin vaat ettikleri ile sunucunuzun yaptıkları arasındaki boşluğu hedefler. İşte genellikle ortaya çıkanlar.

Sorun Nasıl Görünür
Sunucu hataları Bir istek, işlenmiş bir 4xx veya geçerli bir yanıt yerine 500 hatasını tetikler
Şema ihlalleri Yanıt gövdesi, o durum kodu için belirttiğiniz şemayla eşleşmez
Durum kodu uyuşmazlıkları API, şartnamenin hiç belgelemediği bir durum kodu döndürür
İçerik türü kayması Yanıtın içerik türü, şartnamenin belirttiğiyle eşleşmez
Durumlu hatalar Bir işlem tek başına çalışır ancak gerçekçi bir çok adımlı iş akışında başarısız olur

Sonuncusu daha yakından bakmaya değer. Schemathesis, şartnamenizdeki bağlantılara dayanarak işlemleri bir araya getiren durumlu testler çalıştırabilir, örneğin bir kaynak oluşturur, sonra onu getirir, sonra siler. Bir güncellemeden sonra yanlış durumu bildiren bir kaynak gibi, yalnızca sırayla ortaya çıkan hataları tek istekli testlerle bulmak zordur. Durumlu faz, bu dizileri bir durum makinesi olarak yönlendirir.

Varsayılan davranışı kancalarla genişletebilirsiniz. Kancalar, veri üretimini özelleştirmenize, kendi kontrollerinizi eklemenize veya hangi işlemlerin test edileceğini filtrelemenize olanak tanıyan Python işlevleridir. Ekipler, Schemathesis'i kimlik doğrulama akışları veya şartnamenin ifade edemediği bariz olmayan kısıtlamaları olan API'lere bu şekilde uyarlar.

Schemathesis Ne Zaman Kullanılmalı?

Schemathesis, makul derecede doğru bir OpenAPI veya GraphQL şartnameniz olduğunda ve köşe durumları için geniş, ucuz bir kapsam istediğinizde yerini kazanır. Elle bir test yazmayı asla düşünmeyeceğiniz hataları bulmada güçlüdür: işlenmeyen girdiler, belgelenmemiş hata biçimleri ve şartname ile uygulama arasındaki sözleşme sapması.

Şu durumlarda iyi bir uyum sağlar:

Şartnameniz yetersiz veya güncel değilse, Schemathesis yalnızca şemanın tanımladığını test edebileceği için daha zayıf bir uyum sağlar. Çöp girdi, çöp çıktı. Ayrıca örnek tabanlı işlevsel testlerinizin yerini de almayacaktır. Bir uç noktanın asla çökmediğini bilmek, bilinen bir girdi için doğru değeri döndürdüğünü bilmekle aynı şey değildir. İkisini de istersiniz.

Schemathesis ve Apidog: Her Birinin Yeri

Apidog ve Schemathesis farklı sorunları çözer ve yan yana iyi çalışırlar. Apidog, API'leri tasarlamak, hata ayıklamak, test etmek, taklit etmek ve belgelemek için hepsi bir arada bir platformdur. Schemathesis, odaklanmış özellik tabanlı bir fuzzer'dır. Burada sınır konusunda dürüst olmak önemlidir.

Apidog özellik tabanlı fuzzing yapmaz. En yakın bitişik özelliği, çökmeleri ortaya çıkarmak için rastgele girdiler gönderen maymun testidir. Bu faydalıdır, ancak şema odaklı özellik tabanlı testle aynı değildir. Schemathesis, şartnamenizin kısıtlamalarından girdiler oluşturur ve yanıtları şemaya göre kontrol eder. Yani özellik tabanlı fuzzing'e ihtiyacınız varsa, Apidog yerine Schemathesis'e yönelin.

Apidog'un devreye girdiği yer, o fuzzing geçişinin etrafındaki yaşam döngüsünün geri kalanındadır.

İş akışı aşaması Schemathesis Apidog
Bir şartnameden özellik tabanlı fuzzing Evet, temel özellik Hayır
Görsel API tasarımı ve şartname düzenleme Hayır Evet
Örnek tabanlı işlevsel testler Sınırlı Evet, görsel test oluşturucu
Bir şartnameye karşı sözleşme testi Kısmen, şema kontrolleriyle Evet, özel iş akışı
Bir şemadan taklit sunucular Hayır Evet, akıllı taklit
CI test çalıştırıcısı Evet, st run Evet, apidog run
Otomatik oluşturulan belgeler Hayır Evet

Pratik bir eşleştirme şöyle görünür. Şartnameyi Apidog'da tasarlar ve sürdürürsünüz, ondan işlevsel test senaryoları ve bir taklit sunucu oluşturursunuz ve bunları apidog run ile CI'da çalıştırırsınız. Ardından, aynı şartnameyi köşe durumları çökmeleri ve sözleşme ihlalleri için fuzzing yapan bir Schemathesis geçişi eklersiniz. İki katman farklı hata sınıflarını yakalar. Apidog, bilinen durumlar için API'nin doğru şeyi yaptığını onaylar; Schemathesis, onu bozan bilinmeyen durumları avlar.

Amacınız bir şartnameyi bir fuzzing çalıştırması yerine çalıştırılabilir bir işlevsel pakete dönüştürmekse, Apidog OpenAPI şartnamelerinizden doğrudan API test koleksiyonları oluşturabilir ve bu akışı denemek için Apidog'u indirebilirsiniz.

Sıkça Sorulan Sorular

Schemathesis ücretsiz mi?

Evet. Schemathesis, MIT lisansı altında açık kaynaktır ve CLI, pip install schemathesis aracılığıyla ücretsiz olarak kurulabilir ve çalıştırılabilir. Yönetilen bir deneyim isteyen ekipler için barındırılan ticari bir teklif de var, ancak yerel olarak ve CI'da çalıştırdığınız çekirdek araç hiçbir maliyet gerektirmez.

schemathesis run ve st run arasındaki fark nedir?

Aynı komutlardır. st, schemathesis için kısa bir takma addır, bu yüzden st run ve schemathesis run tam olarak aynı şeyi yapar. Hangisini tercih ederseniz onu kullanın. Her ikisi de --url ve --header gibi seçeneklerle birlikte bir şema yolu veya URL alır.

Schemathesis işlevsel API testlerimin yerini alabilir mi?

Hayır, ve bunun için tasarlanmamıştır. Schemathesis, API'nizin çökmemesini ve yanıtların şemayla eşleşmesini kontrol eder. Bir indirim hesaplamasının doğru olup olmadığı gibi iş mantığını doğrulamaz. Bunun için hala örnek tabanlı işlevsel ve sözleşme testine ihtiyacınız var, bunları Apidog'da oluşturup çalıştırabilirsiniz. Schemathesis'i bir yedek olarak değil, ek bir fuzzing katmanı olarak ele alın.

Schemathesis GraphQL ile çalışıyor mu?

Evet. Schemathesis hem OpenAPI hem de GraphQL şemalarını destekler. GraphQL için, şemanın tür tanımlarından sorgular oluşturur ve yanıtları OpenAPI'de tanımlanan REST API'leri için yaptığı gibi kontrol eder.

Sonuç

Schemathesis, tek bir iş için keskin bir araçtır: OpenAPI veya GraphQL şartnamenizi alıp canlı API'nizi özellik tabanlı üretimle ona karşı stres testine sokmak. Örnek tabanlı testlerin kaçırdığı çökmeleri ve sözleşme ihlallerini bulur ve CI'ya eklemeniz neredeyse hiçbir maliyet getirmez. Yapmadığı şeyler ise iş mantığını tasarlamak, taklit etmek, belgelemek veya doğrulamaktır.

Apidog'un onu tamamladığı yer burasıdır. Şartnameyi tasarlayın, işlevsel testler ve taklitler oluşturun, bunları apidog run ile CI'da çalıştırın ve sonucu tek bir yerde belgeleyin, ardından fuzzing için Schemathesis'i üzerine katmanlayın. Bu iş akışının tasarım ve işlevsel tarafını oluşturmak için Apidog'u indirin ve köşe durum avını Schemathesis'e bırakın.

button

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin