🚀 Capítulo 13: Testes de Carga e Estresse (Tema: Godzilla)
NOTE
Este capítulo utiliza a temática de Godzilla para explicar os Testes de Carga e Estresse. A ponte aguenta o tráfego normal, mas e se o Godzilla pisar nela? Descubra o limite do seu sistema!
1. 🎯 Objetivo da Aula
Compreender a diferença entre Testes de Performance, Carga e Estresse, aprendendo como simular milhares de acessos simultâneos para descobrir o limite do sistema.
2. 🏢 O Cenário Prático (Seu Desafio)
Você é o engenheiro chefe da cidade de Tóquio.
- A Carga Normal: A ponte foi feita para suportar 1.000 carros ao mesmo tempo. Você testa isso colocando 1.000 carros lá. Isso é um Teste de Carga.
- O Estresse: O Godzilla aparece e pisa na ponte. O peso dele equivale a 50.000 carros. A ponte vai cair? Onde ela vai quebrar primeiro? Isso é um Teste de Estresse.
No software, o seu site pode funcionar perfeitamente para 1 usuário. Mas e na Black Friday, quando 100.000 pessoas tentarem comprar ao mesmo tempo? O sistema vai cair? O banco de dados vai travar? Seu desafio é simular o ataque do Godzilla no seu código!
3. 🧠 Fundamentos: A Teoria Traduzida
Estes são os chamados Testes Não-Funcionais (não testam o que o sistema faz, mas como ele faz).
📈 Os Três Tipos Principais:
-
Teste de Carga (Load Test):
- Objetivo: Verificar se o sistema funciona bem sob a carga esperada (Ex: 500 usuários simultâneos).
- Foco: Tempo de resposta e uso de memória.
-
Teste de Estresse (Stress Test):
- Objetivo: Jogar uma carga muito maior do que o sistema suporta para ver ele quebrar.
- Foco: Descobrir o ponto de ruptura e ver se o sistema se recupera sozinho quando a carga diminui.
-
Teste de Pico (Spike Test):
- Objetivo: Simular um aumento repentino de usuários (Ex: Um influenciador famoso postou o link do seu site agora!).
4. 📖 Exemplo Guiado: O Teste de Estresse (JS/K6)
Para fazer esses testes, usamos ferramentas que fingem ser milhares de usuários. Uma das mais famosas é o K6.
// Exemplo de script de teste com K6
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
vus: 1000, // 1000 Usuários Virtuais ao mesmo tempo!
duration: '30s', // Durante 30 segundos
};
export default function () {
// O robô tenta acessar a página
http.get('https://meusite.com/api/produtos');
sleep(1); // Espera 1 segundo e tenta de novo
}5. 🛠️ Prática Obrigatória 1: Carga ou Estresse?
Diga qual tipo de teste você aplicaria em cada situação:
- Você quer garantir que o sistema de matrículas da escola aguente os 500 alunos acessando no primeiro dia de aula.
- Você quer saber quantos acessos simultâneos são necessários para tirar o site do ar.
6. 🛠️ Prática Obrigatória 2: O Ponto de Ruptura
Imagine que durante um teste de estresse, o sistema começou a dar erro 500 (Erro Interno). Você olhou os gráficos e viu que o Banco de Dados estava usando 100% da CPU, enquanto o servidor web estava usando só 10%.
- Quem foi o gargalo (o ponto fraco) do sistema nesse ataque do Godzilla?
- O que você sugeriria para resolver isso?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 13 Qualidade) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_11_qualidade_e_testes_de_software/
├── capitulos/
│ ├── capitulo_13_carga.md
│ └── codigos/
│ └── cap13/
│ └── estresse_test.js9. 💡 Checkpoint de Lógica
Testes de carga e estresse custam caro se forem feitos na nuvem (AWS, Azure), pois geram muito tráfego. Por isso, geralmente são feitos em ambientes locais ou de homologação antes do lançamento.
10. 🔥 Desafio de Fixação
Pesquise sobre ferramentas de teste de carga famosas como JMeter ou K6.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Teste de Carga (Carga esperada e conhecida).
- Teste de Estresse (Forçar até quebrar). Gabarito da Prática 2:
- O Banco de Dados foi o gargalo.
- Sugestões: Aumentar o servidor do banco, criar índices nas tabelas ou usar cache (como Redis) para não consultar o banco toda hora.