Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 80 – API JavaScript, Node.js e Express – Performance Testing – Artillery, k6

Imagem destacada da aula de API

Introdução (3 min)

Imagine uma ponte. Antes de abri-la ao público, engenheiros realizam testes de carga para garantir que ela suporte o tráfego esperado. Testes de performance em APIs são similares: assegurando que sua aplicação aguente a demanda, evitando colapsos e garantindo uma experiência fluida para os usuários. Em APIs modernas, com alta demanda e expectativas de baixa latência, testes de performance são imprescindíveis para o sucesso.

Nesta aula, vamos construir testes de performance robustos usando as ferramentas Artillery e k6, focando em cenários práticos e aplicáveis em produção com Node.js/Express.js, considerando as particularidades de um ambiente como o HostGator Plano M.

Conceito Fundamental (7 min)

Teste de performance avalia a estabilidade, escalabilidade e responsividade de uma API sob diferentes níveis de carga. Utilizamos métricas como latência, requisições por segundo (RPS) e tempo de resposta para mensurar a performance. Em produção, esses testes são essenciais para identificar gargalos e otimizar a infraestrutura.

Casos de uso comuns incluem simular picos de acesso durante promoções, validar a capacidade do sistema em lidar com o crescimento da base de usuários e garantir a qualidade da experiência mesmo em condições adversas. Essas ferramentas se integram facilmente com outras tecnologias, como sistemas de CI/CD, permitindo automatizar os testes.

Vantagens: Identificação precoce de problemas de performance, otimização de recursos, garantia da qualidade da experiência do usuário.

Desvantagens: Curva de aprendizado inicial, necessidade de planejamento adequado dos testes, possível custo de ferramentas premium.

Implementação Prática (10 min)

Vamos criar um teste de carga simples para uma rota /hello em um servidor Express.js.

// server.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/hello', (req, res) => { res.send('Hello, World!'); });

app.listen(port, () => { console.log(Servidor rodando em http://localhost:${port}); });

// artillery.yml
config:
  target: "http://localhost:3000"
  phases:
    - duration: 10
      arrivalRate: 10
scenarios:
  - name: "Hello endpoint"
    flow:
      - get:
          url: "/hello"


Instalação do Artillery

📚 Informações da Aula

Curso: API Completo - Node.js & Express

Tempo estimado: 25 minutos

Pré-requisitos: JavaScript básico

npm install -g artillery

Executando o teste

artillery run artillery.yml

// k6.js
import http from 'k6/http';
import { sleep } from 'k6';

export default function () { http.get('http://localhost:3000/hello'); sleep(1); }


Instalação do k6

k6 run k6.js

Os arquivos artillery.yml e k6.js definem os cenários de teste, especificando a URL alvo, duração do teste e a taxa de requisições. A configuração para HostGator Plano M envolve garantir que a porta 3000 esteja aberta e que o servidor Express.js esteja configurado corretamente. O error handling é gerenciado pelas próprias bibliotecas. A documentação inline e os comentários explicam cada passo.

Alternativamente, você pode utilizar diferentes métodos HTTP (POST, PUT, DELETE) e configurar cabeçalhos customizados nos seus testes.

Exercício Hands-On (5 min)

Modifique o script k6.js para simular 50 usuários virtuais acessando a rota /hello durante 30 segundos. Utilize a opção --vus e --duration do k6.

k6 run --vus 50 --duration 30s k6.js

Solução: Observe as métricas geradas pelo k6, como a latência média e o número de requisições por segundo. Caso ocorram erros, verifique a configuração do seu servidor e a conexão com a internet. Próximos passos incluem explorar cenários mais complexos, como testes de stress e testes de soak, e integrar os testes de performance ao seu pipeline de CI/CD. Considere também a utilização de um banco de dados para cenários mais realistas.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas