WireMock: coincidencia de URL con Regex

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *