DEV Community

Cover image for Testes de Carga com K6
Rafael Avelar Campos
Rafael Avelar Campos

Posted on

Testes de Carga com K6

Introdução

Testes de carga são essenciais para validar o desempenho de aplicações web e garantir que elas possam lidar com o tráfego esperado sem comprometer a experiência do usuário. O K6 é uma ferramenta poderosa, simples de usar e muito popular para realizar esse tipo de teste, permitindo simular milhares de usuários interagindo com sua aplicação de forma simultânea.

Por Que Realizar Testes de Carga?

Antes de mergulharmos na instalação e no uso do K6, é importante entender a importância dos testes de carga:
• Identificação de Gargalos de Desempenho: Encontrar pontos de falha antes que eles afetem seus usuários.
• Validação de Escalabilidade: Verificar se o sistema pode crescer sem comprometer a performance.
• Aperfeiçoamento de Recursos: Identificar quais recursos consomem mais CPU, memória ou tempo de resposta.
• Apoio ao Dimensionamento: Ajudar na escolha do tipo de infraestrutura necessária para sustentar a carga.

Instalação do K6

Para MacOS

Se você está usando MacOS, a maneira mais rápida de instalar o K6 é via Homebrew:

brew install k6
Enter fullscreen mode Exit fullscreen mode

Para Linux

Se você usa Linux (Ubuntu, por exemplo), execute os seguintes comandos:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
Enter fullscreen mode Exit fullscreen mode

Para Windows

Se você utiliza Windows e possui o Chocolatey instalado, execute:

choco install k6
Enter fullscreen mode Exit fullscreen mode

Executando um Teste de Carga Simples

Agora que o K6 está instalado, vamos configurar um teste simples de carga. Crie um arquivo chamado loadTest.js com o seguinte conteúdo:

import http from 'k6/http';
import { sleep } from 'k6';

export let options = {
  stages: [
    { duration: '1m', target: 100 }, // Sobe para 100 usuários em 1 minuto
    { duration: '5m', target: 100 }, // Mantém 100 usuários por 5 minutos
    { duration: '1m', target: 0 },   // Reduz para 0 usuários
  ],
};

export default function () {
  http.get('https://suaapi.com/endpoint');
  sleep(1);
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:
• stages: Define o comportamento de usuários ao longo do tempo. No exemplo, começamos com 0 usuários e aumentamos gradualmente até 100, mantendo esse número por 5 minutos antes de reduzir a 0 novamente.
• http.get: Realiza uma requisição GET ao endpoint da sua API.
• sleep(1): Pausa de 1 segundo entre as requisições, imitando o comportamento de usuários reais.

Para rodar o teste, use o seguinte comando:

k6 run loadTest.js
Enter fullscreen mode Exit fullscreen mode

Analisando os Resultados

O K6 oferece uma saída detalhada no terminal após a execução do teste. Ela inclui informações como:
• Total de requisições realizadas.
• Taxa de sucesso ou falha das requisições.
• Tempo médio de resposta.
• Utilização de recursos (CPU, memória).

Cenários de Teste Avançados

Agora que você está familiarizado com um teste básico de carga, vamos explorar alguns cenários mais avançados:

  1. Teste com Diversas URLs

Você pode testar múltiplos endpoints ao mesmo tempo para verificar como sua aplicação se comporta sob diferentes cargas:

export default function () {
  http.get('https://suaapi.com/endpoint1');
  http.get('https://suaapi.com/endpoint2');
  sleep(1);
}
Enter fullscreen mode Exit fullscreen mode
  1. Teste de Autenticação

Em muitos cenários, você precisa simular usuários autenticados. Para isso, você pode usar o Bearer Token ou cookies:

export default function () {
  let authHeaders = { headers: { Authorization: `Bearer ${TOKEN}` } };
  http.get('https://suaapi.com/endpoint', authHeaders);
  sleep(1);
}
Enter fullscreen mode Exit fullscreen mode
  1. Teste com Load Testing Variável

O K6 permite alterar dinamicamente o número de usuários de acordo com a situação, o que é útil para simulações mais realistas. Um exemplo disso seria um cenário de pico de tráfego.

export let options = {
  stages: [
    { duration: '1m', target: 50 },   // Aumenta para 50 usuários rapidamente
    { duration: '10m', target: 500 }, // Aumenta para 500 usuários por 10 minutos
    { duration: '1m', target: 0 },    // Reduz para 0 rapidamente
  ],
};
Enter fullscreen mode Exit fullscreen mode

Dicas de Boas Práticas
• Simule Cenários Reais: Evite usar números irrealistas de usuários. Um tráfego realista traz resultados mais confiáveis.
• Mantenha o Monitoramento: Testes de carga podem sobrecarregar sua infraestrutura, então, é importante monitorar os servidores enquanto os testes estão sendo executados.
• Automatize os Testes: Execute testes de carga periodicamente para garantir que sua aplicação continue performando bem conforme o crescimento do tráfego.
• Ajuste as Configurações de stages: Use diferentes fases para simular o comportamento real dos usuários.

Conclusão

O K6 é uma ferramenta robusta e de fácil implementação para realizar testes de carga. Ela ajuda a identificar problemas de desempenho antes que eles se tornem um problema real para os usuários. Ao simular tráfego realista e coletar dados precisos, você pode otimizar sua aplicação e garantir que ela seja capaz de lidar com grandes volumes de acessos simultâneos.

Top comments (0)