Junior
Fale-me sobre testes de carga.
sobes.tech IA
Resposta da IA
Os testes de carga são um tipo de teste que visa determinar o desempenho, a estabilidade e a escalabilidade de uma aplicação (sistema) sob diferentes cargas.
Tarefas de testes de carga:
- Determinar a carga limite que o sistema suporta.
- Identificar os pontos de estrangulamento.
- Avaliar o tempo de resposta do sistema sob carga.
- Verificar a estabilidade do sistema a longo prazo sob carga.
- Verificar a escalabilidade do sistema.
Tipos de testes de carga:
- Teste de carga (Load Testing): Verificar o comportamento do sistema sob um nível esperado (normal) de carga.
- Teste de stress (Stress Testing): Verificar o sistema sob uma carga que excede a normal, até ocorrerem falhas. O objetivo é determinar o limite de resistência.
- Teste de resistência / imersão (Endurance/Soak Testing): Verificar a estabilidade do sistema com uma carga média ou alta durante um período prolongado, identificando fugas de memória e degradação do desempenho ao longo do tempo.
- Teste de pico de carga (Spike Testing): Verificar o comportamento do sistema perante um aumento súbito e simultâneo de carga.
- Teste de escalabilidade (Scalability Testing): Avaliar a capacidade do sistema de lidar com um volume crescente de carga através de escalonamento horizontal ou vertical de recursos.
- Teste de volume (Volume Testing): Verificar o comportamento do sistema ao aumentar o volume de dados em bases de dados ou outros armazenamentos.
Etapas do teste de carga:
- Definição de objetivos: Estabelecer métricas de desempenho claras (tempo de resposta, capacidade de transferência, erros) e critérios de sucesso.
- Planeamento e design de cenários: Analisar cenários de utilizador, definir o perfil de carga (número de utilizadores virtuais, intensidade de pedidos).
- Desenvolvimento de scripts de teste: Criar scripts para simular ações de utilizadores usando ferramentas de teste de carga.
- Preparação do ambiente de teste: Configurar um ambiente de teste que simule o ambiente de trabalho.
- Execução de testes: Executar testes com diferentes cargas.
- Monitorização e recolha de dados: Recolher métricas de desempenho do sistema, servidores, bases de dados.
- Análise de resultados e relatório: Comparar os resultados com as métricas alvo, identificar problemas, preparar relatório.
Ferramentas para testes de carga:
- JMeter
- LoadRunner
- Gatling
- k6
- Locust
Exemplo de um script simples de JMeter (Pedido HTTP):
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Teste de carga de exemplo">
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Grupo de Threads">
<intProp name="ThreadGroup.num_threads">100</intProp>
<intProp name="ThreadGroup.ramp_time">10</intProp>
<longProp name="ThreadGroup.duration">60</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Exemplo de Pedido HTTP">
<stringProp name="HTTPSampler.domain">example.com</stringProp>
<stringProp name="HTTPSampler.path">/</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">false</boolProp>
<boolProp name="HTTPSampler.embedded_url_report">true</boolProp>
<boolProp name="HTTPSampler.connect_timeout"></boolProp>
<boolProp name="HTTPSampler.response_timeout"></boolProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.comment"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.image_parser">true</stringProp>
<stringProp name="HTTPSampler.concurrentDwn">Both</stringProp>
<stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
<stringProp name="HTTPSampler.implementation_status">OK</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
<listProp name="HTTPSampler.HTTP_HEADERS"></listProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</TestPlan>
</hashTree>
</jmeterTestPlan>
Métricas coletadas durante testes de carga:
- Tempo de resposta
- Capacidade de transferência
- Número de erros por segundo
- Número de requisições por segundo
- Utilização da CPU
- Uso de memória
- Atividade do disco rígido
- Atividade de rede
- Métricas de banco de dados
Testes de carga ajudam a prevenir falhas do sistema em produção sob alta carga e a garantir um nível aceitável de qualidade para os usuários finais.