🚀 Testes de Carga com K6 em Aplicações .NET Modernas
Danilo O. Pinheiro, dopme.io

Danilo O. Pinheiro, dopme.io @daniloopinheiro

About: Inicie em tecnologia por volta de 2017. Neste percurso, com experiencia em desenvolvimento web em .NET e outras tecnologias. Com algumas certificações, e fundador da DevsFree.

Location:
Brasil
Joined:
Jul 22, 2020

🚀 Testes de Carga com K6 em Aplicações .NET Modernas

Publish Date: Jul 29
0 0

QR Code em Horário Nobre

📖 Introdução

Com o crescimento exponencial de aplicações web e APIs em arquiteturas modernas (.NET 6/7/8), a observabilidade e a capacidade de suportar alto tráfego tornam-se prioridades.

Neste artigo, vamos mostrar como testar e validar esse tipo de carga extrema usando o K6, um poderoso e moderno framework de teste de performance open source, amplamente usado com APIs REST em aplicações .NET.


🧰 Tecnologias Utilizadas

Tecnologia Descrição
K6 Ferramenta de teste de carga e performance moderna
.NET 6+ Framework moderno para desenvolvimento backend
Docker Containerização do K6 e da aplicação
Azure / AWS Para simular testes em produção real (opcional)
QRCode API Ponto de entrada de tráfego em massa (GET/POST)

🎯 Objetivo

  • Testar endpoints críticos da aplicação .NET (QR Code, login, checkout, etc.)
  • Simular milhares de acessos simultâneos com K6
  • Avaliar latência, throughput e taxa de erro
  • Provar escalabilidade horizontal/autoscaling

⚙️ Setup do Projeto .NET

dotnet new webapi -n QrCodeApi
cd QrCodeApi
Enter fullscreen mode Exit fullscreen mode

Crie um endpoint que representa o acesso ao QR Code:

[ApiController]
[Route("api/[controller]")]
public class QrCodeController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult Get(string id)
    {
        // Simula acesso ao QR Code
        return Ok(new { message = "QR Code accessed", code = id });
    }
}
Enter fullscreen mode Exit fullscreen mode

Rode a aplicação:

dotnet run
Enter fullscreen mode Exit fullscreen mode

🧪 Escrevendo o Script de Carga (K6)

Crie um arquivo load-test.js:

import http from 'k6/http';
import { check, sleep } from 'k6';

export let options = {
    stages: [
        { duration: '10s', target: 100 },  // rampa rápida
        { duration: '30s', target: 1000 }, // simula campanha em horário nobre
        { duration: '1m', target: 0 },     // finaliza
    ],
    thresholds: {
        http_req_duration: ['p(95)<500'], // 95% das requisições < 500ms
        http_req_failed: ['rate<0.01'],   // menos de 1% de falha
    },
};

export default function () {
    let res = http.get('http://localhost:5000/api/qrcode/abc123');
    check(res, {
        'status é 200': (r) => r.status === 200,
        'tempo < 500ms': (r) => r.timings.duration < 500,
    });
    sleep(1);
}
Enter fullscreen mode Exit fullscreen mode

🐳 Executando com Docker

docker run --rm -i grafana/k6 run - <load-test.js
Enter fullscreen mode Exit fullscreen mode

Ou com K6 instalado:

k6 run load-test.js
Enter fullscreen mode Exit fullscreen mode

📊 Análise de Resultados

Exemplo de output:

✓ status é 200
✓ tempo < 500ms

checks................: 100.00% ✓ 15000 ✗ 0
http_req_duration.....: avg=320ms  min=50ms  med=270ms  p(95)=480ms
http_req_failed.......: 0.01%   ✓ 1     ✗ 14999
Enter fullscreen mode Exit fullscreen mode

Aplicação aguentou 1000 requisições simultâneas com 99% de sucesso!


📈 Observabilidade Integrada

Integre com Prometheus + Grafana ou Datadog para analisar em tempo real:

docker-compose up -d prometheus grafana
Enter fullscreen mode Exit fullscreen mode

Ou envie métricas do K6 com:

k6 run --out datadog load-test.js
Enter fullscreen mode Exit fullscreen mode

🧠 Estratégias para Aguentar o Pico de Tráfego

  • Use CDN para arquivos estáticos
  • Escale horizontalmente com Kubernetes (HPA)
  • Use caching distribuído (ex: Redis)
  • Gere QR Codes de forma assíncrona
  • Aplique circuit breakers / retries

✅ Conclusão

Realizar testes de carga realistas com K6 ajuda sua aplicação .NET a estar preparada para eventos de alto impacto como campanhas com QR Code ao vivo, Black Friday, ou lançamento de produto.

Não espere falhar em produção. Teste agora. Escale antes.


🔗 Recursos


🤝 Conecte-se Comigo

Fique à vontade para conversar sobre arquitetura, migração e modernização de aplicações .NET:

Comments 0 total

    Add comment