WireMock Yazı Dizisi — 1

Gurcanaslan
AgeSA İş Teknolojileri
3 min readMar 13, 2024

Bu yazıda sizlere java tabanlı ve açık kaynak olan WireMock ürününden bahsetmek istiyorum. Ürünün farklı kullanım şekilleri olduğundan yazı dizisinde anlatacağım.

Öncelikle bu ürün hakkında kısaca bilgi vermek gerekiyor.

WireMock, web servislerini ve HTTP tabanlı uygulamaları test etmek için kullanılan Java tabanlı bir mock sunucu kütüphanesidir. Temel olarak, gerçek bir web hizmetini taklit eden sahte bir web sunucusu oluşturarak, yazılım geliştirme ve test süreçlerinde bağımlılıkları ve dış hizmetleri izole etmeyi sağlar.

WireMock’un kullanılmasının bazı nedenleri şunlardır:

1. Bağımlılıkların İzole Edilmesi: Yazılım geliştirme sırasında, dış sistemlere veya web hizmetlerine bağımlı olduğunuzda, bu hizmetlerin yanıt vermemesi veya beklenmeyen şekilde davranması durumunda testlerinizi etkileyebilir. WireMock, bu bağımlılıkları izole ederek, gerçek hizmetlere olan bağımlılığı ortadan kaldırır ve testlerin istikrarını artırır.

2. Sınırlı Erişim: Gerçek bir web hizmetine sürekli erişim sağlamak maliyetli veya pratik olmayabilir. WireMock, bu hizmetlere erişim sağlamak için beklemeye gerek kalmadan sahte yanıtlar üretebilir, böylece geliştirme ve test süreçlerini hızlandırır.

3. Tam Kontrol: WireMock, sahte yanıtların oluşturulması ve yapılandırılması için geniş bir API sağlar. Bu sayede servis çağrımlarında kullanılan “Interceptor, ExceptionHandler, Anotation bazlı kullanımlar” da test edilebilir. Bu, geliştiricilerin test senaryolarını tam olarak kontrol etmelerini ve belirli durumları simüle etmelerini sağlar.

4. Tekrarlanabilirlik: WireMock, her zaman aynı yanıtları üretebilir, bu da testlerin tekrarlanabilirliğini artırır ve hataların daha kolay tanımlanmasını sağlar.

5. Performans Testleri: WireMock, performans testlerinde gerçek web hizmetlerini simüle etmek için kullanılabilir. Bu, gerçek dünya senaryolarını modellemek ve hizmetin performansını değerlendirmek için önemlidir.

Sonuç olarak, WireMock, yazılım geliştirme sürecinde dış bağımlılıkları ve web hizmetlerini izole etmek, testleri stabilize etmek, tekrarlanabilirliği artırmak ve performans testleri yapmak için kullanılan güçlü bir araçtır.

Gelin wiremock ile basit bir örnek yapalım.

Önce bu sayfadan standalone jar dosyamızı indirelim.

Ardından jar dosyasının bulunduğu path de bir console açalım ve aşağıdaki komutu çalıştıralım.

java -jar wiremock-jre8-standalone-2.34.0.jar - port 8080

Sunucumuz çalıştı. Test edelim.

curl - location 'http://localhost:8080/say-hello' \ 
- header 'Content-Type: application/json'

Henüz say-hello isimli bir servis tanımlamadığımız için wiremock resimde gördüğünüz üzere bizden ilgili requeste ait eşleşme yapabilecek bir tanımlama istiyor.

Şimdi gelin wiremock jar dosyamızın bulunduğu lokasyona gidelim ve say-hello servisi için request — response tanımlarını yapalım.

Buraya yaptığınız mapping tanımları wiremock tarafından otomatik algılanır. Json dosyasının içeriği aşağıdaki gibi oluşur.

{
"mappings" : [ {
"id" : "bffab166–792a-47db-bf69–4d0482a60bde",
"request" : {
"urlPathPattern" : "/say-hello",
"method" : "GET"
},
"response" : {
"status" : 200,
"jsonBody": {
"result-code": 0,
"result-message": "Hello World…"
},
"headers" : {
"Content-Type" : "application/json"
}
},
"uuid" : "bffab166–792a-47db-bf69–4d0482a60bde"
} ],
"meta" : {
"total" : 1
}
}

“request” tanımında gördüğünüz gibi, çağrım yapılan url eşleşmesi gerçekleştiğinde belirttiğimiz response un dönmesi gerekir. Wiremock u restart edip servisi çağırmayı tekrar deneyelim.

Gördüğünüz gibi yaptığımız web servis çağrısı wiremock tarafından kendi mapping tanımlarına göre eşleştirildi ve beklediğimiz response döndü.

Request response tanımları bir kere yapıldıktan sonra elimizde her an hızlıca ayağa kaldırabileceğimiz bir servis altyapısı oluşur. Böylece uygulamalarımızın çağırmış olduğu web servisleri wiremock servislerine yönlendirerek zaman , servis çağrım maliyetleri gibi pek çok konuda avantaj sağlayabiliriz. Bir sonraki yazıda detaylı örnekler yapacağız. Görüşmek üzere.

Kaynak : https://wiremock.org/docs/

--

--