top of page

Estudo de Caso - Testes de Carga na Consulta de Apólices

  • Foto do escritor: Victória Santana
    Victória Santana
  • 16 de mai.
  • 4 min de leitura

Garantir a performance de sistemas críticos é um desafio constante para empresas que lidam com grandes volumes de dados e operações sensíveis. No caso dessa API, a funcionalidade de consulta de apólices é uma das mais utilizadas — especialmente por corretoras de grande porte, que demandam agilidade e estabilidade em todas as requisições.


Como parceiros tecnológicos e estratégicos do cliente, nos propusemos a criar um plano de teste de carga completo e técnico, para assegurar que a solução pudesse atender a grandes corretoras, mesmo em momentos de pico. Nosso diferencial foi abordar o problema de forma técnica e pragmática, com testes reais e mensuráveis.


O desafio

A consulta de apólices dessa API realiza chamadas ao IGC, um intermediário responsável por buscar dados de apólices com seguradoras integradas. Ou seja: trata-se de uma operação altamente sensível e sujeita a picos de uso, sobretudo em dias de fechamento de propostas ou quando há operações em lote por parte das corretoras.


Até então, não havia sido realizado nenhum teste de carga específico sobre essa funcionalidade. Isso significava atuar com uma margem de incerteza em relação ao comportamento do sistema sob alta demanda — um risco considerável em ambientes produtivos.


A estratégia adotada

Optamos por utilizar o Locust, uma ferramenta de código aberto baseada em Python, ideal para simular múltiplos usuários e monitorar métricas em tempo real. Para nos aproximarmos da realidade de uso, combinamos essa simulação com métricas reais extraídas do New Relic, durante a janela com maior volume de acessos no sistema.


Além disso, utilizamos distribuição Gaussiana para simular variações naturais no tempo de espera entre requisições, aproximando ainda mais os testes de um ambiente realista.

Buscamos responder duas perguntas principais: Como a API se comporta com uma carga compatível com o uso real? A partir de que ponto o sistema começa a apresentar degradação de desempenho?

Criamos scripts que reproduziam o comportamento esperado de usuários reais, incluindo autenticações, chamadas ao endpoint de consulta e variações de tempo entre as ações. Isso nos permitiu observar como o sistema reagia à medida em que aplicávamos o teste ramp-up, aumentando gradualmente o número de requisições simultâneas.

Teste 01 - Cargas Realistas

O primeiro teste replicou uma carga semelhante à registrada no ambiente de produção. Para isso:

  • Número de usuários simulados: 8.

  • Média de requisições por minuto (RPM): 1,066 RPM.

    • Valores registrados:

      • 10/02: 0,6 RPM

      • 11/02: 1,96 RPM

      • 12/02: 1,47 RPM

      • 13/02: 0,7 RPM

      • 14/02: 0,6 RPM

A média foi calculada somando-se os valores diários e dividindo-se pelo número total de dias, resultando em 1,066 rpm. Para simular esse funcionamento numa capacidade superior, executamos o teste com 1.4 RPM:

Equação matemática mostrando que Tm é igual a 60,8 dividido por 1,4 na parte superior e, na parte inferior, Tm é igual a 342.

Com a biblioteca random, de forma simplifica, calculamos a distribuição Gaussiana desse valor:

 #Quanto maior o desvio padrão maior a variação
2 desvio_padrão = 90
3 random.gauss(342, desvio_padrao)

Resultados

Durante a execução (das 08h às 11h), o sistema permaneceu estável. Nenhum aumento relevante no tempo de resposta foi observado, indicando que a API comporta tranquilamente o volume atual e até mesmo um pouco acima.


Um gráfico de linhas exibe os tempos de transação da web ao longo de várias horas, com cores empilhadas para Python, ODBC, Postgres, Redis e Web external, mostrando picos entre 10h40 e 11h10. Barras vermelhas indicam alertas críticos.

Gráfico de linhas mostrando a taxa de transferência da web em rpm das 7h às 16h do dia 20 de fevereiro, com média de 26,1 rpm, com flutuações frequentes e marcadores vermelhos indicando alertas críticos em vários pontos.

Teste 02 - Degradação

Para avaliar o limite do sistema, realizamos um teste de degradação. A carga foi aumentada gradualmente, reduzindo o tempo de espera entre as requisições ao longo do tempo. O número de usuários foi escalonado (45, 50, 60), e o tempo entre requisições diminuiu conforme a média de resposta se mantinha baixa.


O script ajustava o tempo entre requisições dinamicamente, de acordo com o tempo médio de resposta:

python
CopiarEditar
def wait_time(self):
    if avg < 12000:        
        self.request_wait = self.request_wait - 10
    request_wait = max(20, self.request_wait) 
    return random.gauss(request_wait, 20)

Além disso, os testes envolveram diferentes recursos simulados para garantir diversidade nas requisições.

Resultados

À medida que o RPM aumentava, o tempo de resposta também crescia. A partir de 83 RPM, observamos um salto de 3x no tempo médio de resposta, caracterizando o início da degradação do sistema. Desse total, 55 RPM estavam concentrados apenas na API de consulta.


Painel com três gráficos mostrando os tempos de transação, a taxa de transferência e os erros ao longo do tempo. Os picos de tempo de transação e taxa de transferência ocorrem entre 10h50 e 11h30; a taxa de erros permanece praticamente estável

 A origem da lentidão foi atribuída principalmente ao banco de dados do ERP externo, responsável pela execução das queries SQL utilizadas nessa rota.

O que observamos

À medida que a carga aumentava, conseguimos identificar pontos específicos de gargalo, especialmente em dependências externas sem fallback e em limitações de tempo de resposta do banco de dados. Felizmente, não houve colapso do sistema, mas sim uma degradação controlada, o que é um sinal de que a arquitetura está bem estruturada, mas ainda tem espaço para melhorias pontuais.


Outro ponto relevante foi perceber diferenças importantes entre os testes feitos em ambientes de homologação e os realizados em produção. A execução real trouxe dados mais precisos, o que reforça a importância de simulações no ambiente final — desde que feitas com cautela.


Impactos e aprendizados

O principal benefício para o cliente foi a segurança de saber que a funcionalidade de consulta de apólices está preparada para lidar com grandes volumes de uso. Para as corretoras que utilizam o sistema, isso se traduz em estabilidade, fluidez na navegação e mais confiança nas operações do dia a dia.


Internamente, o projeto nos permitiu consolidar boas práticas em testes de carga e performance, além de gerar uma documentação técnica que poderá ser reaproveitada em outros contextos críticos — economizando tempo e padronizando a abordagem.


Conclusão

Esse estudo de carga mostrou, na prática, como uma estratégia bem planejada pode trazer segurança técnica e operacional para sistemas complexos. Com testes realistas, métricas bem monitoradas e foco em cenários reais de uso, foi possível validar o desempenho da API e identificar oportunidades de evolução. Para a Arbeit Studio, mais do que um projeto técnico, foi a chance de reafirmar nosso compromisso com entregas robustas e sustentáveis.

1 comentário

Avaliado com 0 de 5 estrelas.
Ainda sem avaliações

Adicione uma avaliação
Rubens
16 de mai.
Avaliado com 5 de 5 estrelas.

Excelente!!

Curtir

Arbeit Studio

Logotipo da Arbeit Studio em tons de vinho. Inclui a silhueta de uma pessoa segurando um grande martelo acima do texto 'ARBEIT STUDIO' em letras maiúsculas e negrito."
bottom of page