# Sözleşme Testi

Adres: https://softwaredictionary.org/tr/terimler/contract-testing
Kategori: Test ve Kalite
Son güncelleme: 2026-09-30
İngilizcesi: Contract Testing
Okunuşu: kontrekt testing

Kısaca: Sözleşme testi, iki servisin alıp verdikleri istek ve yanıtlar konusunda anlaşıp anlaşmadığını, ikisini birlikte çalıştırmadan kontrol eden tekniktir.

## Sözleşme testi nedir?

Sözleşme testi, birbiriyle konuşan iki yazılım parçasının, genellikle bir API tüketicisi ve bir API sağlayıcısının, nasıl iletişim kuracakları konusunda anlaştığını doğrular. Sözleşme adı verilen bu anlaşma, tüketicinin gönderdiği istekleri ve beklediği yanıtları; alanlar, veri tipleri ve durum kodları dahil olmak üzere tanımlar. Her taraf sözleşmeye karşı ayrı ayrı test edilir; böylece hiçbirinin diğerinin çalışıyor olmasına ihtiyacı yoktur.

Yaygın tüketici güdümlü (consumer-driven) yaklaşımda tüketicinin testleri sahte bir sağlayıcıya karşı çalışır ve dayandıkları her etkileşimi bir sözleşme dosyasına kaydeder. Bu sözleşme, çoğunlukla broker adı verilen merkezi bir depo aracılığıyla sağlayıcı ekibiyle paylaşılır; sağlayıcının test takımı kaydedilen her isteği gerçek sağlayıcıya karşı yeniden oynatır ve yanıtların eşleştiğini kontrol eder. Sağlayıcıda yapılan bir değişiklik bir tüketiciyi bozacaksa, sağlayıcının derlemesi değişiklik dağıtılmadan önce başarısız olur.

Bir elektrik fişi ile duvar prizini düşünün: ikisi de aynı standardı izliyorsa birbirine uyar ve her birini fişe takmadan standarda göre kontrol edebilirsiniz. Sözleşme testi, en çok mikroservis mimarilerinde ve birçok ekibin bağımsız olarak dağıtım yaptığı, yaygın kullanılan API'lerde işe yarar; çünkü bu ortamlarda uçtan uca testler için her servisi birlikte çalıştırmak yavaş ve kırılgandır.

Sözleşme testi sıklıkla entegrasyon testi ve şema doğrulamasıyla karıştırılır. Entegrasyon testi gerçek bileşenleri birlikte çalıştırır; sözleşme testi ise her tarafı ortak bir anlaşmaya karşı yalıtılmış olarak kontrol eder, bu da onu daha hızlı kılar ve uyumluluğu hangi tarafın bozduğu konusunda daha net olmasını sağlar. Yanıtları bir OpenAPI şemasına karşı doğrulamak ilişkilidir, ancak tüketici güdümlü sözleşmeler API'nin yalnızca tüketicilerin gerçekten kullandığı kısımlarını yakalar; böylece sağlayıcılar hangi alanları değiştirmenin güvenli olduğunu bilir.

## Önemli noktalar

- Sözleşme, bir tüketicinin gönderdiği istekleri ve beklediği yanıtları tanımlar.
- Tüketici ve sağlayıcı, sözleşmeye karşı ayrı ayrı test edilir.
- Tüketici güdümlü sözleşme testinde sözleşmeyi tüketiciler tanımlar, sağlayıcılar doğrular.
- Sözleşme testleri, tam bir uçtan uca ortam olmadan API'deki kırıcı değişiklikleri dağıtımdan önce yakalar.
- Birim ve entegrasyon testlerini tamamlar, onların yerini almaz.

## Örnek: Basitleştirilmiş bir tüketici güdümlü sözleşme

```yaml
# Recorded by the consumer's tests, replayed and verified by the provider's tests
consumer: web-app
provider: users-api
interactions:
  - description: fetch an existing user
    request:
      method: GET
      path: /users/42
    response:
      status: 200
      body:
        id: 42              # the consumer relies only on these two fields,
        name: Ada Lovelace  # so the provider is free to change the others
```

## Sık sorulan sorular

**Sözleşme testi ile entegrasyon testi arasındaki fark nedir?**

Entegrasyon testi, bir bütün olarak çalışıp çalışmadıklarını görmek için gerçek bileşenleri birlikte çalıştırır. Sözleşme testi ise her tarafı ortak bir anlaşmaya karşı ayrı ayrı kontrol eder; bu yüzden daha hızlıdır, ortak bir ortam gerektirmez ve uyumluluğu hangi tarafın bozduğunu tam olarak gösterir.

**Tüketici güdümlü sözleşme testi nedir?**

Bir API'nin tüketicilerinin bağımlı oldukları etkileşimleri yazıya döktüğü ve sağlayıcının bu sözleşmeleri test olarak çalıştırdığı bir sözleşme testi biçimidir. Bu sayede sağlayıcı, tüketicilerinin kullanmadığı her şeyi onları bozma korkusu olmadan değiştirebilir.

**Sözleşme testi uçtan uca testlerin yerini alır mı?**

Tamamen değil. Sözleşme testleri, servisler arasındaki uyumluluğu kontrol etmek için gereken uçtan uca test sayısını büyük ölçüde azaltır; ancak kritik kullanıcı yolculuklarının tamamen dağıtılmış bir sistemde çalıştığını doğrulamak için birkaç uçtan uca test hâlâ yararlıdır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
