Testes de Performance com Artillery e DataDog

Samanta Cicilia
assert(QA)
Published in
4 min readJun 8, 2020

Fala pessoal, esse fim de semana criei um repositório de exemplo utilizando o Artillery e resolver postar aqui um pouco mais detalhadamente sobre esse projeto e sua integração com o DataDog.

Ferramentas Utilizadas

DataDog: serviço de monitoramento de aplicativos, no escopo desse post utlizaremos apenas a parte de métricas.

Artillery: solução para testes de performance feita em javascript e de fácil utilização, você pode escrever os testes usando o formato yaml ou json.

Algumas definições primeiro:

Antes de entramos no projeto, vale a pena esclarecer as diferenças entre alguns tipos de teste de performance.

  • Teste de Carga— verificar a habilidade da aplicação sobre um determinado volume de requisições. A ideia é conseguir identificar os gargalos.
  • Teste de Stress — testa a aplicação em cenários extremos de carga para ver como ela se comporta, aqui conseguimos identificar em qual ponto a aplicação quebra, ou seja, qual o limite da aplicação.
  • Teste de Resistência —nesse tipo de teste conseguimos testar o ponto de degradação do sistema, entender como ele se comporta dado uma carga por um longo período de tempo.
  • Teste de Escalabilidade — aqui verificamos as habilidades de escala de uma apliação conforme aumenta a carga. Esse teste te ajudará a ter a configuração adequada na sua aplicação para suportar altas cargas utilizando o scale-up automático.

Um pouco sobre planejamento:

Apesar do foco desse post ser mostrar a integração do Artillery com DataDog, é importante lembrar a importância de se planejar os testes de performance, se você apenas criar e executar uma série de scripts sem ter a orientação de qual é o objetivo e quais métricas serão acompanhadas, você não conseguirá extrair os benefícios desse tipo de teste. Por isso é importante primeiro planejar e depois executar.

Algumas dicas de informações que são importantes antes de se executar um teste de performance:

  • Objetivo: qual o seu objetivo com esse teste
  • Escopo: o que está dentro do escopo de teste (por exemplo, se sua aplicação consome um serviço terceiro, esse serviço faz parte do escopo do teste?)
  • Arquitetura da Aplicação: servidores, banco de dados, firewall, load balance, etc. Esse ponto ajuda muito na execução dos testes e no mapeamento dos bugs: você precisa saber quais elementos estão sob teste e as configurações dos mesmos.
  • Ambiente: configuração do ambiente de testes
  • Cenários de Teste: descrição de quais cenários serão testados (por exemplo: criar uma transação de cartão de crédito)
  • Ciclos de Execução: quantos usuários você vai utilizar na sua execução baseline, como será o aumento de usuários versus tempo de execução dos testes
  • Métricas: CPU, memória, tempo de resposta, quantidade de erros 4XX, 5XX, etc

Finalmente Artillery & DataDog:

No repositório seguinte você encontra um exemplo do Artillery:

Para o teste estou usando o endpoint https://google-search3.p.rapidapi.com/api/v1/search da API do Google, utilizando 10 Virtual Users em 60 segundos de teste.

Estrutura do Projeto:

Para clonar o projeto:

git clone git@github.com:samycici/artillery-sample.git

Você vai encontrar a seguinte estrutura:

artillery-sample
├── package.json
├── README.md
├── spec_search.yaml
├── test_baseline_config.yaml
└── utils
└── helpers.js

Onde:

  • package.json: você encontra as dependências necessárias para esse projeto;
  • README.md: está descrita toda a documentação de como executar o projeto;
  • spec_search.yaml: o caso de teste que será executado;
  • test_baseline_config.yaml: as configurações para o teste de performance como tempo de teste, quantidade de usuários, target, etc;
  • utils/helpers.js: um helper para gerar uma string que será utilizada no teste;

Executando:

Antes de executar esse projeto você precisa criar duas variáveis de ambiente com as keys que você precisará pra execução:

  • a DD_API_KEY para mandar os resultados do teste para o DataDog;
  • a RAPID_API_KEY que é sua key do google para autenticar na API.

DD_API_KEY:

Para criar sua API Key do DataDog, basta ir no menu Integrations > API > API Keys e criar uma nova API Key.

Feito isso basta executar no seu terminal:

export DD_API_KEY=<data-dog-api-key>

RAPID_API_KEY:

Para criar sua API Key no Rapid basta acessar essa url e fazer o Sign up utilizando sua conta do Google e se inscrever para o plano free.

Depois disso basta executar:

export RAPID_API_KEY=<google-api-key>

Instalando as dependências e executando os testes:

Para instalar as dependências necessárias basta executar:

npm install

E para executar os testes:

npm run test

Depois que os testes terminarem você consegue criar sua dashboard no DataDog utilizando as métricas geradas pelo teste indo em Dashboards > Novo Dashboard > New Timeboard > Add Graph > Timeseries e selecionar as métricas do Artillery.

Criando a dashboard

Depois disso você terá uma dashboard como essa:

Dashboard com os dados de teste

Se a sua aplicação já utiliza o DataDog para monitorar as aplicações você pode adicionar nessa mesma dashboard os gráficos de CPU, memória, log de erros e todas as outras métricas que o DataDog disponibiliza sobre a sua aplicação.

Conclusão:

Essa integração do Artillery + DataDog ajuda a visualizar as métricas do seu teste de performance em um único lugar e encontrar os possíveis gargalos monitorando os recursos da sua aplicação.

Referências:

Thanks pro Ramses Sacol que me apresentou essa integração ano passado :)

--

--