WireMock es una herramienta para simular API basadas en HTTP que se ejecuta en las pruebas unitarias, en el escritorio o en el entorno de prueba. Lea más sobre WireMock en el artículo Introducción a WireMock . En este artículo, vamos a discutir uno de los conceptos importantes en Wiremock, es decir, cómo hacer coincidir la URL con Regex.
Coincidencia de expresiones regulares solo en la ruta de la URL
Mapeo JSON
Sintaxis:
{ "request": { "urlPathPattern": "/your/([a-z1-9]*)" ... }, ... }
Ahora demostremos esto con la ayuda de Postman. Abra su Postman y envíe una solicitud POST a la siguiente URL:
http://localhost:8080/__admin/mappings
Y el cuerpo de la solicitud JSON es
Cuerpo de la solicitud:
{ "request": { "urlPathPattern": "/gfg/([a-z1-9]*)", "method": "GET" }, "response": { "status": 200, "body": "Welcome to GeeksforGeeks Portal!" } }
Haga clic en el botón Enviar ahora y en la Respuesta, puede ver el siguiente Cuerpo de respuesta con el código de estado 201 Creado.
Cuerpo de respuesta:
{ "id": "ed9fe262-2b79-4862-9889-39378d553a35", "request": { "urlPathPattern": "/gfg/([a-z1-9]*)", "method": "GET" }, "response": { "status": 200, "body": "Welcome to GeeksforGeeks Portal!" }, "uuid": "ed9fe262-2b79-4862-9889-39378d553a35" }
Consulte la imagen a continuación si está atrapado en algún lugar
Ahora, probemos nuestra API Stubbed. Vuelva a abrir una nueva pestaña en Postman y envíe una solicitud GET a la siguiente URL
http://localhost:8080/gfg/user1345689
Nota : puede poner cualquier mentira en az y 1-9 después de /gfg/
Y obtendrá la siguiente respuesta en el cuerpo de Respuesta.
Welcome to GeeksforGeeks Portal!
Consulte la imagen a continuación si está atrapado en algún lugar
Java
Sintaxis:
urlPathMatching("/your/([a-z1-9]*)")
Ahora demostremos esto con la ayuda de IntelliJ IDEA como IDE y Maven como herramienta de compilación.
Proyecto de ejemplo
Paso 1:
Consulte este artículo Cómo crear un proyecto Maven en IntelliJ IDEA y cree un proyecto Maven en IntelliJ IDEA.
Paso 2:
Agregue las siguientes dependencias en su archivo pom.xml .
<!-- Dependency for okhttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.2.2</version> </dependency> <!-- Dependency for Wiremock--> <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>2.27.2</version> <scope>test</scope> </dependency> <!-- Dependency for JUnit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13-rc-2</version> <scope>test</scope> </dependency>
A continuación se muestra el código completo para el archivo pom.xml .
XML
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>wiremock-with-junit</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.2.2</version> </dependency> <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock</artifactId> <version>2.27.2</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13-rc-2</version> <scope>test</scope> </dependency> </dependencies> </project>
Paso 3: Ahora ve a src > test > java y crea una clase de prueba llamada WiremockWithJunit . Al principio, tenemos que configurar el stub algo como esto.
private void configStubForPostMethod() { configureFor("localhost", 9090); stubFor(post(urlPathMatching("/gfg/([a-z1-9]*)")) .willReturn(status(200) .withBody("Welcome TestUser!") .withHeader("content-type", "application/json"))); }
El código se explica por sí mismo, así que consulte el código en profundidad para que pueda entender el código fácilmente. Ahora vamos a crear el cuerpo de la solicitud:
RequestBody body = new FormBody.Builder() .add("username", "testuser") .build();
Luego llame a la solicitud en WireMock a través de OkHttpClient.
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://localhost:9090/gfg/testuser234125") .method("POST", body) .build(); Response response = client.newCall(request).execute();
Nota : Aquí en la URL puede poner cualquier cosa en el rango de [az] y [1-9] después de /gfg/.
Y finalmente, afirmar la respuesta, y listo.
assertEquals("Welcome TestUser!", response.body().string());
A continuación se muestra el código completo de la clase WiremockWithJunit.java .
Java
import com.github.tomakehurst.wiremock.junit.WireMockRule; import okhttp3.*; import org.junit.Rule; import org.junit.Test; import static com.github.tomakehurst.wiremock.client.WireMock.*; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import static org.junit.Assert.assertEquals; public class WiremockWithJunit { @Rule public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(9090)); // Stubbing with JUnit @Test public void stubbing_with_junit_test() throws Exception { // stub configuration configStubForPostMethod(); // Create the Request Body RequestBody body = new FormBody.Builder() .add("username", "testuser") .build(); // call request in WireMock through OkHttpClient OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://localhost:9090/gfg/testuser234125") .method("POST", body) .build(); Response response = client.newCall(request).execute(); // assert the response assertEquals("Welcome TestUser!", response.body().string()); } private void configStubForPostMethod() { configureFor("localhost", 9090); stubFor(post(urlPathMatching("/gfg/([a-z1-9]*)")) .willReturn(status(200) .withBody("Welcome TestUser!") .withHeader("content-type", "application/json"))); } }
Ahora, hagamos nuestra prueba. Y en la imagen de abajo puede ver que nuestra prueba ha sido aprobada.
Del mismo modo, también puede probar la demostración de la siguiente coincidencia de requests.
Coincidencia de expresiones regulares en la ruta de URL y la consulta
Mapeo JSON
Sintaxis:
{ "request": { "urlPattern": "/your/([a-z1-9]*)\\?and=query" ... }, ... }
Java
Sintaxis:
urlMatching("/your/([a-z]*)\\?and=query")
Publicación traducida automáticamente
Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA