DEV Community

Cover image for 🚀 Como Criar Testes de Carga com .NET e Cypress
Danilo O. Pinheiro, dopme.io
Danilo O. Pinheiro, dopme.io

Posted on

🚀 Como Criar Testes de Carga com .NET e Cypress

Embora o Cypress seja conhecido como uma ferramenta de testes de front-end e2e (End-to-End), é possível usá-lo em conjunto com uma API .NET para simular carga e avaliar o comportamento do sistema sob diferentes níveis de requisições.

Se você já trabalha com .NET para back-end e Cypress para automação de testes, unir os dois pode trazer validação integrada de performance, estabilidade e qualidade.


📖 Cenário

Vamos criar um projeto .NET 8 Web API e usar o Cypress para enviar várias requisições simultâneas, coletando métricas como:

  • Tempo médio de resposta
  • Taxa de sucesso
  • Comportamento sob carga

🛠️ Pré-requisitos


🏗️ Criando a API .NET

Vamos começar criando uma API simples:

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

No Program.cs:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/api/produtos", () =>
{
    var produtos = Enumerable.Range(1, 100).Select(i => new
    {
        Id = i,
        Nome = $"Produto {i}",
        Preco = Random.Shared.Next(10, 500)
    });
    return Results.Ok(produtos);
});

app.Run();
Enter fullscreen mode Exit fullscreen mode

Execute:

dotnet run
Enter fullscreen mode Exit fullscreen mode

A API estará disponível em https://localhost:5001/api/produtos.


📦 Configurando o Cypress

  1. Instale o Cypress no projeto:
npm init -y
npm install cypress --save-dev
Enter fullscreen mode Exit fullscreen mode
  1. Abra o Cypress:
npx cypress open
Enter fullscreen mode Exit fullscreen mode

Ele criará a pasta cypress/ no projeto.


🧪 Criando Teste de Carga no Cypress

No Cypress, crie o arquivo:
cypress/e2e/carga.cy.js

describe('Teste de Carga na API .NET', () => {
  const totalRequests = 200; // quantidade de requisições simultâneas
  const endpoint = 'https://localhost:5001/api/produtos';

  it('Executa múltiplas requisições e mede o tempo de resposta', () => {
    const startTime = Date.now();
    let completed = 0;

    for (let i = 0; i < totalRequests; i++) {
      cy.request(endpoint).then((response) => {
        expect(response.status).to.eq(200);
        completed++;
      });
    }

    cy.then(() => {
      const endTime = Date.now();
      const totalTime = (endTime - startTime) / 1000;
      cy.log(`⏱️ Tempo total: ${totalTime}s para ${totalRequests} requisições`);
    });
  });
});
Enter fullscreen mode Exit fullscreen mode

📌 Observações

  • O Cypress não é a ferramenta ideal para testes de carga de alta escala (o k6 ou JMeter são mais adequados para grande volume).
  • Essa abordagem é útil para validações rápidas de performance durante o desenvolvimento.
  • Para rodar sem interface e mais rápido, use:
npx cypress run --headless
Enter fullscreen mode Exit fullscreen mode

📊 Melhorando Métricas

Podemos usar bibliotecas do Node.js para salvar métricas em CSV:

npm install fs
Enter fullscreen mode Exit fullscreen mode

E no teste:

const fs = require('fs');

...

cy.request(endpoint).then((response) => {
  const duration = Date.now() - startTime;
  fs.appendFileSync('resultados.csv', `${i},${duration},${response.status}\n`);
});
Enter fullscreen mode Exit fullscreen mode

Assim, você pode analisar os resultados no Excel ou Power BI.


✅ Conclusão

Integrar .NET e Cypress para testes de carga é uma forma prática de verificar o desempenho de APIs durante o desenvolvimento.
Embora não substitua ferramentas dedicadas de load testing, é excelente para detecção antecipada de problemas de performance.


🤝 Conecte-se Comigo

Se você trabalha com .NET moderno e quer dominar arquitetura, C#, DevOps ou interoperabilidade, vamos conversar:


Disse então ele: Vede não vos enganem, porque virão muitos em meu nome, dizendo: Eu sou o Cristo, e o tempo está próximo. Não vades, portanto, após eles.
Lucas 21:8

Top comments (0)