A performance de uma aplicação é tão importante quanto sua funcionalidade. Mesmo a melhor das aplicações pode falhar se não conseguir atender às expectativas de tempo de resposta ou escalabilidade. É aqui que entram os testes de performance, uma etapa essencial no ciclo de desenvolvimento para garantir que sua aplicação consiga lidar com diferentes níveis de carga e usuários simultâneos.
Integrar testes de performance aos pipelines de CI/CD (Integração e Entrega Contínua) permite identificar problemas cedo, antes que eles cheguem aos usuários finais. Neste artigo exploramos como usar o JMeter e o K6, duas ferramentas populares para testes de performance, em pipelines automatizados.
Testes de performance são processos que avaliam como um sistema se comporta sob diferentes condições de carga, como o número de usuários simultâneos ou o volume de transações. Eles ajudam a identificar gargalos, validar a escalabilidade e garantir a confiabilidade de uma aplicação.
Os principais tipos de testes de performance incluem:
Integrar testes de performance aos pipelines de CI/CD traz benefícios significativos:
O JMeter é uma das ferramentas mais populares para testes de performance. Ele suporta uma ampla variedade de protocolos, incluindo HTTP, HTTPS, FTP e até mesmo serviços de mensagens.
O JMeter pode ser facilmente integrado ao pipeline usando a CLI (Command Line Interface) ou ferramentas como o Maven. Um exemplo de comando para executar um teste seria:
jmeter -n -t teste.jmx -l resultados.jtl -e -o relatório/
Esse comando executa um teste no modo não interativo, gera resultados em um arquivo .jtl e cria um relatório HTML. No pipeline, você pode configurar uma etapa que executa esse comando após o build ou os testes unitários.
performance_tests:
stage: test
image: openjdk:11
script:
- apt-get update && apt-get install -y jmeter
- jmeter -n -t teste.jmx -l resultados.jtl -e -o relatorio/
artifacts:
paths:
- relatorio/
O K6 é uma ferramenta leve e focada em desenvolvedores para realizar testes de carga e performance. Ele se destaca por sua integração com pipelines e pela facilidade de escrita de scripts em JavaScript.
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
stages: [
{ duration: '1m', target: 10 }, // 10 usuários em 1 minuto
{ duration: '2m', target: 50 }, // Aumenta para 50 usuários
{ duration: '1m', target: 0 }, // Reduz para 0 usuários
],
};
export default function () {
let res = http.get('https://minhaaplicacao.com');
check(res, { 'status é 200': (r) => r.status === 200 });
sleep(1);
}
A execução de testes K6 é simples e pode ser integrada diretamente a um pipeline. Um exemplo de configuração para GitHub Actions:
name: Performance Tests
on: [push]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Install K6
run: |
sudo apt-get update
sudo apt-get install -y k6
- name: Run K6 Test
run: k6 run script.js
Essa configuração executa os testes toda vez que há um push no repositório, garantindo que alterações no código não degradem o desempenho.
Enquanto o JMeter é uma ferramenta mais robusta, com suporte a diversos protocolos e um ambiente gráfico rico, o K6 é focado em simplicidade, integração com pipelines e suporte moderno. A escolha depende das necessidades do projeto:
A Mentoria DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps.
Testes de performance são uma etapa essencial no desenvolvimento de software. Ferramentas como JMeter e K6 permitem simular condições reais de uso, identificar gargalos e garantir que sua aplicação seja confiável e escalável.
Integrar esses testes aos pipelines de CI/CD traz benefícios como feedback contínuo, detecção precoce de problemas e maior confiança na qualidade do produto final. Escolha a ferramenta que melhor atende às suas necessidades, configure seus scripts e veja como o desempenho da sua aplicação pode ser levado a um novo nível.