DOWNLOAD LINK: https://github.com/juniorgasparotto/WiremockUI/releases/download/1.1.0/WiremockUI.zip
CHOCOLATEY: choco install wiremockui
É um projeto feito em .NET Framework 4.5
que cria servidores de mock usando o famoso Wiremock
(http://wiremock.org).
A ferramenta é totalmente visual e diversos recursos do Wiremock foram potencializados:
- Facilidade para criar e executar um servidor Wiremock
- Criar e gerenciar mais de um servidor Wiremock em apenas um lugar
- Criar múltiplos cenários para a mesma API ou Site com a intenção de alterna-los conforme a necessidade de uso.
- Visualização dos mapas com sua respectiva resposta em forma de
TreeView
- Gerenciar os mapas do Wiremock com as opções: criar, editar, remover, duplicar, desabilitar e visualização em forma de JSON
- Editor avançado de texto com as seguintes opções:
- Highlight para as linguagens:
JSON
/XML
/HTML
/JavaScript
/C#
/PHP
/LUA
/VB.NET
- Formatadores de XML e JSON
- Quebra de linha automática
- Busca e substituição
- Ir para a linha
- Highlight para as linguagens:
- O gerenciamento dos mapas (dentro da ferramenta) dispensa o reinicio do servidor.
- Logs nas visualizações de texto e tabela com as opções:
- Análise de tempo
- Re-executar a requisição com a ferramenta interna
Web Request
- Comparar requisições que não deram correspondência com qualquer mapa da
TreeView
.
- Ferramentas internas:
Web Request
: É um simples executor de chamadas HTTP que pode ajudar a depurarText Compare
: É um simples comparador de textoText editor
: Editor de texto com as opções de formatação para JSON ou XMLJSON Viewer
: Visualizador de JSON em forma de árvore.
- Fazer o download do .zip clicando aqui
- Extrair o .zip em qualquer local
- Abrir o arquivo
Wiremock.exe
DOWNLOAD LINK: https://github.com/juniorgasparotto/WiremockUI/releases/download/1.1.0/WiremockUI.zip
Não precisa de instalação
choco install wiremockui
Url: https://chocolatey.org/packages/wiremockui
Atualização
choco upgrade wiremockui
Desinstalação
choco uninstall wiremockui
- Windows
- .NET Framework 4.5
- chocolatey:
choco install dotnet4.5
- microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=30653
- chocolatey:
- Tutorial
- Wiremock - Overview
- Como funciona?
- Como contribuir
- Licença
Ao criar um novo servidor, um cenário também será criado, você pode ter mais de um cenário para um mesmo servidor, alternando-os quando necessário usando a opção Set as Default
que existe nas opções dos cenários.
- Clique com o lado direito do mouse sobre o item
Servers
e clique emAdd Server
- O campo
Server Port
será gerado automaticamente, mas pode ser alterada a qualquer momento. - Você não precisa preencher o campo
Target URL
, pois a ideia é criar um servidor do zero. Se você quiser gerar uma massa inicial com uma API existente, utilize esse campo e execute o servidor em modo de gravaçãoStart and Record
.
- Na criação do servidor, é possível configurar a execução do wiremock. Clique na aba
Advanced
- Para obter mais informações sobre cada uma: http://wiremock.org/docs/running-standalone/
Add scenario
: Adiciona um novo cenário. Apenas um cenário pode estar ativo por vez.Start
: Inicia um servidor usando os dados físicos das pastasmappings
e__files
Start (Only Proxy)
: Inicia um servidor apenas como proxy ignorando os arquivos salvos se existerem.Start and Record
: Inicia um servidor como proxy em modo de gravaçãoRestart
: Reinicia o servidor mantendo o tipo de execução que foi iniciadoStop
: Parar o servidorOpen Server folder
: Abre a pasta onde estão todos os cenáriosOpen Targer URL in browser
: Abre a URL original no BrowserOpen Server URL in browser
: Abre a URL do servidor wiremock no BrowserDuplicate
: Duplica todo o servidor, incluindo os cenários e todos os arquivosEdit
: Edita as informações do servidorRemove
: Remove o servidor
- Clique com o lado direito do mouse sobre o servidor desejado e clique em
Add scenario
- Você pode ter mais de um cenário para um mesmo servidor, isso é útil para situações onde você não quer perder tempo de criar correspondências avançadas usando as opções de match do wiremock.
Add map
: Adiciona um novo arquivo de mapa, esse mapa será o básico de um mapa do wiremock.Set as Default
: Indica que os arquivos deste cenário serão utilizados quando o servidor for iniciado.Open scenario folder
: Abre a pasta que contém os arquivos desse cenárioDuplicate
: Duplica esse cenário e todos seus arquivosEdit
: Edita o cenárioRemove
: Remove o cenárioShow URL
: Quando ativo, exibe a URL dos mapas na árvoreShow Name
: Quando ativo, exibe o nome do arquivo na árvore
- Para adicionar um novo mapa, clique com o lado direto do mouse sobre o item
Scenario1
. - Será criado um arquivo de mapa com o básico das configurações do Wiremock. Para obter mais informações sobre como configurar um mapa acesse: http://wiremock.org/docs/request-matching/.
Rename
: Renomeia o arquivo, quando isso ocorre, o arquivo de resposta também será renomeado e ficará com o mesmo nome, porém mantendo a sua extensão original.Duplicate
: Duplica esse mapaRemove
: Remove o mapaEnable
: Quando desativado, esse mapa será ignoradoView in Web Request
: Abre o mapa noWebRequest
permitindo executa-lo.View in explorer
: Abre o gerenciador de arquivos com o arquivo selecionado.
- Ao abrir um arquivo de mapa ou qualquer outro arquivo JSON, será possível visualiza-lo com a ferramenta
JSON Viewer
. - Clique com o lado direito do mouse sobre o atributo desejado para obter mais opções:
View text editor
: Visualiza o conteúdo em uma nova janelaView as Json
: Visualiza o conteúdo em uma nova janela JSON ViewerExpand all
: Abre todos os filhos do nóClose all
: Fecha todos os filhos do nó
- Esse visualizador também está disponível em
Tools -> JSON Viewer
View in explorer
: Abre o gerenciador de arquivos com o arquivo selecionado.
Para abrir as opções de edição de texto, clique com o lado direito do mouse sobre o campo desejado. As seguintes opções serão exibidas:
Undo
: Desfaz uma alteraçãoRedo
: Refaz uma alteraçãoEdit
Word Wrap
: Liga ou desliga a quebra de linha automáticaSelect all
: Seleciona todo o textoCopy
: Copia o texto selecionadoCut
: Recorta o texto selecionadoPaste
: Copia o que estiver na área de transferência para o campo de textoRemove
: Remove o texto selecionado
Find
: Abre uma nova janela com as opções de busca ou substituição do texto.Json
: Opções de formatação de JSONFormat
: Deixa o JSON em uma forma mais legívelEscape
: "Escapa" o JSON para ele poder ser usado como valor de outro JSONUnescape
: Volta o JSON para o estado normal quando esta "escapado"Minify
: Remove os espaços desnecessários do JSONEdit value
: Essa opção só aparece quando um texto estiver selecionado, ele é usada para editar (em outra janela) um valor de um atributo que contenha um "JSON escapado".
XML
: Tem as mesmas opções do JSON, porém para o formato XMLLanguages
: Altera oHighlight
do arquivo que está sendo editado de acordo com a linguagem selecionada.- Um novo editor de texto também está disponível em
Tools -> Text Editor
- Clique com o botão direito do mouse sobre o servidor desejado
- Clique em
Start
- Ao iniciar o servidor, uma janela contendo os logs em forma de texto e tabela serão exibidos.
- O primeiro texto do "log" exibe a linha de comando (em verde) que seria o equivalente ao comando Java para a opção selecionada.
- Umas das vantagens de usar o WiremockUI é que você pode editar os arquivos de mapa e suas respostas sem a necessidade de reiniciar o serviço.
Abrir o servidor no browser
- O log da grid é mais completo que o log em forma de texto, além de mostrar as chamadas de uma forma mais fácil, ainda existe algumas opções de debug, como:
- Re-executar os requests.
- Comparar os requests com os mapas existentes.
- Essas opções de debug só funcionam com o tipo
LISTENER
, os tiposNET.IN
eNET.OUT
são chamadas de baixo nível feitas pelo wiremock e que também são exibidas aqui.
- Ao clicar com o botão direito sobre o tipo
LISTENER
, clique na opçãoOpen in WebRequest
. - A ferramenta permite editar os dados de request e exibe na barra de status o código de retorno com o tempo que a chamada demorou. Essa ferramenta também está disponível pelo menu
Tools -> Web Request
- Ao clicar com o botão direito sobre o tipo
LISTENER
, clique na opçãoCompare
. - Na lado esquerdo será aberto o conteúdo da chamada do log. Selecione o arquivo que deseja comparar usando o botão com a seta para baixo no lado direito do comparador.
- Essa ferramenta também está disponível no menu
Tools -> Text Compare
- Para ter uma precisão maior sobre o tempo da chamada, compare os tempos do tipo
NET.IN
(colunaRequestTime
) com o tipoNET.OUT
(ColunaResponseTime
) da URL desejada. Infelizmente, não existe uma opção precisa para obter essa informação, seria um desejo para as próximas versões do Wiremock (em Java). - O tipo
NET.OUT
não retorna a URL no campo esperado, sendo assim, a localização dessa linha deve ser manual, ou seja, limpe os logs e faça a chamada apenas da URL que deseja medir o tempo. - Essa opção só faz sentido quando esta sendo executado como proxy, não faz sentido medir o tempo de um servidor de mock.
Adicione um novo servidor preenchendo a opção Target URL
, assim as opções de execução de gravação e proxy serão exibidas no menu do servidor.
Iniciando o servidor
Ao executar em modo de gravação, você verá no log as opções match-headers
, isso significa que ao gerar o mapa da rota, os headers Content-Type
e SOAPAction
devem fazer parte do filtro se existirem, ou seja, a URL
, o BODY
e esses headers
devem ser iguais para haver uma resposta.
- Após a gravação, os mapas serão exibidos na árvore e suas respostas estarão disponíveis ao clicar no
+
de cada mapa. - Para usar os arquivos salvos, pare o servidor com a opção
Stop
e inicie com a opçãoStart
.
Adicione um novo servidor preenchendo a opção Target URL
, assim as opções de execução de gravação e proxy serão exibidas no menu do servidor.
Iniciando o servidor
- Clique com o lado direito do mouse sobre o servidor
- Clique na opção
Start (Only Proxy)
File
Refresh
: Atualiza a tela para voltar ao estado inicial.Open files folder
: Abre a pasta onde estão todos os arquivos.Find in Files
: Abre a ferramenta de pesquisa em arquivos.Languages
: Suporta duas línguas: inglês e portuguêsQuit
: Sai da aplicação
Execute
:Add Server
: Adiciona um novo servidorStart All
: Inicia todos os servidoresStart and record all
: Inicia todos os servidores em modo de gravaçãoStop all
: Parar todos os servidores
Tools
:Web Request
: Abre a ferramentaWebRequest
que faz requisições web. Essa ferramenta é muito simples, diversas configurações do protocolo HTTP não foram implementadas, ela foi criada para reexecutar requisições ou mapas.Text Compare
: Abre a ferramenta que compara texto. Essa ferramenta é muito simples, é apenas para ajudar na comparação básica de requisições com mapas que não deram match.Text Editor
: Abre a ferramenta de edição de texto. A ferramenta é muito simples e foi desenvolvida para ajudar a formatar algum valor no formato JSON ou XML.JSON Viewer
: Abre a ferramenta JSON Viewer que ajuda na visualização do JSON exibindo-o em forma de TreeView
About
: Abre a tela de sobre.
É um projeto construído em java que simula um serviço web. Tecnicamente ele foi projetado para trabalhar de de duas formas:
- Modo Standalone: É quando ele é executado no prompt de comando com a finalidade de criar servidores web armazenando os request e responses em forma de arquivos. Ele pode trabalhar com 3 tipos de servidores.
- Executar como servidor de mock
- Executar como proxy, mas gravando os dados (útil para a carga inicial)
- Executar apenas como proxy
- Framework de testes: Está fora do nosso escopo, mas ele também pode ser usado como framework de mock de API para testes de unidades em Java. Em .NET temos o
mock4net
que tem como inspiração o Wiremock.
Para mais informações, acesse o site oficial da ferramenta: http://wiremock.org/
Dentro do contexto de testes ele é útil para simular APIs ou qualquer coisa sobre o protocolo HTTP. O servidor utiliza, basicamente, de duas pastas para trabalhar:
- mappings: Essa pasta contém os arquivos
.json
, onde cada arquivo representa uma rota com sua respectiva resposta. Existe uma porção de configurações dentro de cada mapa, todas estão disponíveis na documentação do wiremock. - __files: Nessa pasta ficam os arquivos de resposta que são configurados no mapa.
Exemplo de mapa - GET
Esse mapa cria uma rota que ficará ouvindo a rota http://[SERVER]:5500/user/all
utilizando o verbo GET
. Quando uma requisição estiver dentro dessas regras o conteúdo do arquivo response.txt
será retornado:
{
"request": {
"url": "/user/all",
"method": "GET"
},
"response": {
"status": 200,
"bodyFileName": "response.txt",
"headers": {
"Content-Type": "application/json"
}
}
}
Exemplo de mapa - POST
Esse mapa cria uma rota que ficará ouvindo a rota http://[SERVER]:5500/user/insert”all
utilizando o verbo POST
e quando o corpo da requisição for igual á {\"Name\":\"User3\",\"Age\":100}
. Quando uma requisição estiver dentro dessas regras o conteúdo do arquivo response.txt
será retornado:
{
"request": {
"url": "/user/insert",
"method": "POST",
"bodyPatterns" : [
{
"equalToJson" : "{\"Name\":\"User3\",\"Age\":100}"
}
]
},
"response": {
"status": 200,
"bodyFileName": "response.txt",
"headers": {
"Content-Type": "application/json"
}
}
}
Response:
A resposta é sempre "crua", sem nenhum encapsulamento. Como nos mapas anteriores, vimos que o arquivo de resposta é um application/json
, então esse arquivo terá o conteúdo JSON, se fosse uma imagem, esse arquivo de resposta teria a extensão da imagem, exemplo: response.jpg
e seu conteúdo seria um binário.
{
"key1": "value"
}
Testando:
- Subir o servidor
java -jar "D:\wm\wiremock-standalone-2.8.0.jar" --port 5500 --root-dir "D:\wm\server1" --verbose
- Cenário de GET:
- Url:
http://localhost:5500/user/all
- Method:
GET
- Url:
- Cenário de POST:
- Url:
http://localhost:5500/user/insert
- Method:
POST
- Body:
{ "Name": "User3", "Age": 100}
- Url:
É muito útil para carregar a primeira massa de dado, depois disso, você pode editar os arquivos gerados podendo criar diversos cenários. Para usar os arquivos gerados é preciso mudar a forma de execução para servidor de mock.
Testando:
- Subir o servidor em modo de gravação:
java -jar "D:\wm\wiremock-standalone-2.8.0.jar" --port 5502 --proxy-all "https://www.w3schools.com/" --record-mappings --root-dir "D:\wm\server2" --verbose --match-headers Content-Type
- Abrir a URL no browser:
http://localhost:5502
- Parar o servidor
- Editar qualquer arquivo
- Reiniciar o servidor para utilizar os arquivos salvos
java -jar "D:\wm\wiremock-standalone-2.8.0.jar" --port 5502 --root-dir "D:\wm\server2" --verbose
- Limpar o cache do browser
- Executar novamente:
http://localhost:5502
Dentro do nosso contexto de testes, ele pode ser útil quando precisamos utilizar o serviço original sem precisar alterar a URL no cliente.
Executando:
- Subir o servidor em modo de proxy (ignorando os mapas salvos):
java -jar "D:\wm\wiremock-standalone-2.8.0.jar" --port 5502 --proxy-all "https://www.w3schools.com/" --verbose
- Abrir a URL no browser:
http://localhost:5502
O .JAR
do Wiremock NÃO é executado usando processos. O .JAR
da última versão do Wiremock foi convertido em .NET usando a ferramenta "IKVM". Com isso, foi possível potencializar o uso da ferramenta, tendo acesso direto às principais classes.
- Ele utiliza WindowsForms como paradigma, então é preciso ter o .NET Framework 4.5 instalado.
- Todos os arquivos salvos serão salvos em uma pasta chamada
.app
que fica na raiz de onde está o.exe
.
No momento, não vou adicionar novas features devido a falta de tempo, ficarei a disposição apenas para bugs e pequenas melhorias. Caso queiram contribuir com novas ideias ou correções, basta apenas entrar em contato ou acessar o board do projeto.
- Vejo que o principal ponto de melhoria seria no formulário "FormMaster". Ele está com muitas linhas e pouco componentizado.
- Um outro ponto que considero importante é melhorar a camada de persistência, no momento, as chamadas não estão centralizadas deixando a situação perigosa para futuras melhorias e isso agrava por ser tratar de um banco de dados em forma de um único arquivo.
Links importantes para o projeto:
IKVM:
Ferramenta que converte o Wiremock em Java para .NET.
PocDatabase:
Framework para facilitar a persistência dos dados
https://github.com/juniorgasparotto/PocDatabase
Board:
https://github.com/juniorgasparotto/WiremockUI/projects/1?fullscreen=true
WiremockUI é um projeto de código aberto. Iniciado em 2017, muitas horas foram investidos na criação e evolução deste projeto.
E tudo com apenas um objetivo: Torná-lo uma boa ferramenta de mock para melhorar o dia a dia dos desenvolvedores. Se o WiremockUI foi útil pra você, ou se você deseja ve-lo evoluir cada vez mais, considere fazer uma pequena doação (qualquer valor). Ajude-nos também com sujestões e possíveis problemas.
De qualquer forma, agradeçemos você por ter chego até aqui ;)
PayPal:
BitCoin:
19DmxWBNcaUGjm2PQAuMBD4Y8ZbrGyMLzK
The MIT License (MIT)
Copyright (c) 2017 Glauber Donizeti Gasparotto Junior
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.