https://github.com/juniorgasparotto/wiremockui
Wiremock UI - Tool for creating mock servers, proxies servers and proxies servers with the option to save the data traffic from an existing API or Site.
https://github.com/juniorgasparotto/wiremockui
ikvm mock mock-data mock-server mocking proxy proxy-server record recording request-handler request-logging request-tracker response-time server-less server-wiremock stub stub-files stub-server wiremock wiremock-ui
Last synced: 3 months ago
JSON representation
Wiremock UI - Tool for creating mock servers, proxies servers and proxies servers with the option to save the data traffic from an existing API or Site.
- Host: GitHub
- URL: https://github.com/juniorgasparotto/wiremockui
- Owner: juniorgasparotto
- License: mit
- Created: 2017-07-24T00:40:47.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T05:23:53.000Z (over 3 years ago)
- Last Synced: 2025-03-29T10:22:28.458Z (about 1 year ago)
- Topics: ikvm, mock, mock-data, mock-server, mocking, proxy, proxy-server, record, recording, request-handler, request-logging, request-tracker, response-time, server-less, server-wiremock, stub, stub-files, stub-server, wiremock, wiremock-ui
- Language: C#
- Homepage:
- Size: 238 MB
- Stars: 47
- Watchers: 4
- Forks: 18
- Open Issues: 7
-
Metadata Files:
- Readme: readme-pt-br.md
- License: LICENSE
Awesome Lists containing this project
README
[

](https://github.com/juniorgasparotto/WiremockUI)
[

](https://github.com/juniorgasparotto/WiremockUI/blob/master/readme-pt-br.md)
**DOWNLOAD LINK**: https://github.com/juniorgasparotto/WiremockUI/releases/download/1.1.0/WiremockUI.zip
**CHOCOLATEY**: `choco install wiremockui`
# Wiremock UI
É 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
* 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 depurar
* `Text Compare`: É um simples comparador de texto
* `Text editor`: Editor de texto com as opções de formatação para JSON ou XML
* `JSON Viewer`: Visualizador de JSON em forma de árvore.
## Instalação (Manual)
1. Fazer o download do .zip [clicando aqui](https://github.com/juniorgasparotto/WiremockUI/releases/download/1.1.0/WiremockUI.zip)
2. Extrair o .zip em qualquer local
3. 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_
## Instalação (Chocolatey)
```
choco install wiremockui
```
Url: https://chocolatey.org/packages/wiremockui
**Atualização**
```
choco upgrade wiremockui
```
**Desinstalação**
```
choco uninstall wiremockui
```
## Requisitos
* Windows
* .NET Framework 4.5
* chocolatey: `choco install dotnet4.5`
* microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=30653
# Demo
[

](https://www.youtube.com/watch?v=6d7QQqbNKhk)
* [Tutorial](#doc)
* [Criando um servidor de mock](#create-server)
* [Configurações avançadas](#create-server-advanced)
* [Menu de opções](#server-menu)
* [Criando um novo cenário](#new-scenario)
* [Menu de opções](#scenario-menu)
* [Criando um novo mapa](#new-map)
* [Menu de opções do mapa](#map-menu)
* [Arquivo de mapa no editor](#map-editor)
* [Arquivo de mapa no JSON Viewer](#map-jsonview)
* [Menu de opções da resposta](#response-menu)
* [Arquivo de resposta no editor](#response-editor)
* [Edição de texto](#text-editor)
* [Logs/Debugging](#log)
* [Re-executar requests](#reexecute-request)
* [Comparar requests com mapas existentes](#compare-request)
* [Verificar o tempo de um request](#compare-time)
* [Criando um servidor para o modo de gravação](#create-server-recording)
* [Criando um servidor apenas como proxy](#start-as-proxy)
* [Menu](#menu)
* [Wiremock - Overview](#wiremock)
* [Executar como servidor de mock](#wiremock-start-as-mock)
* [Executar como proxy, mas gravando os dados](#wiremock-start-as-record)
* [Executar apenas como proxy](#wiremock-start-as-proxy)
* [Como funciona?](#wiremock-how-work)
* [Como contribuir](#how-to-contribute)
* [Licença](#license)
## Criando um servidor de mock
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 em `Add 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ção `Start 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 pastas `mappings` 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ção
* `Restart`: Reinicia o servidor mantendo o tipo de execução que foi iniciado
* `Stop`: Parar o servidor
* `Open Server folder`: Abre a pasta onde estão todos os cenários
* `Open Targer URL in browser`: Abre a URL original no Browser
* `Open Server URL in browser`: Abre a URL do servidor wiremock no Browser
* `Duplicate`: Duplica todo o servidor, incluindo os cenários e todos os arquivos
* `Edit`: Edita as informações do servidor
* `Remove`: 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ário
* `Duplicate`: Duplica esse cenário e todos seus arquivos
* `Edit`: Edita o cenário
* `Remove`: Remove o cenário
* `Show URL`: Quando ativo, exibe a URL dos mapas na árvore
* `Show 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 mapa
* `Remove`: Remove o mapa
* `Enable`: Quando desativado, esse mapa será ignorado
* `View in Web Request`: Abre o mapa no `WebRequest` permitindo executa-lo.
* `View in explorer`: Abre o gerenciador de arquivos com o arquivo selecionado.


### Arquivo de mapa no JSON Viewer
* 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 janela
* `View as Json`: Visualiza o conteúdo em uma nova janela JSON Viewer
* `Expand 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`

### Menu de opções da resposta
* `View in explorer`: Abre o gerenciador de arquivos com o arquivo selecionado.

### Arquivo de resposta no editor

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ção
* `Redo`: Refaz uma alteração
* `Edit`
* `Word Wrap`: Liga ou desliga a quebra de linha automática
* `Select all`: Seleciona todo o texto
* `Copy`: Copia o texto selecionado
* `Cut`: Recorta o texto selecionado
* `Paste`: Copia o que estiver na área de transferência para o campo de texto
* `Remove`: 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 JSON
* `Format`: Deixa o JSON em uma forma mais legível
* `Escape`: "Escapa" o JSON para ele poder ser usado como valor de outro JSON
* `Unescape`: Volta o JSON para o estado normal quando esta "escapado"
* `Minify`: Remove os espaços desnecessários do JSON
* `Edit 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 XML
* `Languages`: Altera o `Highlight` 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`


## Iniciando o servidor
* 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 tipos `NET.IN` e `NET.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ção `Open 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`


### Comparar requests com mapas existentes
* Ao clicar com o botão direito sobre o tipo `LISTENER`, clique na opção `Compare`.
* 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`


### Verificar o tempo de um request
* Para ter uma precisão maior sobre o tempo da chamada, compare os tempos do tipo `NET.IN` (coluna `RequestTime`) com o tipo `NET.OUT` (Coluna `ResponseTime`) 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.

## Criando um servidor para o modo de gravação
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ção `Start`.

## Criando um servidor apenas como proxy
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ês
* `Quit`: Sai da aplicação
* `Execute`:
* `Add Server`: Adiciona um novo servidor
* `Start All`: Inicia todos os servidores
* `Start and record all`: Inicia todos os servidores em modo de gravação
* `Stop all`: Parar todos os servidores
* `Tools`:
* `Web Request`: Abre a ferramenta `WebRequest` 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/
## Executar como servidor de mock
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:
```json
{
"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:
```json
{
"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.
```json
{
"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`
* Cenário de POST:
* **Url**: `http://localhost:5500/user/insert`
* **Method**: `POST`
* **Body**: `{ "Name": "User3", "Age": 100}`
## Executar como proxy, mas gravando os dados
É 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.
1. Vejo que o principal ponto de melhoria seria no formulário "FormMaster". Ele está com muitas linhas e pouco componentizado.
2. 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.
https://www.ikvm.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
# Doações
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:**
[

](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=BJKBZXZJFVNUL&lc=US&item_name=wiremockui&item_number=wiremockui¤cy_code=BRL&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted)
**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.