Yazılım Test Dünyasında “Contract Test”

Hakan Kılıç (hKnkLc)
inventiv
Published in
4 min readJun 26, 2024

Bu yazımızda Contract test nedir, nerelerde nasıl kullanılması gerektiğini ve Contract test ile integration test farklarını kısaca anlatıyor olacağız.
Keyifli okumalar.

Hadi başlayalım…

Contract Test Nedir?

Yazılım geliştirme sürecinde, mikro servis mimarileri ve dağıtık sistemlerin yaygınlaşmasıyla birlikte, bileşenler arasındaki bağımlılıkları doğru bir şekilde yönetmek önem kazanmıştır. Bu bağlamda, “contract testing” (sözleşme testi), farklı bileşenler arasındaki etkileşimlerin doğru bir şekilde çalıştığından emin olmak için kullanılan bir test yöntemidir.

https://www.xenonstack.com/hubfs/xenonstack-contract-testing.png

Contract Test Nerede Kullanılır?

Contract testler, aşağıdakiler de dahil olmak üzere çeşitli durumlarda kullanılabilir:

Mikroservis mimarileri: Mikroservisler, birbirleriyle iletişim kuran bağımsız servislerden oluşan bir sistem türüdür. Contract testler, mikroservislerin birbirleriyle sorunsuz bir şekilde iletişim kurmasını sağlar.

API geliştirme: Contract testler, API’lerin doğru şekilde tasarlandığından ve belgelendiğinden emin olmanızı sağlar. Bu, API’lerin daha kolay kullanılmasını ve benimsenmesini sağlar.

Entegrasyon testi: Contract testler, farklı sistemlerin birbirleriyle entegre edildiğinde sorunsuz bir şekilde çalışmasını sağlar.

Geriye dönük uyumluluk: Contract testler, API’de yapılan değişikliklerin diğer sistemleri etkilememesini sağlar.

Contract Test Nasıl Kullanılır?

Contract testler genellikle tüketici odaklı ve sağlayıcı odaklı olmak üzere ikiye ayrılır:

Tüketici Odaklı Contract Test: Bu testler, tüketicinin (bir servisi kullanan sistem) sağlayıcıdan (servisi sunan sistem) ne beklediğini tanımlar. Tüketici, sağlayıcıya bir sözleşme gönderir ve sağlayıcı bu sözleşmeye uymasını sağlar.

Sağlayıcı Odaklı Contract Test: Bu testler, sağlayıcının tüketiciye ne sunacağını tanımlar. Sağlayıcı, tüketicinin beklentilerini karşılamak için API’sini test eder.

Contract testler, genellikle uygulama programlama arayüzleri (API’ler) gibi modüler sistemlerde kullanılır. API’ler, farklı sistemlerin birbirleriyle iletişim kurmasına olanak tanıyan belirli bir işlevsellik kümesi sunar. Contract testler, API’nin farklı sistemler tarafından doğru şekilde kullanıldığından ve beklenen sonuçları ürettiğinden emin olmanızı sağlar.

https://jignect.tech/contract-testing-an-essential-guide/

Contract Testing’in Avantajları:

  1. Bağımsızlık ve Hızlı Geliştirme:

Contract testing, bileşenler arasındaki bağımsızlığı teşvik eder. Her bileşen, kendi sözleşmesine dayalı olarak geliştirilebilir ve test edilebilir. Bu da ekiplerin aynı anda farklı bileşenler üzerinde çalışmasını sağlar ve geliştirme sürelerini hızlandırır.

2. Güvenilirlik ve İzlenebilirlik:

Her bileşenin kendi sözleşmesi olduğu için, bileşenler arasındaki uyumsuzluklar hızlı bir şekilde tespit edilebilir. Bu da sistemdeki hataların daha hızlı düzeltilmesine ve genel güvenilirliğin artmasına olanak tanır.

3. Daha İyi Dokümantasyon:

Contract testing, bileşenler arasındaki etkileşimlerin doğru bir şekilde belgelenmesine yardımcı olur. Her bileşenin kendi sözleşmesi olduğu için, bu sözleşmeler API belgeleri olarak kullanılabilir ve sistemdeki iletişim akışı daha iyi anlaşılabilir hale gelir.

Kısadan Hisse;

Contract testing, mikro servis mimarileri ve dağıtık sistemlerde, bileşenler arasındaki uyumluluğu sağlamak için önemli bir rol oynar. Bu yaklaşım, sistemlerin güvenilirliğini artırır, geliştirme sürelerini kısaltır ve iletişim akışını daha iyi belgeler. Bu nedenle, yazılım

geliştirme sürecinde contract testing’e önem vermek, daha sağlam ve sürdürülebilir sistemler oluşturmanın anahtarıdır.

Contract Test için Kullanılan Araçlar

Contract testler için birçok farklı araç mevcuttur. En popüler araçlardan bazıları şunlardır:

Pact: Pact, tüketici odaklı contract test için popüler bir araçtır. Ruby, Java, JavaScript ve .NET gibi birçok programlama dilini destekler.

Consumer Driven Contracts (CDC): CDC, contract testler oluşturmak için açık bir standarttır. Pact ve diğer araçlar tarafından kullanılır.

OpenAPI: OpenAPI, API’leri tanımlamak için kullanılan bir standarttır. Contract testler oluşturmak için de kullanılabilir.

Postman: Postman, API’leri test etmek için popüler bir araçtır. Contract testler oluşturmak için de kullanılabilir.

https://www.appsierra.com/blog/contract-testing-with-postman

Contract Test ile Integration Test Karşılaştırması

Contract Test (Sözleşme Testi);
Farklı hizmetler veya API’lar arasındaki etkileşimlerin önceden belirlenmiş sözleşmeye uygun olup olmadığını doğrulamaya odaklanır. Her bir hizmetin veya API’nin kabul edilen sözleşmeye uyduğundan ve bir hizmette yapılan değişikliklerin, ona bağlı diğer hizmetlerin işlevselliğini bozmadığından emin olur. Contract Test, hizmetler arasında paralel olarak gerçekleştirilebilir, çünkü bir hizmetin testi, diğer mikro servisler veya bileşenlerden bağımsız olarak gerçekleşir. Son olarak, Contract Test, sorunların daha kolay çözülmesini sağlayan sahte veriler kullanır.

Integration Test (Bütünleşme Testi);
Bir sistemdeki bireysel bileşenlerin tamamının bir bütün olarak doğru bir şekilde çalıştığından emin olmaya odaklanan bir test türüdür. Farklı modüller, bileşenler veya hizmetler arasındaki entegrasyon noktalarını ve aralarındaki etkileşimleri test eder. Integration Test, gerçek veri kullanır, üretim ortamını taklit eden karmaşık bir ortam kurulumunu gerektirir ve bir hizmet ortamı kurulumu ve birden fazla bileşen arasındaki etkileşimler nedeniyle Contract Test’ten daha karmaşıktır.

Her iki test türü de yazılım sisteminin güvenilirliğini ve işlevselliğini sağlamak için önemlidir ve özellikle mikro servislerde kapsamlı bir test stratejisinin parçası olarak birlikte kullanılabilir.

Desteklerinden dolayı Zekeriya Polat ve Kerem Fidan’a teşekkür ederim.

--

--

Hakan Kılıç (hKnkLc)
inventiv
Writer for

S. Quality Engineer, IT Specialist, EL. Elc. Engineer