Sobes.tech
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:

  1. Definição de objetivos: Estabelecer métricas de desempenho claras (tempo de resposta, capacidade de transferência, erros) e critérios de sucesso.
  2. Planeamento e design de cenários: Analisar cenários de utilizador, definir o perfil de carga (número de utilizadores virtuais, intensidade de pedidos).
  3. Desenvolvimento de scripts de teste: Criar scripts para simular ações de utilizadores usando ferramentas de teste de carga.
  4. Preparação do ambiente de teste: Configurar um ambiente de teste que simule o ambiente de trabalho.
  5. Execução de testes: Executar testes com diferentes cargas.
  6. Monitorização e recolha de dados: Recolher métricas de desempenho do sistema, servidores, bases de dados.
  7. 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.