WireMock: coincidencia de requests con asignaciones JSON

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 este artículo: Introducción a WireMock . Una de las características más importantes de WireMock es la coincidencia de requests . WireMock admite la coincidencia de requests con stubs y consultas de verificación utilizando los siguientes atributos: URL, método HTTP, parámetros de consulta, encabezados, cookies, cuerpo de la solicitud, etc. Entonces, en este artículo, veremos cómo funciona la coincidencia de requests con asignaciones JSON en AlambreMock.

requisitos previos:

1. Coincidencia de URL

En WireMock, las URL pueden coincidir por igualdad o por expresión regular . Y puede hacer coincidir solo la ruta de la URL o la ruta y la consulta juntos. Veamos ambos escenarios con ejemplos.

Ejemplo: Coincidencia de igualdad solo en la ruta

Sintaxis:

{
  "request": {
    "urlPath": "provide your url here"
    ...
  },
  ...
}

Ahora demostremos esto con la ayuda de Postman. Abra su cartero y envíe una solicitud POST a la siguiente URL

http://<host>:<port>/__admin/mappings

con el siguiente cuerpo de solicitud JSON

{
    "request": {
        "method": "GET",
        "urlPath": "put your url as per your requirement"
    },
    "response": {
        "status": 200,
        "body": "put your body here"
    }
}

Por ejemplo, en este artículo nuestra URL es

URL:

http://localhost:8080/__admin/mappings

Y el cuerpo de la solicitud JSON es

Cuerpo de la solicitud:

{
    "request": {
        "urlPath": "/gfg/user1",
        "method": "GET"
    },
    "response": {
        "status": 200,
        "body": "Welcome to GeeksforGeeks!"
    }
}

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": "0eb73cc1-2070-44be-a1c9-3db40a97cea9",
    "request": {
        "urlPath": "/gfg/user1",
        "method": "GET"
    },
    "response": {
        "status": 200,
        "body": "Welcome to GeeksforGeeks!"
    },
    "uuid": "0eb73cc1-2070-44be-a1c9-3db40a97cea9"
}

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/user1

Y obtendrá la siguiente respuesta en el cuerpo de Respuesta.

Welcome to GeeksforGeeks!

Consulte la imagen a continuación si está atrapado en algún lugar

 

Ejemplo: coincidencia de expresiones regulares solo en la ruta

Sintaxis:

{
  "request": {
    "urlPathPattern": "/your/([a-z1-9]*)"
    ...
  },
  ...
}

Ahora demostremos esto con la ayuda de Postman. Abra su cartero 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

 

Del mismo modo, también puede probar la demostración en su Postman para la siguiente coincidencia de requests.

Coincidencia de igualdad en ruta y consulta

Sintaxis:

{
  "request": {
    "url": "/your/url?and=query"
    ...
  },
  ...
}

Coincidencia de expresiones regulares en ruta y consulta

Sintaxis:

{
  "request": {
    "urlPattern": "/your/([a-z1-9]*)\\?and=query"
    ...
  },
  ...
}

2. Coincidencia de otros atributos

Aparte de la URL, todos los atributos de la solicitud pueden coincidir con algunos operadores. 

Igualdad

Sintaxis:

{
  "request": {
    ...
    "headers": {
      "Content-Type": {
        "equalTo": "application/xml"
      }
    }
    ...
  },
  ...
}

Igualdad que no distingue entre mayúsculas y minúsculas

Sintaxis:

{
  "request": {
    ...
    "headers": {
      "Content-Type": {
        "equalTo": "application/xml",
        "caseInsensitive": true
      }
    }
    ...
  },
  ...
}

3. Igualdad JSON

Será una coincidencia si el atributo es JSON válido y es una coincidencia semántica para el valor esperado.

Sintaxis:

{
  "request": {
    ...
    "bodyPatterns" : [ {
      "equalToJson" : { "name": "GeeksforGeeks" }
    } ]
    ...
  },
  ...
}

4. Igualdad XML

Será una coincidencia si el valor del atributo es XML válido y es semánticamente igual al documento XML esperado.

Sintaxis:

{
  "request": {
    ...
    "bodyPatterns" : [ {
      "equalToXml" : "<thing>GeeksforGeeks</thing>"
    } ]
    ...
  },
  ...
}

5. Coincidencia de autenticación básica 

En WireMock, también puede hacer coincidir la autenticación básica HTTP. 

Sintaxis:

{
    "request": {
        "method": "GET",
        "url": "/basic-auth",
        "basicAuth": {
            "username": "your user name",
            "password": "your password"
        }
    },
    "response": {
        "status": 200
    }
}

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 *