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:

Versão do java instalada

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’:

Configurações avançadas do sistema

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:

Adicionando JAVA_HOME

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.

Plugin servidor para Scala

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’.

Criação do projeto

Estrutura do projeto

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:

build.sbt

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:

project/plugins.sbt

Na estrutura do projeto, cria-se mais uma sub-pasta para desenvolvimento dos teste, ficando dessa maneira:

Estrutura para criação de testes

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:

Criação do teste
  • 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á:

Resultado do teste executado

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.

Tempos de respostas das execuções distribuídas entre intervalos padronizados.
Exibe o número de solicitações que obtiveram sucesso e as que não obtiveram.
Estatísticas padrões como valores mínimos, máximos, média, desvio padrão e percentuais globais e por solicitação.
Usuários ativos durante a simulação (total e por cenário)
Distribuição dos tempos de resposta
Percentual do tempo de resposta ao longo do tempo, apenas para solicitações bem sucedidas
Número de solicitações enviadas por segundo ao longo do tempo
Número de respostas por segundo ao longo do tempo

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.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alex Alves

Alex Alves

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

More from Medium

Spring OpenAPI Integration

ELK Sort and an issue with paginated query

git version at runtime and packaging

Improved Helidon support in IntelliJ IDEA