Rodando Wiremock no Docker

Ronaldo Santos
Oct 18 · 4 min read

Uma forma simples e eficaz para simular uma API que ainda não está pronta

Image Credits: author derivative work of Wiremock logo and Docker logo (flickr.com)

Cada vez mais frequentemente, sistemas são desenvolvidos a partir de integrações e interações com outros sistemas, o que nada mais são do que as famosas APIs.

Em muitos casos, quando começamos a desenvolver uma solução não temos todas as fontes de origem de dados respondendo, ou seja, são muitos os casos nos quais o desenvolvimento das APIs ocorre de forma paralela. Agora, imagine que você esteja desenvolvendo uma feature que depende de uma API que ainda está sendo desenvolvida?

Bem, não precisa se desesperar. Conforme nosso amigo Eriton descreveu muito bem no artigo “Conheça a WireMock”, é possível usar esta ferramenta para realizar testes de serviços com base em um payload esperado, testar cenários de falha e timeout, vislumbrar uma UI para validação de designer e mais um monte de coisas.

E aí você deve estar se perguntando: por que eu vou continuar lendo esse artigo se a informação está no outro? Calma que eu vou te explicar.

Nesse ponto já identificamos o quanto o Wiremock pode nos ajudar, mas agora imagine se rodarmos em um container Docker, ou seja, um ambiente isolado, portátil, de fácil execução e implementação? Assim, podemos “simular” não somente o payload de resposta mas também o endereçamento e comunicação entre os serviços.

Um exemplo mais prático desta implementação seria você deployar esse container com o Wiremock em um cluster Kubernetes, por exemplo, fazer seu aplicativo chamá-lo para a obtenção de dados e, quando a API final ficar pronta e estiver disponível, você só precisaria alterar o endpoint da chamada para "virar a chave" de dados fakes para os dados reais.

Vamos ver, então, como ter o nosso container Docker pronto para rodar o Wiremock e, assim, ter nosso emulador de API portátil.

Disponibilizei no Github um repositório com a estrutura básica de arquivos que você vai precisar para criar sua imagem Docker e rodar seu container, e para acessar é só você clicar aqui. Claro que não fiz tudo sozinho, então vou deixar nas referências as fontes que serviram de base para essa implementação.

Depois de baixar o repositório você terá a seguinte estrutura:

Arquivos:

docker-compose.yml — contém as definições de serviços que você colocar para rodar.

docker-entrypoint.sh — script de inicialização da aplicação. É a execução deste script, no momento da criação do container, que faz sua aplicação rodar;

Dockerfile — define como a imagem Docker será criada para poder ser usada quando for subir o container;

README.md — informações do projeto. Dica: aqui você pode adicionar as rotas de respostas que você criou;

Diretório:

mappings — local onde você cria os arquivos .json que serão as respostas de sua aplicação.

__files — neste diretório temos um arquivo .json somente para apoiar a geração

Hora de por a mão na massa…

Passo 1:
Faça o clone do repositório

git clone https://github.com/ronaldorts/api-emulator

Passo 2:
Gere a imagem Docker com o seguinte comando:

docker build -t ronaldorts/api-emulator .

*Aqui você escolhe o nome/tag para sua imagem.

Importante, o nome que você der para a sua imagem deverá ser indicado no seu docker-compose.yaml.

Passo 3:
Após criar sua imagem e editar docker-compose.yaml com o nome da imagem que você criou, basta rodar o comando docker-compose up e sua API fake estará pronta para ser usada.

Vale lembrar que você precisa estar no diretório do seu docker-compose.yaml.

Para esse exemplo teremos quatro endpoints:

http://localhost:8081/ready, que retorna um ID randômico de exemplo

http://localhost:8081/health, que retorna “Health” no body

http://localhost:8081/cpf/valido, que retorna um payload para a chamada de um CPF válido

e http://localhost:8081/cpf/invalido, que retorna um payload para a chamada de um CPF inválido

Você pode adicionar novos endpoints adicionando arquivos xxxx.json na pasta mappings, seguindo o modelo descrito abaixo:

{
"request": {
"method": "GET",
"url": "/api/mytest"
},
"response": {
"status": 200,
"body": "More content\n"
}
}

E é isso! Seguindo esses passos temos nossa API portátil pronta para ser levada e usada, onde quiser. Ficou alguma dúvida ou tem algo a acrescentar? Aproveite os campos de comentários. E se quiser fazer parte do time de Digital Product Development da Accenture, é só dar uma olhada aqui e se candidatar a alguma de nossas vagas. Até a próxima!

Referências:

https://medium.com/digitalproductsdev

http://wiremock.org/docs/running-standalone/

https://github.com/rodolpheche/wiremock-docker

Digital Product Dev

Nós desenvolvemos produtos digitais com inovação, agilidade…

Digital Product Dev

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

Ronaldo Santos

Written by

Digital Product Dev

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.