Otávio Machado
Jan 30, 2017 · 3 min read

Você está em um projeto onde tem que montar uma grande quantidade de dados de teste?

Testar suas aplicações se tornou difícil porque elas dependem de um grande número de dependências externas?

Suas estruturas de dados são tão complexas que criar amostras desses dados está fora de questão, seja porque é muito difícil fazê-lo, ou porque estas amostras não representam os dados reais com veracidade suficiente?

Testes de performance são coisas além da realidade no sistema no qual você está trabalhando?

Se você respondeu sim para pelo menos uma das questões acima, eu e o Henrique Souza temos uma possível solução para os seus problemas!

Sabe como geralmente criamos mocks, stubs ou spies para testes unitários e de integração, quando não queremos realmente testar o funcionamento daquelas partes específicas da aplicação?

Existem ferramentas que podem fazer o mesmo para dependências externas. Na nossa realidade, queríamos testar a performance do nosso sistema sem considerar o tempo que levava para essas dependências processarem nossas requisições. Queríamos que o teste representasse um fluxo real do sistema, com dados reais — de forma que não cometeríamos o erro de testar a performance com um exemplo extremamente simples, ou tão complexo que nunca aconteceria de verdade.

Por essas razões, começamos a dar uma olhada no Mountebank, uma ferramenta de código aberto que faz todo o processo, desde ajudar a buscar dados de resposta de dependências externas, armazenar estes dados até subir uma aplicação que replica as URLs destas dependências, retornando as respostas armazenadas.

Nós criamos o seguinte passo-a-passo para demonstrar um exemplo simples deste processo, principalmente porque descobrimos que toda vez que tínhamos que explicá-lo para novas pessoas desenvolvedoras, tínhamos que reaprender tudo do zero — e não há muitos exemplos simples e completos na página oficial da ferramenta.

  1. Primeiro, baixe e instale o Mountebank. Você também pode instalá-lo usando:
npm install -g mountebank

2. Inicie o Mountebank. (./mb na pasta do mountebank também funciona)

3. Neste exemplo, nós estamos subindo uma dependência externa localmente. Se você tem essa dependência funcionando em outro lugar, você pode pular este passo.

4. Crie um impostor, como o seguinte:

curl -i -X POST -H 'Content-Type: application/json' http://127.0.0.1:2525/imposters --data '{
"port": 6569,
"protocol": "http",
"name": "proxyOnce",
"stubs": [
{
"responses": [
{
"proxy": {
"to": "http://localhost:8080",
"mode": "proxyOnce",
"predicateGenerators": [
{
"matches": {
"method": true,
"path": true,
"query": true,
"body": true
}
}
]
}
}
]
}
]
}'

Você pode modificar o exemplo no que for necessário, mas garanta que a porta do mountebank (por padrão, 2525) e a porta que irá fazer o redirecionamento (neste caso, 6569) está correta.

As outras opções são para redirecionar apenas a primeira requisição (proxyOnce), usar http, definir o endereço da dependência (http://localhost:8080) e dizer que as requisições, quando forem armazenadas, devem somente responder quando o método da requisição(method), caminho (path), busca(query) e corpo da requisição (body) forem iguais aos da requisição original. Para mais informações, o site do Mountebank tem uma documentação mais detalhada.

5. Faça as requisições que você quer clonar na porta 6569, e a ferramenta irá redirecionar a primeira requisição para a porta 8080.

6. Agora que você tem suas requisições clonadas, se você estiver com a dependência externa rodando localmente, você pode pará-la e verificar que o Mountebank ainda está retornando dados para as requisições que você clonou.

7. Para poder utilizar as requisições clonadas, tudo o que você deve fazer é avisar o mountebank para armazená-las em um arquivo. Isso é feito enquanto o mountebank ainda estiver rodando.

mb save --savefile impostorsPopulated.json

8. Agora você pode replicar este estado sempre que quiser, reiniciando o mountebank com o arquivo que você salvou.

mb --configfile impostorsPopulated.json

Com esta abordagem, fomos capazes de rodar testes de performance para o nosso back-end e, com algumas mudanças, para o nosso front-end também, e esperamos que você possa se beneficiar também!

Este artigo te ajudou? Esquecemos de comentar alguma coisa?

Desenvolvimento ágil | ThoughtWorks

Opiniões, informações e dicas sobre de desenvolvimento ágil de software www.thoughtworks.com

Otávio Machado

Written by

Eternal learner, Software Developer, Team Enabler and occasional Pokémon Master. I play with words and with code — and I want to make the world a better place.

Desenvolvimento ágil | ThoughtWorks

Opiniões, informações e dicas sobre de desenvolvimento ágil de software www.thoughtworks.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade