Use Cases

API-Testautomatisierung mit Claude Code: Ein praktischer QA-Leitfaden

API-Testautomatisierung mit Claude Code. Ein praktischer QA-Leitfaden. Mit praktischen Codebeispielen.

API-Testautomatisierung mit Claude Code in der Praxis

Umfassende Tests sind unerlässlich, um die Qualität von APIs zu gewährleisten. Mit Claude Code können Sie vom Testcase-Design über die Mock-Generierung bis zur CI-Integration alles auf einmal automatisieren.

Testcase-Design

CRUD-Tests für REST APIs

> Erstelle CRUD-Tests für die User-API mit Vitest + supertest.
> Decke Erfolgsfälle, Fehlerfälle und Grenzwerttests ab.
// 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('kann eine Benutzerliste abrufen', 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('Paginierung funktioniert korrekt', 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('kann einen neuen Benutzer erstellen', async () => {
      const newUser = {
        name: 'Testbenutzer',
        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('gibt 400 bei ungültiger E-Mail-Adresse zurück', async () => {
      const res = await request(app)
        .post('/api/users')
        .send({ name: 'Test', email: 'ungültig', password: 'Pass123!' })
        .expect(400);

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

    it('gibt 409 bei doppelter E-Mail-Adresse zurück', 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);
    });
  });
});

Mock- und Stub-Generierung

Tests mit externen API-Abhängigkeiten

> Erstelle einen Mock für die Stripe-Zahlungs-API.
> Verwende 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: 'eur',
      status: 'succeeded',
    });
  }),

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

Contract-Tests

Contract-Tests zur Überprüfung der Konsistenz zwischen API-Spezifikation und Implementierung können ebenfalls mit Claude Code generiert werden. Es können Tests erstellt werden, die OpenAPI-Schemata und Antworten automatisch vergleichen.

Performance-Tests

> Erstelle ein Lasttestskript für die API mit k6.
> Mit einem Szenario stufenweiser Lasterhöhung.
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'],
  },
};

Zusammenfassung

Mit Claude Code können Sie vom API-Testdesign über die Implementierung bis zur CI-Integration alles auf einmal automatisieren. Siehe auch den Leitfaden für Teststrategien und CI/CD-Pipeline aufbauen.

Weitere Details zu API-Tests finden Sie in der offiziellen Vitest-Dokumentation.

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