wiremock tutorial introduction wiremock
Aquest tutorial de vídeo introductori explicarà les característiques de Wiremock i com executar Wiremock com a servidor independent i com a part de les proves de JUnit:
En aquest tutorial, tractarem els conceptes i detalls bàsics de l’eina Wiremock. Es pot utilitzar com a servidor HTTP autònom, així com a les proves de JUnit segons els requisits.
Aquesta és una eina molt utilitzada, ja que és de codi obert i compta amb una gran comunitat de col·laboradors. S’inclou a la categoria d’eines de virtualització de serveis.
Què aprendreu:
Què és Wiremock?
En termes senzills, Wiremock és una configuració burleta per a proves d’integració. És simplement un simulador de servidor altament configurable per retornar la resposta esperada per a una sol·licitud determinada.
S’utilitza àmpliament durant el desenvolupament i, sobretot, durant les proves d’integració mentre un sistema o servei parla amb una o diverses dependències / serveis externs o interns.
Intentem entendre més sobre les proves d’integració en general i conèixer com Wiremock pot ajudar a superar aquests reptes i facilitar-nos la vida.
En general, quan arriba la paraula integració, el que ens crida l’atenció és la integració d’un extrem a l’altre entre dos sistemes comunicatius. Ara, vegem-ho des de la perspectiva d’una aplicació en prova que utilitza algun servei extern per fer la feina.
Per exemple, suposem que estem creant una aplicació per a viatges en línia o sistema de venda de bitllets i que tenim un mòdul per a la comprovació de l'estat del PNR, que arriba a una API externa proporcionada per Indian Railways
Ara, com podem integrar la prova de la nostra aplicació amb les API externes?
Hi ha dues maneres de fer-ho:
- Primer, és l’enfocament de la prova de la unitat, en què trastocem la interfície que s’ofereix (o que es crea a casa) perquè el nostre sistema provi / validi la resposta falsa o falsa fins i tot abans d’accedir a l’API externa. Això no és altra cosa que una prova d’unitat que intenta burlar-se d’una dependència externa.
- Segon està provant amb algun entorn de prova (o l'entorn de producció real) de les dependències externes. No obstant això, hi ha diversos reptes amb aquest enfocament, tal i com s'esmenta a continuació:
- És possible que els sistemes d’API externs no sempre estiguin disponibles. És a dir, som molt dependents o dependents de sistemes externs i qualsevol temps d'inactivitat afectarà les nostres proves i indirectament el procés de desenvolupament / publicació.
- En segon lloc, les API externes poden tenir o no un entorn de prova. Per exemple, una API de comprovació de l'estat del PNR sempre pot requerir números PNR reals per obtenir i retornar respostes.
- Moltes vegades hi ha costos relacionats amb obtenir una API. Per exemple, suposem que l'API de comprovació PNR cobra 100 rupies per cada 1.000 sol·licituds. Com que les proves d’integració se solen executar durant cada regressió (i la majoria de vegades amb cada commit), pot ser que no sigui una solució rendible aconseguir una API d’aquest tipus que ens costi fins i tot a efectes de proves.
- No es pot configurar una API externa per retornar la resposta desitjada. Fins i tot si és possible, haureu de crear moltes dades de prova per garantir respostes diferents per a diferents entrades de sol·licituds.
Per exemple, voleu provar escenaris d'error, com si una API retorni codis d'estat diferents per a diferents tipus de dades. Ara que la resposta no està sota el nostre control, haurem de crear diversos conjunts de dades per validar diferents possibles escenaris o resultats.
Comprenem aquests conceptes amb l’ajut del diagrama següent.
Aquí comparem els enfocaments de les proves d’integració, és a dir, sense un servidor simulat que utilitzi una implementació real de la dependència externa i amb el servidor simulat (Wiremock) que es burli de les respostes a les sol·licituds rebudes de dependència.
En aquest darrer cas, redueix enormement la dependència i la dependència de la implementació real de la dependència i proporciona moltes capacitats de configuració sense comprometre la qualitat i els horaris de lliurament.
Com respon Wiremock a una sol·licitud donada?
Com sabem, Wiremock és un servidor Mock programàtic, la forma en què respon a una sol·licitud determinada és emmagatzemant tots els mapatges pertinents (o respostes burlades) en una carpeta anomenada 'mapatges'.
Hi ha un component de concordança de Wiremock que fa coincidir les sol·licituds entrants amb les assignacions emmagatzemades i, si es torna una coincidència satisfactòria, es torna la primera coincidència com a resposta a la sol·licitud donada.
En cas que utilitzeu la versió independent de Wiremock, un cop hàgiu executat el servidor de Wiremock, veureu la carpeta de mapatges que es crearà al directori d’instal·lació / jar de Wiremock.
Video Tutorial: Introducció a l'eina Wiremock
què és un fitxer torrent i com l'obro
Com s'utilitza Wiremock?
Ara vegem com podem utilitzar aquesta eina amb les nostres proves d’integració.
Es pot utilitzar de les maneres següents.
Un servidor independent de cablejat
Com a servidor independent, només podeu crear una aplicació Java senzilla amb dependència Maven / Gradle per a Wiremock i mantenir-la com un procés en execució.
Aquesta és una bona alternativa quan voleu allotjar el vostre servidor independent en alguna màquina i fer-lo servir com a únic servidor de burla per a tot el projecte o equip. En mode autònom, aquesta eina també es pot executar descarregant el pot independent disponible aquí i simplement executeu el pot.
Per exemple, suposem que voleu desplegar la vostra instància autònoma de Wiremock en algun servidor al núvol o en un servidor local, simplement podeu executar aquest jar i utilitzar la IP del sistema per utilitzar-lo com a servei allotjat.
Vegem-ne alguns passos per executar-ho en mode autònom (i configurar diferents coses com ports, mapes de carpetes, etc.)
# 1) Executeu el pot de Wiremock des del terminal (o de l'indicador d'ordres per als usuaris de Windows) com qualsevol altre fitxer JAR (des del directori d'instal·lació del pot de Wiremock).
java -jar wiremock-standalone-2.25.1.jar
# 2) Per defecte, Wiremock s'executa a localhost: 8080 (si el port és gratuït per utilitzar-lo, l'ordre anterior iniciarà el servidor Wiremock en mode autònom) i veureu la sortida com es mostra a continuació.
# 3) Ara, un cop s’inicia el servidor, podeu visitar qualsevol URL de localhost: 8080
Per exemple, http: // localhost: 8080 / get / user / 1 - Com que actualment no s'estan configurant cap mofa, obtindreu una resposta com es mostra a continuació.
# 4) Ara, provem de configurar un simulacre / simulacre senzill per a aquest URL i provem de tornar a encetar-lo. A continuació, validarem que si premeu el mateix URL ara es torna la resposta burlada o obstinada.
curl -X POST --data '{ 'request': { 'url': '/get/user/1', 'method': 'GET' }, 'response': { 'status': 200, 'body': 'Here it is!
' }}' http://localhost:8080/__admin/mappings/new
Intentem comprendre primer aquesta sol·licitud CURL:
- Estem fent una sol·licitud CURL POST a http: // localhost: 8080 / __ admin / mappings / new: ara és la ubicació on s’emmagatzemaran totes les assignacions del servidor Wiremock que hem executat / iniciat a través del fitxer JAR.
- A la sol·licitud Curl, definim paràmetres de sol·licitud com ara: URL i mètode de sol·licitud juntament amb el cos de resposta a la secció 'resposta'. Això simplement implica que cada vegada que apareix una sol·licitud GET amb URL / get / user / 1, responeu amb el cos de resposta especificat.
# 5) Un cop configurada la resposta tallada (amb l'ajut de la sol·licitud de curl anterior), podem provar de colpejar l'URL i veure si obtenim una resposta tallada des del Wiremock.
Intentem prémer aquest URL al navegador: http: // localhost: 8080 / get / user / 1
Si el mapatge s'ha definit correctament, hauríeu d'obtenir una resposta com es mostra a continuació:
Juntament amb les proves JUnit com a configuració de la regla JUnit
El servidor Wiremock es pot utilitzar amb proves JUnit com a configuració de la regla JUnit. Amb això, JUnit s’encarrega del cicle de vida de Wiremock, és a dir, Wiremock s’inicia i s’atura.
com configurar un tallafoc de xarxa
S’utilitza sobretot en configuracions on voleu iniciar i aturar el servidor després de cada prova.
Això té els seus propis avantatges d’estar aïllat i té un alt grau de configurabilitat en lloc d’una configuració autònoma en què diverses persones poden acabar utilitzant el mateix servidor i superar les respostes de les altres.
Vegem un exemple de treball d’aquest enfocament:
# 1) Creeu una regla JUnit per al servidor Wiremock. Aquest pas és essencialment com un pas de configuració de la prova en què li diem al corredor de JUnit que instanti el servidor Wiremock abans de cada prova i aturi el servidor després de cada prova.
Això també significa que el corredor JUnit s'encarregarà d'iniciar i aturar el servidor Wiremock, sense fer-ho explícitament.
@Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080));
# 2) Ara escriurem la nostra prova on primer crearem el nostre client (amb okHttp) per executar sol·licituds contra el punt final desitjat.
// execute request through http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build();
# 3) Però, aquí es pot notar, que encara no hem establert cap taló per retornar per a la nostra instància de Wiremock. és a dir, el client anterior sol·licitarà un URL http: // localhost: 8080 / test / abc que no tingui cap registre configurat. En aquest cas, el servidor Wiremock retornarà 404 sense contingut.
# 4) Ara, per establir un taló per a l'URL anterior per a la nostra instància de servidor de Wiremock, haurem de trucar als mètodes estàtics de taló de Wiremock com es mostra a continuació.
private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); }
Aquí podeu veure que hem utilitzat un parell de mètodes estàtics com configureFor, stubFor, etc. Tots aquests mètodes formen part de la biblioteca Java de Wiremock. (Veurem aquests mètodes amb detall al nostre següent tutorial / seccions)
# 5) Ara, amb el pas de configuració realitzat, simplement podem executar la sol·licitud a través del client i validar la resposta (depenent del que estigui configurat perquè el stub torni a través de Wiremock)
En resum, a continuació s’explica l’aspecte de tota la mostra de codi:
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!'))); } }
Es requereixen dependències
Està disponible com:
- Un JAR autònom que conté només la dependència de Wiremock.
- Un pot gros que conté Wiremock i totes les seves dependències.
Tots dos sabors estan disponibles com a dependències de Gradle i Maven. Podeu obtenir més informació al dipòsit oficial de Maven aquí
Vídeo tutorial: Wiremock amb JUnit Test
Conclusió
En aquest tutorial, vam examinar les funcions bàsiques de Wiremock i vam veure com es pot executar com a servidor independent i com a part de les proves JUnit mitjançant les regles JUnit.
També vam tractar breument els esborranys i ho tractarem amb detall al nostre proper tutorial.
NEXT Tutorial
Lectura recomanada
- Introducció a Micro Focus LoadRunner: proves de càrrega amb LoadRunner Tutorial # 1
- Tutorial de Ngrok: una breu introducció amb instal·lació i configuració
- Tutorial TestNG: Introducció a TestNG Framework
- Introducció a Selenium WebDriver - Tutorial Selenium # 8
- Introducció al llenguatge de programació Java: vídeo tutorial
- Introducció i procés d’instal·lació de Python
- Què és Unix: una breu introducció a Unix
- Tutorial Neoload: Introducció, descàrrega i instal·lació de Neoload