Wiremock

wiremock

Wiremock é uma ferramenta que auxilia a criação de mocks.

Site oficial: http://wiremock.org/

Exemplo simples utilizando o jar do wiremock.

Faça download o jar standalone em http://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.8.0/wiremock-standalone-2.8.0.jar

Para rodar o wiremock, executar o comando java no terminal no mesmo path onde encontra-se o jar:

 
java -jar wiremock-standalone-2.8.0.jar

Por default, a porta é 8080. Para rodar em uma porta específica, basta configurar:

java -jar wiremock-standalone-2.8.0.jar --port 8085

O wiremock será inicializado.

img1

Para criar um mapeamento simples, vamos supor uma requisição GET que retorne code 200 (sucesso) e retorne um json.
para isso, dentro da pasta onde está o jar do mock, dentro de uma pasta mappings, no mesmo path de onde encontra-se o jar do wiremock, devemos criar um arquivo .json mapeando a request, qual o method, a url e ainda qual a response, com o status code e um body.

 
{
  "request": {
  "method": "GET",
  "url": "/alguma/url"
},
"response": {
  "status": 200,
  "body": "Alguma url foi chamada com sucesso!!!",
  "headers": {
    "Content-Type": "text/plain"
  }
}

Nota: para que a alteração faça efeito, é necessário restartar o wiremock, apenas finalizando a execução atual e executando o java -jar novamente.

Fazendo o restart, ao entrar num browser no endereço http://localhost:8085/alguma/url teremos o seguinte resultado:

img2

Uma outra forma de trabalhar com wiremock é mapear num response um outro json como resposta.
Para isso, criamos um novo arquivo .json dentro da pasta mappings, com o seguinte mapeamento:

{
  "request": {
    "method": "GET",
    "url": "/alguma/url2"
  },
  "response": {
    "status": 200,
    "bodyFileName": "result1.json",
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

Note que o response aponta para um arquivo result1.json. Esse arquivo deve ficar numa pasta __files, na mesma altura de onde encontra-se o jar do wiremock.
Esse arquivo possui o seguinte conteúdo:

{
  "campo1": "valor1",
  "campo2": 123,
  "campo3": {
    "campo3.1":"tst",
    "campo3.2":2342342342343434
  }
}

Ao executar então a nova url mapeada http://localhost:8085/alguma/url2 teremos o seguinte resultado:

img3

Exemplo de mock retornando erro:

{
  "request": {
    "method": "GET",
    "url": "/algum/erro"
  },
  "response": {
    "status": 404
  }
}

img4

Alguns status comuns de serem mapeados:
200 ok
201 created
404 not found
403 forbidden
405 method not allowed
500 internal server error
502 bad gateway
503 Service Unavailable

Lista com todos os status: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

Para mapear o wiremock para que parte do que está na request seja usado como resposta, é preciso configurar o response templating. Para isso, ao executar o comando para inicializar o wiremock, é necessário passar o parâmetro –global-response-templating

java -jar wiremock-standalone-2.8.0.jar --port 8085 --global-response-templating

Exemplo simples de uma request em que o último parâmetro da url será usado como resposta.
Mapeamento da request:

{
  "request": {
    "method": "GET",
    "urlPattern": "/alguma/url3/.*"
  },
  "response": {
    "status": 200,
    "bodyFileName": "result2.json",
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

Nesse caso foi mapeado um pattern de url, onde qualquer chamada a /alguma/url3/ mais algum parâmetro, deverá responder o que está mapeado nesse response.

Mapeamento do response, pegando o valor que está na url utilizando o request path:

{
  "campo1": {{request.path.[2]}},
  "campo2": 123,
  "campo3": {
    "campo3.1":"tst",
    "campo3.2":2342342342343434
  }
}

Note que o parâmetro utilizado é o segundo [2]. O primeiro item da url é mapeado como 0.
Dessa forma temos para 0 a palavra “alguma”, para 1 a palavra “url3” e para 2 o que for digitado na url.
Caso seja solicitada a seguinte url http://localhost:8085/alguma/url3/123456, teremos o seguinte resultado:

img5

Ou ainda, caso seja solicitada a seguinte url http://localhost:8085/alguma/url3/unicorn, teremos o seguinte resultado:

unicorn

#SQN só que não 😛 rs

Errou

Segue o resultado correto:
img6

Além de GET, também é possível mapear POST, DELETE, etc, sempre mantendo a idéia de qual a url ou url pattern da request, qual o method, e qual o response e status code de retorno.
Para mais informações e também outras formas de usar o wiremcock: http://wiremock.org/docs/getting-started/

Exemplo utilizado nesse post pode ser encontrado em https://github.com/reyoko/wiremock-simple-example

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *