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

Bachelor in Computer Science, MBA in Software Architecture and .NET Developer.

Bachelor in Computer Science, MBA in Software Architecture and .NET Developer.