wiremock tutorial introduction wiremock
Bu Tanıtım Videosu Eğitimi, Wiremock'un Özelliklerini ve Wiremock'un Bağımsız Bir Sunucu ve JUnit Testlerinin bir parçası olarak nasıl çalıştırılacağını açıklayacaktır:
Bu eğitimde, Wiremock aracıyla ilgili temel kavramları ve ayrıntıları ele alacağız. Gereksinimlere göre JUnit testlerinde olduğu gibi bağımsız bir HTTP sunucusu olarak da kullanılabilir.
Bu, açık kaynak olduğu ve büyük bir katılımcı topluluğuna sahip olduğu için yoğun olarak kullanılan bir araçtır. Hizmet sanallaştırma araçları kategorisine girer.
Ne öğreneceksin:
Wiremock nedir?
Basit bir ifadeyle, Wiremock entegrasyon testleri için bir alay kurulumudur. Bu, belirli bir istek için beklenen yanıtı döndürecek şekilde yüksek düzeyde yapılandırılabilen basit bir sahte sunucudur.
Geliştirme sırasında ve daha da önemlisi, bir sistem veya hizmet bir veya daha fazla harici veya dahili bağımlılık / hizmetle konuşurken Entegrasyon testi sırasında yaygın olarak kullanılır.
Genel olarak entegrasyon testi hakkında daha fazla bilgi edinmeye çalışalım ve Wiremock'un bu zorlukları aşmaya ve hayatımızı kolaylaştırmaya nasıl yardımcı olabileceğini öğrenelim.
Genel olarak, entegrasyon kelimesi geldiğinde, bizi etkileyen şey, 2 iletişim sistemi arasındaki uçtan uca entegrasyondur. Şimdi, işi tamamlamak için bazı harici hizmetler kullanan, test edilmekte olan bir uygulama perspektifinden bakalım.
Örneğin, Çevrimiçi seyahat veya bilet sistemi için bir uygulama oluşturduğumuzu ve Indian Railways tarafından sağlanan harici bir API'ye uyan bir PNR durum kontrolü modülümüz olduğunu varsayalım.
Şimdi, uygulamamızı harici API'lerle entegrasyon testi nasıl yapabiliriz?
Bunu yapmanın 2 yolu vardır:
- İlk, Sistemimizin, harici API'ye ulaşmadan önce stubbed veya sahte yanıtı test etmesi / doğrulaması için sağlanan (veya şirket içinde oluşturulan) arayüzü sapladığımız Birim testi yaklaşımıdır. Bu, harici bir bağımlılıkla dalga geçmeye çalışan bir Birim testinden başka bir şey değildir.
- İkinci dış bağımlılıkların bazı test ortamlarıyla (veya gerçek üretim ortamında) test ediliyor. Bununla birlikte, bu yaklaşımla ilgili olarak aşağıda belirtilen birkaç zorluk vardır:
- Harici API sistemleri her zaman mevcut olmayabilir. Örneğin, harici sistemlere büyük ölçüde bağımlıyız veya bağımlıyız ve herhangi bir kesinti, testlerimizi ve dolaylı olarak geliştirme / yayın sürecini etkileyecektir.
- İkinci olarak, harici API'ler bir test ortamına sahip olabilir veya olmayabilir. Örneğin, bir PNR durum kontrol API'si yanıtları almak ve döndürmek için her zaman gerçek PNR numaralarını gerektirebilir.
- Çoğu zaman, bir API'ye ulaşmanın maliyeti vardır. Örneğin, PNR kontrol API'sinin her 1000 istek için 100 Rs ücret aldığını varsayalım. Entegrasyon testleri genellikle her regresyon sırasında (ve çoğu zaman her kayıtta) çalıştırıldığından, test amacıyla bile bize maliyeti olan böyle bir API'ye ulaşmak uygun maliyetli bir çözüm olmayabilir.
- İstenilen yanıtı döndürmek için harici bir API yapılandırılamaz. Mümkün olsa bile, farklı istek girdileri için farklı yanıtlar sağlamak için çok sayıda test verisi oluşturmanız gerekecektir.
Örneğin, API'nin farklı veri türleri için farklı durum kodları döndürmesi gibi hata senaryolarını test etmek istiyorsunuz. Şimdi yanıt bizim kontrolümüz altında olmadığından, farklı olası senaryoları veya sonuçları doğrulamak için birden çok veri kümesi oluşturmamız gerekecek.
Aşağıdaki diyagramın yardımıyla bu kavramları anlayalım.
Burada, harici bağımlılığın gerçek bir uygulamasını kullanan sahte bir sunucu olmadan ve bağımlılık için alınan isteklere verilen yanıtları taklit eden sahte sunucuyu (Wiremock) kullanarak hem entegrasyon testi yaklaşımlarını karşılaştırıyoruz.
İkinci durumda, bağımlılığı ve bağımlılığın gerçek uygulamasına olan güveni büyük ölçüde azaltır ve kalite ve teslimat programlarından ödün vermeden çok sayıda yapılandırma yeteneği sağlar.
Wiremock Verilen Bir İsteği Nasıl Yanıtlıyor?
Bildiğimiz gibi, Wiremock programlı bir Mock sunucusudur, belirli bir isteğe yanıt verme yöntemi, tüm ilgili eşlemeleri (veya alay yanıtları) 'eşlemeler' adlı bir klasörde depolamaktır
Gelen istekleri depolanmış eşlemelerle eşleştiren bir Wiremock eşleştirici bileşeni vardır ve başarılı bir eşleşme döndürülürse, bu tür ilk eşleşme, verilen isteğe yanıt olarak döndürülür.
Wiremock'un bağımsız sürümünü kullanıyorsanız, Wiremock sunucusunu çalıştırdıktan sonra, Wiremock yükleme / jar konum dizininde oluşturulacak eşlemeler klasörünü göreceksiniz.
Video Eğitimi: Wiremock Aracına Giriş
Windows 10 için en iyi ücretsiz kayıt defteri temizleyicileri
Wiremock Nasıl Kullanılır?
Şimdi bu aracı entegrasyon testlerimizle nasıl kullanabileceğimize bakalım.
Aşağıdaki şekillerde kullanılabilir.
Bağımsız Bir Wiremock Sunucusu
Bağımsız bir sunucu olarak, Wiremock için Maven / Gradle bağımlılığına sahip basit bir Java uygulaması oluşturabilir ve bunu çalışan bir işlem olarak tutabilirsiniz.
Bu, bağımsız sunucunuzu bir makinede barındırmak ve tüm proje veya ekip için tek bir sahte sunucu olarak kullanmak istediğinizde iyi bir alternatiftir. Bağımsız modda, bu araç aynı zamanda mevcut bağımsız kavanozu indirerek de çalıştırılabilir. İşte ve sadece kavanozu çalıştırın.
Örneğin, Wiremock bağımsız örneğinizi buluttaki bir sunucuya veya şirket içi bir sunucuya dağıtmak istediğinizi varsayalım, o zaman bu kavanozu çalıştırabilir ve onu barındırılan bir hizmet olarak kullanmak için sistem IP'sini kullanabilirsiniz.
Hadi biraz görelim bunu bağımsız modda çalıştırmak için adımlar (ve bağlantı noktaları, eşleme klasörleri vb. gibi farklı şeyler yapılandırın)
# 1) Wiremock jar dosyasını diğer JAR dosyaları gibi (Wiremock jar kurulum dizininden) terminalden (veya Windows kullanıcıları için komut isteminden) çalıştırın.
java -jar wiremock-standalone-2.25.1.jar
#iki) Varsayılan olarak, Wiremock localhost: 8080'de çalışır (bağlantı noktası serbestse, yukarıdaki komut Wiremock sunucusunu bağımsız bir modda başlatacaktır) ve çıktıyı aşağıdaki gibi göreceksiniz.
# 3) Artık sunucu başladığında, localhost'ta herhangi bir URL'yi ziyaret edebilirsiniz: 8080
Örneğin, http: // localhost: 8080 / get / user / 1 - Şu anda ayarlanan taklitler olmadığından, aşağıda gösterildiği gibi bir yanıt alacaksınız.
# 4) Şimdi bu URL için basit bir saplama / taklit oluşturmayı ve URL'yi tekrar geri vurmayı deneyelim. Daha sonra, aynı URL'ye ulaşmanın şimdi alay konusu veya stubbed yanıtı döndürdüğünü doğrulayacağız.
curl -X POST --data '{ 'request': { 'url': '/get/user/1', 'method': 'GET' }, 'response': { 'status': 200, 'body': 'Here it is!
' }}' http://localhost:8080/__admin/mappings/new
Önce bu CURL isteğini anlamayı deneyelim:
- Http: // localhost: 8080 / __ admin / mappings / new için bir CURL POST isteğinde bulunuyoruz - Şimdi bu, JAR dosyası aracılığıyla yürüttüğümüz / başlattığımız Wiremock sunucusu için tüm eşlemelerin saklanacağı konumdur.
- Curl isteğinde, 'yanıt' bölümünde yanıt gövdesi ile birlikte - URL ve istek yöntemi gibi istek parametrelerini tanımlıyoruz. Bu basitçe, URL / get / user / 1 ile bir GET isteği geldiğinde, belirtilen yanıt gövdesi ile yanıt verileceği anlamına gelir.
# 5) Stubbed yanıt ayarlandıktan sonra (yukarıdaki curl isteğinin yardımıyla), URL'ye basmayı deneyebilir ve Wiremock'tan stubbed yanıt alıp almadığımızı görebiliriz.
Tarayıcıda şu URL'yi bulmayı deneyelim - http: // localhost: 8080 / get / user / 1
Eşleştirme başarılı bir şekilde ayarlanmışsa, aşağıda gösterildiği gibi bir yanıt almalısınız:
JUnit Kuralı Yapılandırması Olarak JUnit Testleriyle Birlikte
Wiremock sunucusu, JUnit Kuralı kurulumu olarak JUnit testleri ile kullanılabilir. Bununla JUnit, Wiremock yaşam döngüsünü, yani Wiremock başlar ve durur.
ddos programı nasıl yapılır
Çoğunlukla, her testten sonra sunucuyu başlatmak ve durdurmak istediğiniz kurulumlarda kullanılır.
Bunun, birden fazla kişinin aynı sunucuyu kullanıp birbirlerinin stubbed yanıtlarının üzerine adım atabildiği bağımsız bir kurulumun aksine, yalıtılmış olma gibi kendi avantajları vardır ve yüksek derecede yapılandırılabilirliğe sahiptir.
Bu yaklaşımın çalışan bir örneğini görelim:
# 1) Wiremock sunucusu için bir JUnit kuralı oluşturun. Bu adım, esasen JUnit çalıştırıcısına her testten önce Wiremock sunucusunu başlatmasını ve her testten sonra sunucuyu durdurmasını söylediğimiz bir test kurulum adımı gibidir.
Bunun anlamı, JUnit runner'ın açıkça bunu yapmadan Wiremock sunucusunu başlatıp durdurmasıdır.
@Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080));
#iki) Şimdi, istenen uç noktaya karşı istekleri yürütmek için istemcimizi ilk olarak oluşturacağımız (okHttp kullanarak) testimizi yazacağız.
// execute request through http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build();
# 3) Ancak, burada, Wiremock örneğimiz için hala herhangi bir saplama ayarlamadığımızı fark edebilirsiniz. yani yukarıdaki istemci, yapılandırılmış herhangi bir saplama içermeyen bir http: // localhost: 8080 / test / abc URL'sini talep edecektir. Bu durumda, Wiremock sunucusu bir 404 içerik yok döndürür.
# 4) Şimdi, Wiremock sunucu örneğimiz için yukarıdaki URL için bir saplama ayarlamak üzere, aşağıda gösterildiği gibi Wiremock’un saplama statik yöntemlerini çağırmamız gerekecek.
private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); }
Burada, configureFor, stubFor vb. Gibi birkaç statik yöntem kullandığımızı görebilirsiniz. Tüm bu yöntemler Wiremock Java kitaplığının bir parçasıdır. (Bu yöntemlere bir sonraki eğitimimizde / bölümlerimizde ayrıntılı olarak bakacağız)
# 5) Şimdi yapılan yapılandırma adımı ile, isteği istemci aracılığıyla basitçe yürütebilir ve yanıtı doğrulayabiliriz (saplamanın Wiremock aracılığıyla geri dönmesi için yapılandırılan şeye bağlı olarak)
Özetlemek gerekirse, kod örneğinin tamamı şöyle görünecektir:
public class WiremockJunitTest { @Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080)); @Test public void assertWiremockSetup() throws IOException { // Arrange - setup wiremock stubs configureStubs(); // execute request through the http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build(); // Act - call the endpoint Response response = client.newCall(request).execute(); // Assert - verify the response assertEquals('Test success!', response.body().string()); verify(exactly(1),getRequestedFor(urlEqualTo('/test/abc'))); } // configure stubs for wiremock private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); } }
Bağımlılıklar Gerekli
Şu şekilde mevcuttur:
- Yalnızca Wiremock bağımlılığını içeren bağımsız bir JAR.
- Wiremock ve tüm bağımlılıklarını içeren şişman bir kavanoz.
Her iki lezzet de Gradle ve Maven bağımlılıkları olarak mevcuttur. Resmi Maven deposunda daha fazla ayrıntı mevcuttur İşte
Eğitim Videosu: JUnit Testli Wiremock
Sonuç
Bu eğiticide, Wiremock'un temel özelliklerini inceledik ve bağımsız bir sunucu olarak ve JUnit kurallarını kullanan JUnit testlerinin bir parçası olarak nasıl çalıştırılabileceğini gördük.
Kısaca anlatma konusuna da değindik ve bir sonraki eğitimimizde ayrıntılı olarak ele alacağız.
SONRAKİ Eğitici
Önerilen Kaynaklar
- Micro Focus LoadRunner'a Giriş - LoadRunner Öğreticisi # 1 ile Yük Testi
- Ngrok Eğitimi: Kurulum ve Kurulumla Kısa Bir Giriş
- TestNG Eğitimi: TestNG Çerçevesine Giriş
- Selenium WebDriver'a Giriş - Selenium Eğitimi # 8
- Java Programlama Diline Giriş - Video Eğitimi
- Python Giriş ve Kurulum Süreci
- Unix Nedir: Unix'e Kısa Bir Giriş
- Neoload Eğitimi: Neoload Tanıtımı, İndirme ve Kurulum