Postman ile Contract Test Oluşturulması

Funda Buyukdeniz
inventiv
Published in
4 min readJun 25, 2021

Bu hikayemizde API için kısaca bilgi paylaşıp, API-API arasında, API-Client arasında contract testin ne demek olduğundan ve Postman ile contract testin nasıl yazılacağından bahsetmek istiyoruz.

API Nedir?

API (Application Programming Interface)’ler, bir uygulamanın farklı sistemleri veya katmanları (layers) arasındaki bağlantıyı sağlar.

Günlük hayattan bir API örneği;

Sipariş verebileceğiniz bir menüyle bir restorandaki bir masada oturduğunuzu düşünün. Mutfak, siparişinizi hazırlayacak “sistem”in bir parçasıdır. Eksik olan şey, siparişinizi mutfağa iletecek ve yiyeceğinizi masanıza geri teslim edecek kritik bir bağlantıdır.

Garson — veya API — siparişinizi alan ve mutfağa — sisteme — ne yapacağını söyleyen aracıdır.

Garson(API) cevabı size geri iletir; bu örnekte cevap, yiyecek ve içeceklerinizdir.

Contract Test Nedir?

Kullanılan (provider) ve kullanıcı (consumer) servisleri arasındaki entegrasyonun bir kontrat üzerinden tasarlandığı ve yönetildiği yaklaşım olarak düşünülebilir.

Consumer’lara sağlanan API üzerinde herhangi değişiklik yapıldığında, bu servisi kullanan tüm consumer’ların API release’lerini takip ederek kendilerini güncelliyor olması gerekecektir. Veya API tarafının entegrasyonlarda sorun oluşmaması için önceki versiyon(ları) da desteklemeye devam etmesi zorunlu olacaktır.

Bu sorunla başa çıkmak için, API’lar üzerinde yapılacak değişikliklerin validasyonu için bir kontrat mekanizması kurulabilir. Bu durumda servisi kullanacak olan tüm consumer’lar kendi kontratlarını hazırlayarak provider’ın erişimine açacaktır. Bu yaklaşımdaki önemli unsur, provider’ın hangi fonksiyonlarının nasıl kullanıldığını bilmesi ve bu sayede yapılacak önemli bir değişiklikte hangi kullanıcıların etkileneceğini öngörebilmesi ya da erişim noktalarını sabit tutarak kodun içyapısını değiştirebilmesidir.

Özetle;

İki servisin birbirlerine gönderdikleri verinin formatı konusunda anlaşmaya varmasıdır.

API-API , API-Client arasında “ben seni x,y,z istekleriyle çağıracağım sen de bana bunları dönecek misin” iletişiminde sözleşmeler bulunur.

Contract Test sözleşmelerin doğruluğunu kontrol etmemizi sağlayan testtir.

Postman ile Contract Test

Postman içinde oluşturulmuş collection üzerinde Get ve Post methodu için contract testin nasıl yapılacağına dair örnekler aşağıda yer almaktadır.

Postman’de örnek bir Get Methodu için;

Get Profile

Get methodu çalıştırıldıktan sonra body içerisinde dönen metin için(json formatında) aşağıdaki url ile json schema ‘sı elde edilir.

https://jsonschema.net/home

Elde edilen schema; postman içinde yer alan Pre-request script tabına yazılır.

Postman’ de yer alan Test tabına da aşağıdaki gibi schema kontrolü için test yazılır. Validasyon kontrolü yapılır.

Postman’de örnek bir Post Methodu için;

Pre-request Script tabına önce body içeriği (raw-JSON) için schema yazılır.

Post methodu çalıştırıldıktan sonra ; Response-body ‘de yer alan içeriğin scheması aşağıdaki linkten elde edilir.

Hem request hem de response için elde edilen schemalar Pre-request tabına yazılır.

Test tabına da aşağıdaki gibi validasyon için testlerimiz yazılır.

Get ve Post methodları için Pre-request tabında belirlenmiş olan schemalar aslında API için önceden karar verilmiş için sözleşmelerdir. Sözleşmeler arasında bir sorun olması durumunda testlerimiz fail verecektir.

Contract testin sonucunun hatalı olduğu durumu bir örnek ile aşağıda görebilirsiniz.

Request içinde yer alan property değişikliği olması,silinmesi durumunda test sonucumuz hatalı dönecektir.

Örnek;

(deviceToken yerine deviceToken123 yazıldığını varsayalım);

Hatalı request ile kontrol yapıldığında ; Pre-request tabında yeralan schema için yazmış olduğumuz testlerin hata aldığı görülecektir.

Farklı domainlerin yer aldığı projelerde, sorunları zamanında tespit edebilmek açışından contract teste önem verilmesi gerektiğini düşünüyoruz . Postman’in bu tür çözümler için cok faydalı ve kullanışlı olduğunu gözlemledik. Bu yazımızın faydalı olabilmesini umuyoruz.

Daha sonra farklı deneyimleri paylaşmak dileğiyle…

Bu makale Zekeriya Polat ile birlikte hazırlanmıştır.

Referanslar:

--

--