Sözleşme Testi
- İ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
# 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 othersSı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.
İlgili sayfalar
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- Entegrasyon TestiTest ve Kalite, s. 7Entegrasyon testi, kod, veritabanı ve API gibi bir sistemin birkaç parçasının birlikte doğru çalışıp çalışmadığını kontrol eden otomatik bir testtir.
- MockingTest ve Kalite, s. 16Mocking, kodu yalıtılmış biçimde test etmek için veritabanı ya da API gibi gerçek bir bağımlılığı kontrol ettiğiniz bir sahteyle değiştiren test tekniğidir.
- OpenAPIBackend ve API'ler, s. 32OpenAPI, HTTP API'lerini bir YAML veya JSON dosyasında tanımlayan açık bir standarttır; insanlar ve araçlar her endpoint'i, parametreyi ve yanıtı anlayabilir.
- API VersioningBackend ve API'ler, s. 4API versioning, bir API'deki değişiklikleri etiketleyip yönetmektir; mevcut istemciler çalışmaya devam ederken yeni sürümler özellik ekler veya değiştirir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin