Use Cases

Otomasi API Test dengan Claude Code: Panduan Praktis QA

Otomasi API Test menggunakan Claude Code. Panduan Praktis QA. Dilengkapi contoh kode praktis.

Mempraktikkan Otomasi API Test dengan Claude Code

Testing yang komprehensif sangat penting untuk menjamin kualitas API. Dengan Claude Code, mulai dari desain test case hingga generate mock dan integrasi CI bisa diotomatisasi sekaligus.

Desain Test Case

Test CRUD REST API

> Buat test CRUD untuk User API dengan Vitest + supertest.
> Cakup normal case, error case, dan boundary value test.
// 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('bisa mengambil daftar user', 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('pagination bekerja dengan benar', 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('bisa membuat user baru', async () => {
      const newUser = {
        name: 'Test User',
        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('mengembalikan 400 untuk alamat email tidak valid', async () => {
      const res = await request(app)
        .post('/api/users')
        .send({ name: 'Test', email: 'invalid', password: 'Pass123!' })
        .expect(400);

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

    it('mengembalikan 409 untuk alamat email duplikat', 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);
    });
  });
});

Generate Mock dan Stub

Test Dependensi External API

> Buat mock untuk Stripe payment API.
> Gunakan 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',
    });
  }),
];

Contract Test

Contract test yang memverifikasi konsistensi antara spesifikasi API dan implementasi juga bisa di-generate dengan Claude Code. Test yang membandingkan schema OpenAPI dan respons secara otomatis bisa dibangun.

Performance Test

> Buat script load test API menggunakan k6.
> Dengan skenario peningkatan beban bertahap.
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

Dengan Claude Code, mulai dari desain API test hingga implementasi dan integrasi CI bisa diotomatisasi sekaligus. Lihat juga Panduan Strategi Testing dan Pembangunan CI/CD Pipeline.

Untuk detail API testing, lihat Dokumentasi Resmi Vitest.

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