Parte da nossa série Performance & Scalability
Leia o guia completo80% dos problemas de desempenho são descobertos pelos usuários finais, não por meio de testes. Os testes de carga invertem essa proporção simulando padrões de tráfego reais em seu aplicativo antes que os usuários encontrem problemas. A diferença entre um site que lida com o tráfego da Black Friday e outro que trava é quase sempre se alguém executou um teste de carga primeiro.
Este guia cobre metodologia de teste de carga, seleção de ferramentas, design de teste e interpretação de resultados para aplicativos da web, plataformas de comércio eletrônico e sistemas ERP.
Principais conclusões
- O teste de carga deve simular um comportamento realista do usuário, e não apenas martelar um único endpoint
- Estabeleça linhas de base de desempenho antes de otimizar --- você não pode melhorar o que não mediu
- Executar testes de carga em ambiente de produção; os resultados da preparação podem não refletir o comportamento da produção
- Automatize testes de carga em CI/CD para detectar regressões de desempenho antes da implantação
Tipos de testes de carga
| Tipo de teste | Finalidade | Duração | Padrão de carga |
|---|---|---|---|
| Teste de fumaça | Verifique a funcionalidade básica sob carga mínima | 1-2 minutos | 1-5 usuários |
| Teste de carga | Validar o desempenho sob o tráfego esperado | 10-30 minutos | Tráfego normal |
| Teste de estresse | Encontre o ponto de ruptura | 15-30 minutos | Aumentando gradualmente |
| Teste de pico | Teste picos repentinos de tráfego | 5-10 minutos | Salto repentino |
| Teste de imersão | Detecte vazamentos e degradação de memória | 2-8 horas | Carga normal sustentada |
Teste de carga com k6
Teste de carga básico
// k6/load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 50 }, // Ramp up to 50 users
{ duration: '5m', target: 50 }, // Stay at 50 users
{ duration: '2m', target: 100 }, // Ramp up to 100 users
{ duration: '5m', target: 100 }, // Stay at 100 users
{ duration: '2m', target: 0 }, // Ramp down
],
thresholds: {
http_req_duration: ['p(95)<500', 'p(99)<1000'],
http_req_failed: ['rate<0.01'],
http_reqs: ['rate>100'],
},
};
export default function () {
// Simulate realistic user behavior
const homeResponse = http.get('https://example.com/');
check(homeResponse, {
'homepage status is 200': (r) => r.status === 200,
'homepage loads in under 1s': (r) => r.timings.duration < 1000,
});
sleep(Math.random() * 3 + 1); // 1-4 seconds think time
const productsResponse = http.get('https://example.com/api/v1/products');
check(productsResponse, {
'products API is 200': (r) => r.status === 200,
'products API under 500ms': (r) => r.timings.duration < 500,
});
sleep(Math.random() * 2 + 1);
}
Teste de jornada do usuário de comércio eletrônico
// k6/ecommerce-journey.js
import http from 'k6/http';
import { check, group, sleep } from 'k6';
export const options = {
scenarios: {
browsing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 200 },
{ duration: '10m', target: 200 },
{ duration: '5m', target: 0 },
],
exec: 'browsingScenario',
},
purchasing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 20 },
{ duration: '10m', target: 20 },
{ duration: '5m', target: 0 },
],
exec: 'purchaseScenario',
},
},
thresholds: {
'http_req_duration{scenario:browsing}': ['p(95)<800'],
'http_req_duration{scenario:purchasing}': ['p(95)<2000'],
http_req_failed: ['rate<0.01'],
},
};
export function browsingScenario() {
group('Browse Products', () => {
http.get('https://store.example.com/');
sleep(2);
http.get('https://store.example.com/products');
sleep(3);
http.get('https://store.example.com/products/sample-product');
sleep(2);
});
}
export function purchaseScenario() {
group('Purchase Flow', () => {
// Browse
http.get('https://store.example.com/products/sample-product');
sleep(1);
// Add to cart
http.post('https://store.example.com/api/cart', JSON.stringify({
productId: 'prod_123',
quantity: 1,
}), { headers: { 'Content-Type': 'application/json' } });
sleep(2);
// Checkout
http.get('https://store.example.com/cart');
sleep(3);
// Place order (simulated)
const orderResponse = http.post('https://store.example.com/api/checkout/validate', JSON.stringify({
email: `test-${__VU}@example.com`,
}), { headers: { 'Content-Type': 'application/json' } });
check(orderResponse, {
'checkout validates': (r) => r.status === 200 || r.status === 201,
});
sleep(1);
});
}
Teste de estresse (encontre o ponto de ruptura)
// k6/stress-test.js
import http from 'k6/http';
import { check } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 100 },
{ duration: '2m', target: 200 },
{ duration: '5m', target: 200 },
{ duration: '2m', target: 500 },
{ duration: '5m', target: 500 },
{ duration: '2m', target: 1000 },
{ duration: '5m', target: 1000 },
{ duration: '5m', target: 0 },
],
};
export default function () {
const res = http.get('https://example.com/api/v1/products');
check(res, {
'status is 200': (r) => r.status === 200,
});
}
Interpretando resultados
Principais métricas
| Métrica | Saudável | Aviso | Crítico |
|---|---|---|---|
| Tempo de resposta P95 | <500ms | 500ms-2s | >2s |
| Tempo de resposta P99 | <1s | 1-5s | >5s |
| Taxa de erro | <0,1% | 0,1-1% | >1% |
| Rendimento | Cumpre a meta | 80% da meta | <80% da meta |
Padrões comuns de gargalos
Gargalo vinculado à CPU: o tempo de resposta aumenta linearmente com a carga. P95 e P99 divergem lentamente.
- Correção: otimize caminhos de código ativo, adicione capacidade de CPU ou dimensione horizontalmente
Gargalo do banco de dados: o tempo de resposta aumenta exponencialmente em um limite de carga específico. Esgotamento do conjunto de conexões.
- Correção: otimização de consulta, pool de conexões, réplicas de leitura (consulte guia de escalonamento de banco de dados)
Gargalo de memória: degradação gradual ao longo do tempo. As pausas do GC causam picos de latência.
- Correção: Aumente a memória, corrija vazamentos de memória, otimize a alocação de objetos
Gargalo de rede: o tempo de resposta aumenta uniformemente em todos os endpoints. Saturação de largura de banda.
- Correção: CDN para ativos estáticos, compactação, redução do tamanho da carga útil
Linhas de base de desempenho
Estabelecendo uma linha de base
Antes de otimizar, documente seu desempenho atual:
# Run baseline test
k6 run --out json=baseline-results.json k6/load-test.js
# Compare after optimization
k6 run --out json=optimized-results.json k6/load-test.js
Orçamento de desempenho
Defina o desempenho aceitável para cada endpoint:
| Ponto final | Alvo P95 | Meta de rendimento |
|---|---|---|
| Página inicial | 500ms | 200 necessidades/s |
| Listagem de produtos | 800ms | 150 necessidades/s |
| Detalhe do produto | 600ms | 200 necessidades/s |
| Adicionar ao carrinho | 300ms | 100 necessidades/s |
| Finalizar compra | 2000ms | 50 necessidades/s |
| Pesquisar | 500ms | 100 necessidades/s |
| Painel de administração | 1500ms | 20 necessidades/s |
Integração CI/CD
Teste automatizado de regressão de desempenho
# .github/workflows/performance.yml
name: Performance Test
on:
push:
branches: [main]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run k6 load test
uses: grafana/[email protected]
with:
filename: k6/load-test.js
flags: --out json=results.json
env:
K6_TARGET_URL: ${{ secrets.STAGING_URL }}
- name: Check thresholds
run: |
if grep -q '"thresholds":{".*":"fail"' results.json; then
echo "Performance thresholds exceeded!"
exit 1
fi
Lista de verificação de teste de carga
Antes do teste
- [] O ambiente corresponde à produção (tipos de instância, tamanho do banco de dados)
- [] Os dados de teste são representativos (contagem realista de produtos, contagem de usuários)
- [] O monitoramento está ativo (rastreie as métricas do servidor durante o teste)
- [] As partes interessadas são notificadas (testes de carga podem disparar alertas)
- [] CDN e cache são configurados como em produção
Durante o teste
- [] Monitorar CPU do servidor, memória, E/S de disco
- [] Monitore conexões de banco de dados e latência de consulta
- [] Observe os aumentos na taxa de erro
- [] Verifique o esgotamento de recursos (descritores de arquivos, conexões)
- [] Observe o nível de carga onde o desempenho diminui
Após o teste
- [] Documentar resultados de linha de base
- [] Identificar gargalos e seus limites de carga
- [] Criar tickets para melhorias de desempenho
- [] Comparar com o orçamento de desempenho
- [] Agendar teste de acompanhamento após otimizações
Perguntas frequentes
Devemos carregar a produção ou teste de teste?
Ambos, se possível. Preparação para testes regulares e integração CI/CD. Produção para validação periódica (durante horários de baixo tráfego), porque a preparação geralmente difere no tamanho do banco de dados, na capacidade do cache, na configuração do CDN e na topologia da rede. Se você puder testar apenas um ambiente, teste a preparação, mas torne-a o mais parecida com a produção possível.
Com que frequência devemos executar testes de carga?
Testes de fumaça em cada implantação (automatizados em CI/CD). Testes de carga completa semanalmente ou antes dos principais lançamentos. Testes de estresse trimestralmente ou antes de eventos conhecidos de alto tráfego (vendas, lançamentos). Faça testes trimestrais para detectar vazamentos de memória e degradação de longo prazo.
Como testamos a carga de um sistema ERP?
O teste de carga do ERP requer a simulação de usuários simultâneos executando diferentes tarefas: geração de faturas, criação de pedidos de compra, execução de relatórios, importação de dados. Concentre-se nas operações mais pesadas (geração de relatórios, importação de dados) e nas operações mais simultâneas (entrada de pedidos em horários de pico). ECOSIRE fornece testes de desempenho Odoo como parte de nossos serviços de suporte.
Qual é o tempo de reflexão realista entre as solicitações?
Para navegação em comércio eletrônico: 2 a 5 segundos. Para preenchimento de formulário: 10-30 segundos. Para finalização da compra: 15-60 segundos. Para uso administrativo/ERP: 5 a 15 segundos. Sempre adicione tempo de reflexão aleatório aos seus testes de carga – intervalos constantes criam padrões de carga sincronizados irrealistas.
O que vem a seguir
O teste de carga revela gargalos que orientam seus esforços de otimização. Acompanhe com escalonamento de banco de dados para gargalos de banco de dados, otimização de CDN para entrega de ativos estáticos e escalonamento automático para capacidade elástica.
Entre em contato com a ECOSIRE para testes de desempenho e otimização ou explore nosso guia DevOps para obter a estratégia de infraestrutura completa.
Publicado pela ECOSIRE – ajudando empresas a criar aplicativos que funcionam sob pressão.
Escrito por
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Expanda o seu negócio com ECOSIRE
Soluções empresariais em ERP, comércio eletrônico, IA, análise e automação.
Artigos Relacionados
Quanto custa a hospedagem em nuvem em 2026? Detalhamento do preço real (AWS, Hetzner, DigitalOcean, Odoo.sh)
Custos reais de hospedagem em nuvem em 2026 para uma equipe que paga as contas: hobby de US$ 5 a US$ 25/mês, SMB de US$ 50 a US$ 400/mês, taxas ocultas de saída e backup, matemática de instâncias reservadas.
Requisitos de hospedagem Odoo em 2026: dimensionamento de servidor por contagem de usuários (com configurações reais)
Requisitos de hospedagem Odoo por contagem de usuários: vCPU, RAM, armazenamento e configurações de trabalho para 5 a 250+ usuários, além de valores de ajuste do PostgreSQL de implantações reais.
Otimização de velocidade do Shopify: uma lista de verificação técnica que realmente movimenta os principais sinais vitais da web (2026)
Uma lista de verificação de velocidade do Shopify testada em campo para 2026 – o que realmente melhora LCP, INP e CLS em lojas reais, o que desperdiça tempo e como auditar aplicativos e temas.
Mais de Performance & Scalability
Otimização de velocidade do Shopify: uma lista de verificação técnica que realmente movimenta os principais sinais vitais da web (2026)
Uma lista de verificação de velocidade do Shopify testada em campo para 2026 – o que realmente melhora LCP, INP e CLS em lojas reais, o que desperdiça tempo e como auditar aplicativos e temas.
Lista de verificação de auditoria técnica de SEO 2026: 47 verificações que executamos em cada site do cliente
A lista de verificação técnica de auditoria de SEO de 47 pontos que executamos em todos os sites de clientes em 2026 – rastreabilidade, indexação, canônicos, hreflang, Core Web Vitals e logs.
Odoo 19 HR: Matriz de Competências, Planos de Carreira, Ciclos de Desempenho
Atualização de RH Odoo 19: matriz de habilidades nativas, planejamento de carreira, ciclos de avaliação de desempenho, grade de 9 caixas, planejamento de sucessão, integração HRIS.
Benchmarks de desempenho do Odoo 19: números de ajuste do PostgreSQL 17
Benchmarks de desempenho do Odoo 19 no mundo real: velocidade do cliente web, taxa de transferência de ORM, configurações de ajuste PG17, pool de conexões, contagens de trabalhadores, limites de escala.
Otimização de custos do OpenClaw e eficiência de token em escala
Otimização de custos de token OpenClaw: cache de prompt, roteamento de modelo, cache de resposta, APIs em lote e proteções de custo por locatário para agentes de produção.
Atualização incremental do Power BI para tabelas com mais de 10 milhões de linhas
Manual de atualização incremental do Power BI para tabelas com mais de 10 milhões de linhas: design de partição, RangeStart/RangeEnd, políticas de atualização, dobramento de consultas e híbridos DirectQuery.