Testes de performance em APIs
Objetivo
Criar uma aplicação, personalizada e customizável, voltada para testar APIs de maneira simples e prática. Onde ter-se-á, visualmente, um relatório sobre os testes executados.
Do que se trata os testes mencionados?
São testes que simulam transações/requisições de uma grande quantidade e usuários em um determinado tempo.
Por que utilizar Scala?
Scala é uma linguagem orientada a objetos e funcional, baseada fortemente em Java. Com ela você consegue utilizar a ferramenta Gatling, a qual é uma ferramenta para realizar testes de performance.
Utilização do VS Code
Editor de texto criado pela Microsoft que tem um grande potencial. Muitas funcionalidades são adicionadas, modificadas e melhoradas constantemente, além disso, permite adição de diversos plugins, possibilitando programar em diversas linguagens.
Instalando dependências
Primeiramente, baixa-se a IDE a ser utilizada que, no caso, será o VS Code, onde pode ser encontrado no link: https://code.visualstudio.com/
Logo após, deve-se instalar o Java 8 JDK, caso não tenha já instalado, o qual pode ser encontrado neste site: https://www.oracle.com/technetwork/java/javase/downloads/index.html
Após a instalação, abre-se o terminal e verifica-se a versão que instalou, se está realmente correta:
Agora, necessita-se configurar o JAVA_HOME. Para isso, vá em ‘Painel de Controle’, ‘Sistema’ e ‘Configurações avançadas do sistema’. Irá ser aberto uma janela, seleciona-se a opção ‘Variáveis de Ambiente’:
Após abrir a janela contendo as variáveis de ambiente, adiciona-se uma nova, caso não exista, chamada JAVA_HOME, contendo como valor o caminho do JDK instalado anteriormente:
Para executar programas feitos em Scala, precisa-se de um servidor para o mesmo. O próprio VS Code tem um plugin que disponibiliza tal recurso, encontrado no link: https://marketplace.visualstudio.com/items?itemName=dragos.scala-lsp. Basta clicar em ‘Instalar’ que será aberto o plugin no VS Code, onde deverá selecionar, também, a opção ‘Instalar’. Com o plugin instalado, reinicie a IDE.
Tendo como base a necessidade de executar os comandos do Scala em um terminal, tem-se que instalar uma ferramenta que se chama SBT, encontrada em: https://www.scala-sbt.org/download.html?_ga=2.81410135.1173509472.1539609934-542443654.1539609934. Basta baixá-la e executar o instalador.
Criando o projeto
Abre-se o terminal e navega-se até a pasta onde deseja criar o projeto. Feito isso, digita-se o seguinte comando:
— sbt new scala/hello-world.g8
Tal comando irá criar um projeto baseado no tamplete ‘hello-world’ do GitHub. Após executar o comando, o mesmo irá solicitar o nome do projeto, dá-se o nome de ‘teste-automatizado’.
Estrutura do projeto
- project — utilizado para instalar plugins e dependências
- src/main/scala — contém todo o código em scala desenvolvido
- src/main/scala/Main.scala — ponto inicial do projeto
- build.sbt — arquivo de definição e compilação
Customizando projeto
Com a estrutura já criada, altera-se o arquivo build.sbt para o seguinte código:
O qual servirá para adicionar as dependências necessárias para o desenvolvimento.
Além disso, cria-se o arquivo de nome ‘plugins.sbt’ dentro da pasta ‘project’ e insere-se o seguinte código:
Na estrutura do projeto, cria-se mais uma sub-pasta para desenvolvimento dos teste, ficando dessa maneira:
Após realizar todas as alterações. Executa-se o terminal, navega-se até o diretório onde o projeto se encontra e executa o seguinte comando
— sbt
Com isso o terminal reconhecerá todos os comandos referente a ferramenta SBT. Logo em seguida, executa-se o seguinte comando:
— compile
Isso fará com que todas as dependências do projeto sejam baixadas.
Criação do teste
No diretório ‘src/test/scala’ cria-se um arquivo chamado ‘Test.scala’. Nele é que se programa os testes de performance e, com isso, insere-se o seguinte algoritmo:
- No arquivo coloca-se o nome do pacote, o qual é opcional
- Importação das bibliotecas necessárias para execução
- Declaração da classe, onde a mesma deve herdar de Simulation
- httpConf — configuração comum para todas as requisições
(nesta classe, consegue-se cabeçalhos, linguagem, tipo de agente, etc) - scenario(“TESTE”) — definição do cenário
- exec(http(“REQUEST”) — requisição HTTP, onde é informado um nome o qual será apresentado ao executar o teste
- .get(“/”)) — url destinada para o método GET
- setUp( — configuração dos cenários a serem simulados
- scn.inject(atOnceUsers(5)) — injetando no cenário 5 usuários para simulação
- .protocols(httpConf) — anexando configuração HTTP declarada acima
Execução do teste
Vale ressaltar que foi criada uma API simples como teste para a aplicação construída.
Com o código todo escrito, deve-se executar o seguinte comando:
— gatling:test
Com isso, executará o teste correspondente e o resultado final gerado será:
Como pode-se observar, o teste executou 5 requisições e para todas apresentou-se uma resposta com tempo menor que 800ms, sendo assim o teste resultou em sucesso.
Visualização de relatórios
Para visualização do relatório gerado pela ferramenta Gatling, basta acessar o diretório ‘target\gatling\’, no diretório terá diversas sub-pastas referentes aos testes executados, a cada teste executado uma nova pasta é criada contendo informações para gerar o relatório. Sendo assim, basta acessar alguma das pastas e selecionar o arquivo index.html (presente dentro da pasta).
Tipos de relatórios
Os dados exibidos abaixo é referente ao teste criado.
Obs.: Relatórios podem ser gerados a partir do arquivo ‘simulation.log’, mesmo que o cenário tenha sido interrompido.
O código referente a aplicação criada se encontra em: https://github.com/alex250195/modelo.teste
Conclusão
Nota-se uma grande facilidade em criar testes de performance customizados de maneira simples e prática. Onde, com poucas linhas de código, tem-se toda a aplicação de testes construída.
Referências
- https://www.devmedia.com.br/testes-de-desempenho-carga-e-stress/26546
- https://medium.com/socialbase/usando-gatling-load-testing-para-fazer-teste-de-performance-d1c0db6af455
- http://pedrro.github.io/2015/testes-de-performance/
- https://www.devmedia.com.br/conheca-a-linguagem-scala/32850
- https://medium.com/@programadriano/hoje-irei-apresentar-o-vs-code-visual-studio-code-para-quem-ainda-n%C3%A3o-teve-contato-com-ele-6a0d6bd3baec
- https://imasters.com.br/desenvolvimento/o-vs-code-faz-isso-e-eu-nem-sabia
- https://klauslaube.com.br/2018/06/04/eu-me-rendo-vscode.html
- https://docs.scala-lang.org/getting-started-sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.html
- https://www.scala-lang.org/documentation/your-first-lines-of-scala.html
- https://www.scala-sbt.org/1.x/docs/Running.html
- https://gatling.io/docs/2.3/quickstart/
- https://blog.codecentric.de/en/2017/06/gatling-load-testing-part-1-using-gatling/
- https://gatling.io/docs/2.2/general/reports/#indicators