wiremock tutorial introduction wiremock
Ovaj uvodni video vodič objasnit će značajke Wiremocka i kako pokrenuti Wiremock kao samostalni poslužitelj i kao dio JUnit testova:
U ovom uputstvu obradit ćemo osnovne pojmove i detalje oko Wiremock alata. Može se koristiti kao samostalni HTTP poslužitelj, kao i unutar JUnit testova prema zahtjevima.
Ovo je alat koji se često koristi jer je open source i ima veliku zajednicu suradnika. Podpada pod kategoriju alata za virtualizaciju usluga.
Što ćete naučiti:
Što je Wiremock?
Jednostavno rečeno, Wiremock je podrugljiva postavka za integracijske testove. To je jednostavno lažni poslužitelj koji je vrlo konfigurabilan da vrati očekivani odgovor na zadani zahtjev.
Široko se koristi tijekom razvoja i još važnije tijekom testiranja integracije dok sustav ili usluga razgovaraju s jednom ili više vanjskih ili unutarnjih ovisnosti / usluga.
Pokušajmo razumjeti više o integracijskom testiranju općenito i upoznati kako Wiremock može pomoći da se prebrode ti izazovi i olakša nam život.
Općenito, kad dođe riječ integracija, ono što nas pogađa je kraj do kraja integracija između dva komunikacijska sustava. Sada, pogledajmo to iz perspektive aplikacije koja se testira koja koristi neku vanjsku uslugu da obavi posao.
Na primjer, pretpostavimo da gradimo aplikaciju za mrežno putovanje ili sustav izdavanja karata i imamo modul za provjeru PNR statusa koji pogađa vanjski API koji pružaju Indijske željeznice.
Sada, kako možemo testirati integraciju svoje aplikacije s vanjskim API-ima?
Postoje 2 načina kako to učiniti:
- Prvi, je pristup jedinstvenom testiranju, gdje zaglušujemo sučelje koje je osigurano (ili stvoreno u kući), tako da naš sustav testira / potvrđuje klatni ili lažni odgovor čak i prije nego što pogodi vanjski API. Ovo nije ništa drugo do jedinični test kojim se pokušava ismijati vanjska ovisnost.
- Drugi je testiranje vanjskog ovisnosti s nekim testnim okruženjem (ili stvarnim proizvodnim okruženjem). Međutim, postoji nekoliko izazova s takvim pristupom koji su spomenuti u nastavku:
- Vanjski API sustavi možda nisu uvijek dostupni. tj. Mi se u velikoj mjeri oslanjamo ili ovisimo o vanjskim sustavima i svaki će tamo zastoj utjecati na naša ispitivanja i neizravno na proces razvoja / objavljivanja.
- Drugo, vanjski API-ji mogu ili ne moraju imati testno okruženje. Na primjer, API za provjeru PNR statusa uvijek može zahtijevati stvarne PNR brojeve za dohvaćanje i vraćanje odgovora.
- Puno puta postoje troškovi uključenja API-ja. Na primjer, pretpostavimo da API za provjeru PNR naplaćuje 100 Rs za svakih 1000 zahtjeva. Budući da se integracijski testovi obično izvode tijekom svake regresije (i većinu vremena pri svakom urezivanju), možda neće biti isplativo rješenje pogoditi takav API koji nas košta čak i za potrebe testiranja.
- Vanjski API nije moguće konfigurirati da vrati željeni odgovor. Čak i ako je moguće, morat ćete stvoriti puno testnih podataka kako biste osigurali različite odgovore za različite ulaze zahtjeva.
Na primjer, želite testirati scenarije pogrešaka kao što API vraća različite statusne kodove za različite vrste podataka. Sada, budući da odgovor nije pod našom kontrolom, morat ćemo stvoriti više skupova podataka za provjeru različitih mogućih scenarija ili ishoda.
Razumijemo ove koncepte uz pomoć donjeg dijagrama.
Ovdje uspoređujemo oba pristupa integracijskog testiranja, tj. Bez lažnog poslužitelja koristeći stvarnu implementaciju vanjske ovisnosti i pomoću lažnog poslužitelja (Wiremock) koji ismijava odgovore na zahtjeve primljene za ovisnost.
U potonjem slučaju, to uvelike smanjuje ovisnost i oslanjanje na stvarnu provedbu ovisnosti i daje puno mogućnosti konfiguracije bez ugrožavanja kvalitete i rasporeda isporuke.
Kako Wiremock odgovara na zadani zahtjev?
Kao što znamo, Wiremock je programski Mock poslužitelj, a način na koji odgovara na zadani zahtjev je spremanjem svih relevantnih preslikavanja (ili izrugivanih odgovora) u mapu koja se naziva 'preslikavanja'
Postoji podudarna komponenta Wiremocka koja podudara dolazne zahtjeve sa pohranjenim preslikavanjima, a ako se vrati uspješno podudaranje, tada se vraća prvo takvo podudaranje kao odgovor na zadani zahtjev.
U slučaju da koristite samostalnu verziju Wiremocka, nakon što pokrenete Wiremock poslužitelj, vidjet ćete mapu mapiranja koja će se stvoriti u direktoriju lokacije Wiremock za instaliranje / jar.
Video lekcije: Uvod u Wiremock alat
regularni izrazi u c ++
Kako koristiti žičanu mrežu?
Sada da vidimo kako možemo koristiti ovaj alat s našim integracijskim testovima.
Može se koristiti na sljedeće načine.
Samostalni žičani poslužitelj
Kao samostalni poslužitelj, možete jednostavno stvoriti jednostavni Java program s ovisnošću Maven / Gradle za Wiremock i zadržati ga kao pokrenut postupak.
Ovo je dobra alternativa kada želite samostalni poslužitelj ugostiti na nekom stroju i koristiti ga kao jedan podsmješni server za cijeli projekt ili tim. U samostalnom načinu rada ovaj se alat također može izvršiti preuzimanjem dostupne samostalne staklenke ovdje i jednostavno pustite staklenku.
Na primjer, pretpostavimo da želite instalirati svoju samostalnu instancu Wiremock na neki poslužitelj u oblaku ili na lokalnom poslužitelju, tada možete jednostavno pokrenuti ovu jar i upotrijebiti IP sustava kako biste je koristili kao hostiranu uslugu.
Da vidimo neke koraci za pokretanje ovog u samostalnom načinu (i konfiguriranje različitih stvari kao što su priključci, mapiranje mapa itd.)
# 1) Pokrenite Wiremock jar s terminala (ili naredbeni redak za korisnike Windowsa) kao i bilo koju drugu JAR datoteku (iz direktorija za instaliranje Wiremock jar-a).
java -jar wiremock-standalone-2.25.1.jar
#dva) Prema zadanim postavkama Wiremock radi na localhost: 8080 (ako je priključak besplatan za upotrebu, gornja naredba pokrenut će Wiremock poslužitelj u samostalnom načinu) i vidjet ćete izlaz kao u nastavku.
# 3) Sada kada se poslužitelj pokrene, možete posjetiti bilo koji URL na localhost: 8080
Na primjer, http: // localhost: 8080 / get / user / 1 - Budući da se trenutno ne postavljaju lažne slike, dobit ćete odgovor kao što je prikazano u nastavku.
# 4) Pokušajmo sada postaviti jednostavnu kvačicu / lažnu sliku za ovaj URL i pokušajte ponovo vratiti URL. Zatim ćemo potvrditi da pritiskanje istog URL-a sada vraća ismijani odgovor.
curl -X POST --data '{ 'request': { 'url': '/get/user/1', 'method': 'GET' }, 'response': { 'status': 200, 'body': 'Here it is!
' }}' http://localhost:8080/__admin/mappings/new
Pokušajmo prvo razumjeti ovaj CURL zahtjev:
- Izrađujemo zahtjev za CURL POST za http: // localhost: 8080 / __ admin / mappings / new - Sada je ovo mjesto na kojem će se sva mapiranja pohraniti za Wiremock poslužitelj koji smo izvršili / pokrenuli putem JAR datoteke.
- U zahtjevu Curl definiramo parametre zahtjeva kao što su - URL i metoda zahtjeva zajedno s tijelom odgovora u odjeljku 'odgovor'. To jednostavno podrazumijeva da svaki put kad GET zahtjev uđe s URL-om / get / user / 1 onda odgovori s navedenim tijelom odgovora.
# 5) Jednom kad se postavi zapečeni odgovor (uz pomoć gornjeg zahtjeva za uvijanje), tada možemo pokušati pritisnuti URL i vidjeti hoćemo li dobiti povratni odgovor iz Wiremocka.
Pokušajmo pritisnuti ovaj URL u pregledniku - http: // localhost: 8080 / get / user / 1
Ako je mapiranje uspješno postavljeno, trebali biste dobiti odgovor kao što je prikazano u nastavku:
Uz JUnit testove kao konfiguraciju pravila JUnit
Wiremock poslužitelj može se koristiti s testovima JUnit kao postavljanje pravila JUnit. Ovim se JUnit brine o životnom ciklusu Wiremocka tj. Wiremock se pokreće i zaustavlja.
pitanja i odgovori na razgovor s analitičarom za kvalitetu pdf
Uglavnom se koristi u postavkama u kojima želite pokrenuti i zaustaviti poslužitelj nakon svakog testa.
Ovo ima svoje prednosti izoliranosti i ima visok stupanj konfigurabilnosti za razliku od samostalne postavke u kojoj više ljudi može završiti koristeći isti poslužitelj i prelaziti preko međusobno zakrčenih odgovora.
Pogledajmo djelotvorni primjer ovog pristupa:
# 1) Stvorite pravilo JUnit za Wiremock poslužitelj. Ovaj je korak u osnovi sličan koraku postavljanja testa u kojem govorimo pokretaču JUnit da instancira Wiremock poslužitelj prije svakog testa i zaustavi poslužitelj nakon svakog testa.
To također znači da će se JUnit runner pobrinuti za pokretanje i zaustavljanje Wiremock poslužitelja, a da to izričito ne čini.
@Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080));
#dva) Sada ćemo napisati svoj test gdje ćemo prvo stvoriti našeg klijenta (koristeći okHttp) za izvršavanje zahtjeva prema željenoj krajnjoj točki.
// execute request through http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build();
# 3) Ali, ovdje možete primijetiti da još uvijek nismo postavili nijedan kvar koji se vraća za našu instalaciju Wiremock. tj. gore navedeni klijent zatražit će URL http: // localhost: 8080 / test / abc koji nema nijedan konfigurirani klat. U tom će slučaju Wiremock poslužitelj vratiti 404 nema sadržaja.
# 4) Sada da bismo postavili klip za gornji URL za našu instancu poslužitelja Wiremock, morat ćemo pozvati statičke metode klatna Wiremocka kako je prikazano u nastavku.
private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); }
Ovdje možete vidjeti da smo upotrijebili nekoliko statičkih metoda poput configureFor, stubFor itd. Sve ove metode dio su knjižnice Wiremock Java. (Te ćemo metode detaljno razmotriti u sljedećem vodiču / odjeljcima)
# 5) Sada s korakom konfiguracije možemo jednostavno izvršiti zahtjev putem klijenta i provjeriti valjanost odgovora (ovisno o tome što je konfigurirano za vraćanje klica kroz Wiremock)
Da rezimiramo, evo kako bi izgledao cijeli uzorak koda:
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!'))); } }
Potrebne ovisnosti
Dostupan je kao:
- Samostalni JAR koji sadrži samo ovisnost o Wiremocku.
- Masna tegla koja sadrži Wiremock i sve njegove ovisnosti.
Oba okusa dostupna su kao ovisnosti o Gradleu i Mavenu. Više detalja dostupno je u službenom spremištu Maven ovdje
Video lekcije: Wiremock s JUnit testom
Zaključak
U ovom uputstvu prošetali smo kroz osnovne značajke Wiremocka i vidjeli kako se može pokretati kao samostalni poslužitelj i kao dio JUnit testova koristeći JUnit pravila.
Također smo se ukratko dotaknuli zapinjanja i detaljno ćemo ga obraditi u sljedećem vodiču.
SLJEDEĆA Vodič
Preporučena literatura
- Uvod u Micro Focus LoadRunner - Ispitivanje opterećenja pomoću vodiča br. 1 za LoadRunner
- Vodič za Ngrok: Kratki uvod u instalaciju i postavljanje
- Vodič za TestNG: Uvod u TestNG Framework
- Uvod u Selenium WebDriver - Vodič za selen br. 8
- Uvod u programski jezik Java - Video vodič
- Postupak uvođenja i instalacije Pythona
- Što je Unix: kratki uvod u Unix
- Vodič za Neoload: Uvod u Neoload, preuzimanje i instalacija