Maior velocidade e eficácia: automatizando Testes de Performance para otimizar resultados

Matheus K. Ribeiro
Livelo
5 min readFeb 25, 2023

--

Como a Livelo está buscando automatizar o processo de testes de performance.

Contexto

O Teste de Performance é uma prática essencial para avaliar a qualidade e o desempenho de um sistema. Como mencionado no artigo Testes de Performance e quais são os tipos mais utilizados, testes de performance permitem que você identifique problemas e melhorias e obtenha informações sobre como seu sistema se comporta sob diferentes cargas e circunstâncias. Neste artigo, vamos apresentar como automatizamos o processo de testes de performance na Livelo, conseguindo melhorar a velocidade, eficácia e otimizar resultados.

Definição

Teste de regressão de performance é uma iniciativa da Livelo para escalar a quantidade de testes de performance executados, aumentando a cobertura dos microsserviços e reduzindo a necessidade de intervenção humana. Os testes são agendados para execução periódica customizável conforme a necessidade ou desejo e pode ser executado a partir de build do microsserviço.

Objetivo

Os testes de regressão de performance visam identificar reduções de desempenho que podem ocorrer devido alterações nos microsserviços e no ambiente da Livelo.

Quando identificada na regressão, uma análise deve ser feita de modo a aferir o que causou a queda de desempenho e direcionar as medidas necessárias para mitigação do problema, de modo a evitar que a regressão chegue ao ambiente produtivo.

Método

O teste de regressão é semelhante ao teste de carga, executado preferencialmente em ambiente de teste com uma carga que visa atingir o pico de vazão atual do ambiente de produção nos endpoints de determinado microsserviço, porém a carga também pode ser configurada conforme as necessidades do teste.

As chamadas feitas em cada teste devem seguir preferencialmente o fluxo completo do microsserviço, com as chamadas sendo replicadas conforme a distribuição de demanda das chamadas em produção.

Caso haja necessidade de executar um teste em fluxo, as chamadas podem ser adicionadas, mas, para que os alertas de regressão funcionem corretamente da melhor maneira, é importante que os testes tenham um escopo limitado dentro de cada microsserviço. Isso também irá possibilitar melhorias no processo de análise automatizada no futuro que envolvam identificar versionamento do microsserviço em questão.

Funcionamento

Os testes são executados por um pipeline criado especificamente para os testes de regressão.

Os testes são configurados em um repositório, com a configuração das chamadas sendo feitas através do arquivo *.jmx do Jmeter e a configuração de agendamento de execução sendo feita em um arquivo Jenkinsfile.

Detecção de Anomalia

A detecção de anomalia é uma técnica utilizada para identificar comportamentos ou eventos incomuns em um sistema. Sendo utilizada neste contexto, ela visa monitorar o comportamento normal de um sistema e detectar qualquer desvio dessa norma.

Existem várias abordagens para a detecção de anomalia, mas a maioria das técnicas se baseia em aprender o que é considerado comportamento normal para o sistema e, em seguida, detectar qualquer desvio dessa norma.

Para os testes de regressão foi escolhido utilizar o desvio padrão em conjunto com o z_score, onde o desvio padrão é calculado sobre os resultados de APDEX das últimas 30 execuções e o z_score de cada execução. Caso o z_score seja superior à 3 desvios padrão, a execução é classificada como regressiva.

O z-score é uma medida de distância em relação à média em uma distribuição de dados. Ele é calculado como o número de desvios padrão que um valor particular está acima ou abaixo da média da distribuição. O z-score é uma medida útil para avaliar como um valor se compara aos outros valores em uma distribuição e para identificar valores extremos ou anômalos.

1x = resultados de apdex 2z_score= (x - média)/desvio padrão

O APDEX foi escolhido como métrica porque sumariza o resultado do teste de performance executado, considerando o tempo médio de resposta obtido dentro um intervalo aceitável, determinado individualmente em cada teste, com um parâmetro de tempo ideal e outro de tempo máximo tolerável. As chamadas com erros também são consideradas, dessa forma uma visão geral de satisfação do usuário com a aplicação é gerada.

APDEX (Application Performance Index) é uma medida de desempenho de aplicativos que vai de 0 a 1, baseada na satisfação do usuário com a velocidade e disponibilidade de um aplicativo. Ele é calculado com base nas solicitações de aplicativos que são consideradas satisfatórias, toleráveis ou insatisfatórias.

Cálculo do APDEX

Resultado

A detecção de anomalia é feita calculando o z_score da última execução, em 3 vezes o desvio padrão do APDEX das últimas 30 execuções.

Desvio padrão = 0.0370
Média do apdex = 0.797
Apdex da última execução = 0.680
z_score da última execução = -3.168

No exemplo acima, um alerta de regressão seria gerado na última execução, onde o resultado do z_score foi inferior a -3, o que indica que houve uma queda maior que 3 desvios padrão, correspondendo a uma queda de cerca de 14,70% quando comparado com a média.

Acompanhamento

Por uma dashboard criada no Grafana é disponibilizado o detalhamento da última execução, bem como o histórico de execuções passadas.

Além dessas informações, outros dados como comportamento de infraestrutura e de filas também podem ser acessados.

Dashboard de detalhamento da última execução
Dashboard de histórico de resultados

--

--