Perbedaan Pengujian Unit, Pengujian Integrasi, dan Pengujian Sistem

Ashley Goolam

Ashley Goolam

23 December 2025

Perbedaan Pengujian Unit, Pengujian Integrasi, dan Pengujian Sistem

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Pertanyaan tentang unit test vs integration test vs system test terkadang membingungkan bahkan developer berpengalaman. Tiga level pengujian ini membentuk fondasi kualitas perangkat lunak, namun tim seringkali menyalahgunakannya, menciptakan rangkaian pengujian yang terlalu dangkal atau sangat mahal untuk dipelihara. Memahami di mana setiap level cocok dalam strategi pengujian Anda bukanlah hal yang akademis, tetapi secara langsung berdampak pada seberapa cepat Anda dapat merilis dan seberapa yakin Anda dapat terhadap rilis Anda.

Panduan ini akan mengklarifikasi cakupan, tujuan, dan waktu dari setiap level pengujian, menunjukkan bagaimana mereka bekerja sama dalam piramida pengujian, dan juga menyediakan contoh-contoh praktis yang dapat Anda terapkan segera. Baik Anda mengembangkan microservice, monolit, atau API, penting untuk memahami unit test vs integration test vs system test.

tombol

Apa itu Pengujian Unit (Unit Testing)?

Pengujian unit memvalidasi bagian terkecil yang dapat diuji dari aplikasi Anda—fungsi, metode, atau kelas individual—dalam isolasi penuh. Tujuannya adalah untuk membuktikan bahwa setiap unit berfungsi dengan benar sesuai dengan spesifikasinya.

Cakupan dan Contoh

Pengujian unit memeriksa satu bagian logika tanpa dependensi. Berikut adalah contoh sederhana:

// Function under test
function calculateDiscount(price, discountPercent) {
  if (discountPercent < 0 || discountPercent > 100) {
    throw new Error('Invalid discount percentage');
  }
  return price * (discountPercent / 100);
}

// Unit test
describe('calculateDiscount', () => {
  it('calculates 20% discount correctly', () => {
    expect(calculateDiscount(100, 20)).toBe(20);
  });

  it('throws error for negative discount', () => {
    expect(() => calculateDiscount(100, -5)).toThrow();
  });
});

Perhatikan bahwa pengujian memberikan input dan memverifikasi output secara langsung—tidak melibatkan database, API, atau UI.

Keunggulan dan Kekurangan

Keunggulan:

Kekurangan:

Apa itu Pengujian Integrasi (Integration Testing)?

Pengujian integrasi memverifikasi bahwa beberapa komponen bekerja sama dengan benar. Ini berfokus pada antarmuka antar unit—endpoint API, koneksi database, antrean pesan, dan interaksi layanan.

Cakupan dan Contoh

Berikut adalah pengujian integrasi untuk endpoint pendaftaran pengguna yang menyentuh database:

// Integration test for POST /api/users
describe('User Registration API', () => {
  it('creates user and stores in database', async () => {
    const userData = {
      name: 'Test User',
      email: 'test@example.com',
      password: 'ValidPass123'
    };

    // Act: Call the actual API
    const response = await axios.post('http://localhost:3000/api/users', userData);

    // Assert: Check response AND database
    expect(response.status).toBe(201);
    expect(response.data).toHaveProperty('userId');

    // Verify database state
    const userInDb = await db.users.findByEmail('test@example.com');
    expect(userInDb).toBeTruthy();
    expect(userInDb.name).toBe('Test User');
  });
});

Pengujian ini membuktikan bahwa API, logika bisnis, dan integrasi database bekerja sama.

Keunggulan dan Kekurangan

Keunggulan:

Kekurangan:

Apa itu Pengujian Sistem (System Testing)?

Pengujian sistem memvalidasi sistem yang lengkap dan terintegrasi terhadap persyaratan bisnis. Ini memperlakukan aplikasi sebagai kotak hitam, menguji alur kerja end-to-end dari perspektif pengguna.

Cakupan dan Contoh

Pengujian sistem untuk alur kerja pembelian e-commerce:

// System test: Complete purchase flow
describe('E-commerce Purchase System', () => {
  it('allows user to browse, add to cart, and checkout', async () => {
    // Step 1: User registration
    const user = await api.register('shopper@example.com', 'password');

    // Step 2: Browse products
    const products = await api.searchProducts('laptop');
    expect(products.length).toBeGreaterThan(0);

    // Step 3: Add to cart
    await api.addToCart(user.token, products[0].id, 1);

    // Step 4: Checkout
    const order = await api.checkout(user.token, {
      shippingAddress: '123 Main St',
      paymentMethod: 'visa'
    });

    // Oracle: Verify complete order
    expect(order.status).toBe('confirmed');
    expect(order.total).toBeGreaterThan(0);

    // Verify side effects
    const inventory = await api.getInventory(products[0].id);
    expect(inventory.stock).toBe(initialStock - 1);
  });
});

Ini mencakup banyak API, database, dan layanan eksternal (gateway pembayaran).

Keunggulan dan Kekurangan

Keunggulan:

Kekurangan:

Piramida Pengujian Perangkat Lunak: Hubungan Antara Ketiganya

Piramida pengujian memvisualisasikan bagaimana unit test vs integration test vs system test harus didistribusikan:

        Pengujian Sistem (10%)
            ▲
    Pengujian Integrasi (30%)
            ▲
    Pengujian Unit (60%)

Lapisan Bawah (Pengujian Unit): Volume terbesar, eksekusi tercepat, berjalan terus-menerus
Lapisan Tengah (Pengujian Integrasi): Volume sedang, memvalidasi integrasi penting
Lapisan Atas (Pengujian Sistem): Volume terkecil, menguji alur kerja bisnis inti

Bentuk ini memastikan umpan balik yang cepat sambil mempertahankan kepercayaan diri. Balikkan piramida (banyak pengujian sistem, sedikit pengujian unit) dan rangkaian pengujian Anda akan menjadi lambat, rapuh, dan mahal.

piramida pengujian perangkat lunak

Kapan Melakukan Setiap Pengujian: Integrasi Siklus Hidup

Fase Pengembangan Jenis Pengujian Utama Frekuensi Waktu Eksekusi
Penulisan kode Pengujian unit Pada setiap penyimpanan < 1 detik
Permintaan tarik (Pull request) Unit + Integrasi Pra-commit 1-5 menit
Pra-gabung (Pre-merge) Integrasi + Sistem Terpilih Pada persetujuan PR 5-15 menit
Build malam (Nightly build) Rangkaian lengkap (semua jenis) Harian 30-60 menit
Pra-rilis Pengujian sistem + Pengujian asap (Smoke tests) Sebelum deploy 15-30 menit
Produksi Pengujian asap + Pemantauan Berkelanjutan Waktu nyata

Mendapatkan waktu yang tepat untuk unit test vs integration test vs system test mencegah hambatan sambil memastikan gerbang kualitas bermakna.

Tabel Perbandingan: Memilih Pengujian yang Tepat

Faktor Pengujian Unit Pengujian Integrasi Pengujian Sistem
Kecepatan ⚡⚡⚡ Sangat Cepat ⚡⚡ Sedang ⚡ Lambat
Isolasi Tinggi Sedang Rendah
Kemudahan Debugging Mudah Sedang Sulit
Kepercayaan Diri Rendah Sedang Tinggi
Pemeliharaan Rendah Sedang Tinggi
Kapan Ditulis Sebelum/selama pengkodean Setelah unit berfungsi Setelah integrasi
Siapa yang Menulis Developer Developer + QA QA + Developer

Contoh Praktis: Menguji Endpoint API

Mari kita lihat unit test vs integration test vs system test dalam aksi untuk endpoint POST /api/users:

Pengujian Unit (Menguji Logika Validasi)

// Test only the validation function
describe('validateUser', () => {
  it('rejects invalid email', () => {
    const result = validateUser({ email: 'invalid' });
    expect(result.isValid).toBe(false);
    expect(result.errors).toContain('Invalid email format');
  });
});

Pengujian Integrasi (Menguji API + Database)

// Test API layer with real database
describe('POST /api/users integration', () => {
  it('creates user in database', async () => {
    const response = await request(app)
      .post('/api/users')
      .send({ name: 'Test', email: 'test@example.com' });

    expect(response.status).toBe(201);

    // Oracle: Verify database
    const user = await db.users.findByEmail('test@example.com');
    expect(user.name).toBe('Test');
  });
});

Pengujian Sistem (Menguji Alur Kerja Lengkap)

// Test registration → login → profile update
describe('User management system', () => {
  it('allows complete user lifecycle', async () => {
    // Register
    const reg = await api.post('/api/users', userData);
    expect(reg.status).toBe(201);

    // Login
    const login = await api.post('/api/auth/login', credentials);
    expect(login.data.token).toBeTruthy();

    // Update profile
    const update = await api.put('/api/users/me', updates, {
      headers: { Authorization: `Bearer ${login.data.token}` }
    });
    expect(update.status).toBe(200);

    // Verify final state
    const profile = await api.get('/api/users/me', {
      headers: { Authorization: `Bearer ${login.data.token}` }
    });
    expect(profile.data.name).toBe(updates.name);
  });
});

Bagaimana Apidog Membantu Tim Dev dengan Pengujian API

Memahami unit test vs integration test vs system test sangat penting, tetapi mengimplementasikannya untuk API bisa jadi melelahkan. Apidog mengotomatiskan pekerjaan berat, terutama untuk pengujian integrasi dan sistem.

Pembuatan Oracle Pengujian Otomatis

Untuk pengujian integrasi, Apidog membuat oracle pengujian langsung dari spesifikasi OpenAPI Anda:

# Dari spesifikasi API Anda, Apidog menghasilkan:
Test: POST /api/users
Oracle 1: Status harus 201
Oracle 2: Respons harus sesuai skema Pengguna
Oracle 3: Header Lokasi harus ada
Oracle 4: Waktu respons < 500ms
Oracle 5: Kueri database mengembalikan pengguna yang dibuat

Ini menghilangkan definisi oracle manual dan menjaga pengujian tetap sinkron dengan kontrak API Anda.

Pembuat Pengujian Visual untuk Pengujian Sistem

Pengujian sistem alur kerja yang kompleks menjadi visual di Apidog:

Test: Complete User Onboarding
1. POST /api/users (create)
2. POST /api/auth/verify (email verification)
3. POST /api/auth/login (authenticate)
4. GET /api/dashboard (load data)
5. POST /api/preferences (set preferences)

Assertions at each step + final state validation

Anda membangun ini dengan menyeret dan menjatuhkan panggilan API, dengan Apidog menangani otentikasi, rantai data, dan asersi secara otomatis.

tombol
pengujian di apidog

Integrasi CI/CD untuk Pengujian Berkelanjutan

Apidog menjalankan hierarki unit test vs integration test vs system test Anda di CI/CD:

# GitHub Actions pipeline
- name: Run Unit Tests
  run: npm test:unit

- name: Run Apidog Integration Tests
  run: apidog run --tags "@integration"

- name: Run Apidog System Tests
  run: apidog run --tags "@system"

Ini memastikan setiap jenis pengujian berjalan pada tahap yang sesuai dengan hasil yang diposting langsung ke Slack atau email.

ci/cd di apidog

Visibilitas Cakupan Pengujian

Apidog menunjukkan API mana yang memiliki cakupan pengujian unit, integrasi, dan sistem:

Endpoint Unit Integrasi Sistem Cakupan
POST /users 100%
GET /users/:id 67%
DELETE /users 67%

Visibilitas ini membantu tim mengisi celah pengujian secara strategis.

Pertanyaan yang Sering Diajukan

Q1: Haruskah saya menulis pengujian unit untuk endpoint API?

Jawab: Endpoint API mengorkestrasikan logika—mereka harus memiliki pengujian integrasi. Logika bisnis di dalam endpoint harus diuji unit secara terpisah.

Q2: Berapa banyak pengujian integrasi yang cukup?

Jawab: Cakup semua jalur kritis dan skenario kesalahan. Aturan yang baik: jika bug dalam integrasi akan mencapai produksi, tulis pengujian untuk itu.

Q3: Apakah pengujian sistem sebanding dengan biaya pemeliharaannya?

Jawab: Ya, tetapi hanya untuk alur kerja bisnis inti. Batasi pengujian sistem hingga 10-20% fitur yang menghasilkan 80% nilai bisnis.

Q4: Bisakah Apidog menghasilkan pengujian unit?

Jawab: Tidak. Pengujian unit memerlukan pengetahuan tentang struktur kode internal. Apidog unggul dalam pengujian integrasi dan sistem di mana ia dapat mengamati perilaku API dari luar.

Q5: Jenis pengujian mana yang harus saya prioritaskan untuk proyek baru?

Jawab: Mulailah dengan pengujian unit (fondasi), tambahkan pengujian integrasi saat komponen terhubung, lalu tambahkan pengujian sistem untuk perjalanan pengguna yang kritis. Pendekatan piramida ini mencegah utang teknis.

Kesimpulan

Keputusan unit test vs integration test vs system test bukanlah tentang memilih salah satu di antara yang lain—ini tentang menerapkan masing-masing pada waktu dan proporsi yang tepat. Pengujian unit memberi Anda kecepatan dan presisi untuk pengembangan. Pengujian integrasi menangkap masalah koneksi yang dilewatkan oleh unit. Pengujian sistem memberikan kepercayaan diri bahwa seluruh produk berfungsi untuk pengguna.

Kuasai hierarki ini dan rangkaian pengujian Anda menjadi aset strategis daripada beban pemeliharaan. Mulailah dengan mengaudit distribusi pengujian Anda saat ini. Apakah Anda terbalik dengan terlalu banyak pengujian sistem yang lambat dan rapuh? Geser fokus ke bawah. Apakah Anda kehilangan cakupan integrasi yang kritis? Isi celah-celah itu.

Alat modern seperti Apidog membuat lapisan integrasi dan sistem jauh lebih mudah dikelola dengan mengotomatiskan pembuatan dan eksekusi pengujian. Ini memungkinkan Anda untuk mempertahankan bentuk piramida pengujian tanpa memperlambat kecepatan pengembangan. Kualitas menjadi hasil alami dari proses Anda, bukan fase terpisah yang menunda rilis.

Ingat: tujuannya bukan untuk menguji semuanya—melainkan untuk menguji hal yang tepat pada level yang tepat. Ketika unit test vs integration test vs system test jelas dalam strategi Anda, pengiriman menjadi dapat diprediksi, kepercayaan diri tumbuh, dan tim Anda menghabiskan lebih sedikit waktu memadamkan api dan lebih banyak waktu membangun nilai.

tombol

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.