Testes de Performance não são tão simples quanto usar o JMeter

Júlio de Lima
Revista eQAlizando (antiga Revista TSPI)
5 min readApr 21, 2020

Muitos acreditam que testes de performance fundamentam-se apenas na criação e execução de scripts de teste automatizado em ferramentas de simulação de usuários virtuais, como o JMeter, quando, na verdade, isso equivale a algo por volta de 10% de todo o esforço dedicado a atividade de testes de performance. Ao analisar a distribuição de todo o esforço nessa atividade, vemos que os pontos que demandam mais atenção estão voltados a atividades relacionados ao que acontece antes e depois da execução do que se é automatizado. Nesse post, descrevo dicas de o que se deve fazer antes ou depois da execução de um teste de performance.

Antes de executar testes de performance

Compreender como os usuários consomem seu sistema

A compreensão de como a aplicação se comporta se dá através da análise da utilização dela por seus usuários. Em casos como esses, relatórios podem ser extraídos de ferramentas como, por exemplo, o Google Analytics, onde o comportamento dos usuários podem ser identificados com base na utilização da aplicação.

Apresentação do Google Analytics dos principais fluxos dos usuários em um website

Compreensão da arquitetura de software

A composição da arquitetura influencia diretamente em testes de performance. É através dela que conseguimos entender, por exemplo, como uma requisição enviada pelo usuário é trafegada pela aplicação através de todos os pontos que compõe sua estrutura. Ela também ajuda a definir o que, onde e quanto teremos de carga sendo atribuída a partes do sistema. Por fim, nos ajuda a definir como nossos testes serão construídos e exercitados.

Monitoramento

De nada adianta conseguir exercitar a aplicação se não for possível medir a forma com que ela é utilizada. Nesse contexto, para que seja possível medir, é necessário que se defina o que e como. Por exemplo, ao planejar um teste de performance, geralmente utiliza-se ferramentas conhecidas como Profilers softwares capazes de monitorar a forma com que a arquitetura está sendo consumida, um bom exemplo seriam seus componentes, como o Banco de Dados, Servidor de Aplicação, Servidor Web e itens de hardware como memória, processamento e I/O. Ao monitorar, conseguimos ter claro como eles se comportaram durante a execução dos testes de performance.

Depois de executar de testes de performance

Resultados obtidos pelos usuários virtuais

As ferramentas de teste de performance simulam a execução de cenários de teste por usuários virtuais simultâneos. Cada usuário, ao executar o cenário, envia requisições à aplicação e registra informações da resposta como tempo de resposta, tempo de conexão, tempo de latência, entre outros. Essas informações precisam ser analisadas minuciosamente. Diferentes de testes funcionais comuns, testes de performance não demonstram claramente o que são falhas ou sucessos, uma vez que a definição de sucesso leva em consideração análises estatisticas, medidas de tendência ou mesmo percentuais de aceitabilidade. Os gráficos costumam não ser auto-explicativos, por isso, quem os lê precisa ter destreza para conseguir enxergar além dos números.

Um dos relatórios gerados pelo Apache JMeter após uma execução de um teste de performance

Avaliar logs do monitoramento da arquitetura

Os resultados obtidos através da leitura dos resultados dos testes de performance trazem informações relevantes, mas ao mesmo tempo superficiais relacionadas ao comportamento da aplicação e sua arquitetura. Superficiais porque demonstram apenas uma das camadas de análise contida em toda a composição do teste, que é a perspectiva do usuário, ou seja, sua sensação de tempo de espera de o que se requere.

Há uma falha de performance nessa aplicação, pois vejo que o login leva mais que 6 segundos para acontecer.

Para conseguir ir além, é necessário também entender onde está o gargalo e para isso, preciso analisar como a aplicação e sua infraestrutura se comportaram durante os testes. Por exemplo, o login poderia chamar uma API terceira para buscar seu estado, um banco de dados relacional que não estava bem estruturado e escrever os logs em um sistema de arquivos mal dimensionado.

Qual deles foi responsável pelo atraso de 6 segundos?

Em dúvida quanto a pergunta? Uma coisa é certa, a resposta não está dentre os contadores de tempo de resposta, mas sim, nos monitores de cada um dos pontos que você adicionou a sua arquitetura enquanto falávamos de o que vem antes da execução dos testes de performance.

Um exemplo do New Relic, utilizado para monitorar a arquitetura de um sistema

Interpretação e parecer técnico

Outra característica muito particular dos testes de performance é a forma com que os resultados da execução dos testes são apresentados. Comparando-se com testes funcionais, nos quais temos resultados determinísticos, com resultado binário de passou ou não passou. Em testes de performance temos resultados que tem sucesso e que podem ter mais do que um resultado de tempo de resposta, isso porque há variação dos resultados dependendo da forma com que a aplicação ou infraestrutura estão sendo consumidas no momento da execução. Logo, o resultado dos testes também é apresentado de forma distinta, por exemplo, através de análises estatístias e correlações entre variáveis. Em um outro post, comentei sobre um idicador muito utilizado, o Percentil (leia aqui), que é muito útil para explicar a usuários não técnicos, resultados técnicos.

Podemos entender agora a algumas das atividades que existem antes e depois da execução dos testes de performace, ao avaliar o percentual de esforço que elas tomam, poderia dizer que perfazem um total de 50 a 60% de todo o esforço relacionado a execução de um projeto de testes de performance. Isso porque ainda há outras atividades bastante importantes a serem realizadas como o Planejamento dos Testes, da Massa de Dados, da subida das versões de uma aplicação, da definição dos critérios de aceitação, do fechamento da execução e versionamento dos testes, dentre outros.

Esse post nos mostra que para conseguir atingir resultados relevantes ao executar testes de performance é necessário pensar em mais que apenas a ferramenta a ser utilizada para gravar, refatorar e executar os testes que simulam usuários virtuais e nos revela algumas das atividades que se fazem necessárias antes e depois da execução dessa prática.

E você, já executou testes de performance, quais foram seus principais desafios e conquistas?

Sabia que eu envio mensagens gratuitas todos dias para meus seguidores no Telegram? Fiquem atualizados e aprendam mais sobre testes e qualidade de software inscrevendo-se no Canal do Júlio no Telegram:

Links de referência mencionados nesse post:

--

--

Júlio de Lima
Revista eQAlizando (antiga Revista TSPI)

Principal QA Engineer @ Capco — MSc. Electrical and Computational Engineering with a focus on AI