Use Cases

Automatizacion de pruebas de API con Claude Code: guia practica de QA

Automatizacion de pruebas de API con Claude Code. Guia practica de QA. Incluye ejemplos de codigo practicos.

Practicar la automatizacion de pruebas de API con Claude Code

Las pruebas exhaustivas son esenciales para garantizar la calidad de una API. Con Claude Code, puedes automatizar de una vez desde el diseno de casos de prueba hasta la generacion de mocks y la integracion con CI.

Diseno de casos de prueba

Pruebas CRUD de REST API

> Crea pruebas CRUD para la API de usuarios con Vitest + supertest.
> Cubre pruebas de casos normales, casos de error y valores limite.
// tests/api/users.test.ts
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import request from 'supertest';
import { app } from '../../src/app';
import { resetDatabase, seedUsers } from '../helpers/db';

describe('Users API', () => {
  beforeEach(async () => {
    await resetDatabase();
    await seedUsers();
  });

  describe('GET /api/users', () => {
    it('puede obtener la lista de usuarios', async () => {
      const res = await request(app)
        .get('/api/users')
        .expect(200);

      expect(res.body.data).toBeInstanceOf(Array);
      expect(res.body.data.length).toBeGreaterThan(0);
      expect(res.body.data[0]).toHaveProperty('id');
      expect(res.body.data[0]).toHaveProperty('name');
      expect(res.body.data[0]).not.toHaveProperty('password');
    });

    it('la paginacion funciona correctamente', async () => {
      const res = await request(app)
        .get('/api/users?page=1&limit=5')
        .expect(200);

      expect(res.body.data.length).toBeLessThanOrEqual(5);
      expect(res.body.meta).toHaveProperty('totalPages');
      expect(res.body.meta).toHaveProperty('currentPage', 1);
    });
  });

  describe('POST /api/users', () => {
    it('puede crear un nuevo usuario', async () => {
      const newUser = {
        name: 'Usuario de prueba',
        email: '[email protected]',
        password: 'SecurePass123!',
      };

      const res = await request(app)
        .post('/api/users')
        .send(newUser)
        .expect(201);

      expect(res.body.data.name).toBe(newUser.name);
      expect(res.body.data.email).toBe(newUser.email);
    });

    it('devuelve 400 con correo electronico invalido', async () => {
      const res = await request(app)
        .post('/api/users')
        .send({ name: 'Test', email: 'invalid', password: 'Pass123!' })
        .expect(400);

      expect(res.body.errors).toBeDefined();
    });

    it('devuelve 409 con correo electronico duplicado', async () => {
      await request(app)
        .post('/api/users')
        .send({ name: 'User1', email: '[email protected]', password: 'Pass123!' });

      await request(app)
        .post('/api/users')
        .send({ name: 'User2', email: '[email protected]', password: 'Pass456!' })
        .expect(409);
    });
  });
});

Generacion de mocks y stubs

Pruebas de dependencias con API externas

> Crea mocks de la API de pagos de Stripe.
> Usa MSW.
// tests/mocks/handlers.ts
import { http, HttpResponse } from 'msw';

export const handlers = [
  http.post('https://api.stripe.com/v1/charges', () => {
    return HttpResponse.json({
      id: 'ch_test_123',
      amount: 1000,
      currency: 'jpy',
      status: 'succeeded',
    });
  }),

  http.post('https://api.stripe.com/v1/refunds', () => {
    return HttpResponse.json({
      id: 're_test_456',
      amount: 1000,
      status: 'succeeded',
    });
  }),
];

Pruebas de contrato

Las pruebas de contrato que verifican la consistencia entre la especificacion de la API y la implementacion tambien se pueden generar con Claude Code. Puedes construir pruebas que comparen automaticamente los schemas OpenAPI con las respuestas.

Pruebas de rendimiento

> Crea un script de pruebas de carga de API usando k6.
> Con un escenario de incremento gradual de carga.
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '1m', target: 50 },
    { duration: '3m', target: 50 },
    { duration: '1m', target: 100 },
    { duration: '3m', target: 100 },
    { duration: '1m', target: 0 },
  ],
  thresholds: {
    http_req_duration: ['p(95)<500'],
    http_req_failed: ['rate<0.01'],
  },
};

Summary

Con Claude Code puedes automatizar de una vez desde el diseno de pruebas de API hasta la implementacion y la integracion con CI. Consulta tambien la guia de estrategia de pruebas y la construccion del pipeline CI/CD.

Para mas detalles sobre pruebas de API, consulta la documentacion oficial de Vitest.

#Claude Code #API testing #automation #testing #quality assurance