Teste de estresse - K6
Um teste de stresse é um teste de software que avalia a capacidade de um sistema ou aplicativo de lidar com condições extremas de carga. O objetivo de um teste de estresse é determinar o limite de capacidade de um sistema e identificar possíveis problemas de desempenho sob carga pesada. O K6 é uma ferramenta de teste de carga de código aberto construída para fazer testes de desempenho escaláveis, automatizados e de baixo custo. Usando o K6, você pode testar a capacidade de resposta de seus back-ends e APIs sob carga pesada.
Instalação do K6 com snap
O K6 pode ser instalado com o snap, para instalar o K6 execute o seguinte comando:
sudo snap install k6
Para mais informações sobre a instalação do K6, acesse a documentação oficial.
Exemplo
O exemplo a seguir é um teste de carga simples que simula 10 usuários visitando:
// Exemplo do script do k6
import http from 'k6/http';
import { check, sleep } from 'k6';
export default function() {
let res = http.get('https://www.example.com/');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}
Este script faz uma solicitação HTTP GET para o site “example.com”, verifica se a resposta tem um status de 200 usando a função check()
, e define um intervalo de espera de 1 segundo entre as solicitações usando a função sleep()
. Você pode executar este script com o k6 usando o comando k6 run script.js
no terminal.
Executando o teste de carga
Para executar o teste de carga, execute o seguinte comando:
k6 run --vus 10 --duration 30s script.js
O comando acima executa o script script.js
com 10 usuários virtuais (VUs) por 30 segundos. Para mais informações sobre a execução do K6, acesse a documentação oficial.
Resultados do teste de carga
O K6 gera um relatório de teste de carga em HTML, para visualizar o relatório gerado, execute o seguinte comando:
k6 run --out html=report.html script.js
O comando acima gera um relatório HTML chamado report.html
com os resultados do teste de carga. Para mais informações sobre os relatórios do K6, acesse a documentação oficial.
Exemplo com três etapas de carga:
O exemplo a seguir é um teste de carga que simula 10 usuários visitando o site “example.com” em três etapas de carga:
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
stages: [
{ duration: '1m', target: 50 }, // ramp up to 50 users
{ duration: '2m', target: 50 }, // stay at 50 users
{ duration: '1m', target: 0 }, // ramp down to 0 users
],
thresholds: {
// 95% of requests must complete below 500ms
http_req_duration: ['p(95)<500'],
// 99% of static asset requests must complete below 200ms
'http_req_duration{staticAsset:yes}': ['p(99)<200'],
// 99% of dynamic requests must complete below 500ms
'http_req_duration{staticAsset:no}': ['p(99)<500'],
// at least 100 requests per second
http_reqs: ['rate>100'],
},
};
export default function() {
let res = http.get('https://www.example.com/');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(Math.random() * 3); // random sleep between 0-3 seconds
res = http.get('https://www.example.com/assets/styles.css');
check(res, {
'status is 200': (r) => r.status === 200,
'content type is CSS': (r) => r.headers['Content-Type'] === 'text/css',
});
sleep(Math.random() * 2); // random sleep between 0-2 seconds
}
Este script simula uma carga de usuários em um site, com três etapas distintas: ramp-up, stay at carga constante e ramp-down. O número de usuários virtuais começa em 0 e aumenta gradualmente até 50 durante a primeira etapa. O teste mantém 50 usuários virtuais durante a segunda etapa e, em seguida, diminui gradualmente até 0 na última etapa.
As configurações do thresholds incluem limites de tempo para a duração das solicitações HTTP, bem como uma taxa mínima de solicitações por segundo. O teste define três limiares de duração da solicitação HTTP, cada um com um tempo máximo permitido de conclusão. Ele também verifica se as respostas HTTP têm o status correto e se o tipo de conteúdo é o esperado.
O script também inclui a função sleep()
, que adiciona um tempo de espera aleatório entre as solicitações para simular o comportamento humano mais natural.
Este exemplo é apenas uma demonstração básica do que é possível com o k6. Existem muitas outras funções e configurações que você pode usar para personalizar seus testes de carga. O k6 tem uma documentação boa, então sinta-se convidado para explorar mais e criar seus próprios testes de carga personalizados.
Referências bibliográficas
K6 - Load Testing Tool. Disponível em: https://k6.io/. Acesso em: 07 mai. 2023.
SOMMERVILLE, Ian. Engenharia de software, 10ª ed. Editora Pearson 768, cap. 8 ISBN 9788543024974.
MACHADO, Rodrigo Prestes. Desenvolvimento de software, v.3 programação de sistemas web orientada a objetos em Java. Porto Alegre Bookman 2016 (Tekne). ISBN 9788582603710.
CC BY 4.0 DEED