DEV Community

Cover image for Kerangka Kerja Pengujian Otomatisasi API: Komponen dan Cara Memilih
Walse
Walse

Posted on • Originally published at apidog.com

Kerangka Kerja Pengujian Otomatisasi API: Komponen dan Cara Memilih

Tes API yang hanya dijalankan sekali hampir tidak memberi nilai. Nilai sebenarnya muncul saat tes dijalankan berulang: menangkap regresi sebelum pelanggan menemukannya, membuktikan kontrak API tetap valid setelah refactor, dan menjaga deployment tetap aman. Karena itu, Anda membutuhkan kerangka kerja pengujian otomatis API yang membuat eksekusi ulang menjadi murah, stabil, dan mudah dipahami.

Coba Apidog hari ini

Artikel ini membahas apa itu kerangka kerja pengujian otomatis API, lima lapisan yang perlu Anda evaluasi, dan cara praktis memilih antara membangun sendiri atau memakai platform siap pakai. Fokusnya adalah otomatisasi tes API HTTP, bukan pengujian browser atau unit test.

Apa itu kerangka kerja pengujian otomatis API

Kerangka kerja bukan satu pustaka tunggal. Ia adalah kombinasi komponen, konvensi, dan kode penghubung yang membantu tim menulis tes API sekali lalu menjalankannya kapan pun dibutuhkan.

Tanpa kerangka kerja, setiap developer biasanya membuat cara sendiri untuk:

  • mengirim request;
  • menyimpan base URL dan header;
  • membaca token autentikasi;
  • menulis assertion;
  • memuat data pengujian;
  • menghasilkan laporan;
  • menjalankan tes di CI.

Tes seperti itu mungkin berjalan, tetapi sulit dipelihara karena format, struktur, dan logikanya tidak konsisten.

Kerangka kerja yang baik menghilangkan keputusan berulang tersebut. Ia mendefinisikan:

  • lokasi file request dan test case;
  • pola assertion;
  • sumber data pengujian;
  • format laporan;
  • cara menjalankan suite di CI/CD.

Hasilnya, tes baru mengikuti pola yang sudah ada, bukan menciptakan pola baru.

Secara umum, ada dua pendekatan:

  1. Code-first

    Dibangun dengan pustaka dalam bahasa yang sudah digunakan tim, misalnya Python dengan pytest atau JavaScript dengan Jest.

  2. Berbasis platform

    Platform seperti Apidog menyediakan lapisan request, assertion, data, reporting, dan CI melalui antarmuka visual, sehingga Anda lebih banyak mengonfigurasi daripada menulis kode plumbing.

Keduanya bisa menghasilkan tes API otomatis. Perbedaannya ada pada seberapa banyak infrastruktur yang perlu Anda bangun dan pelihara sendiri.

Lima lapisan yang dibutuhkan setiap kerangka kerja

Baik membangun sendiri maupun memakai platform, evaluasi kerangka kerja API testing berdasarkan lima lapisan berikut.

1. Lapisan request

Lapisan request bertanggung jawab mengirim HTTP call dan mengekspos respons. Biasanya mencakup:

  • base URL;
  • path endpoint;
  • header;
  • token autentikasi;
  • query parameter;
  • request body;
  • timeout;
  • retry;
  • connection pooling.

Dalam pendekatan code-first, lapisan ini biasanya berupa wrapper tipis di atas HTTP client.

Contoh sederhana dengan JavaScript:

const BASE_URL = process.env.API_BASE_URL;

async function apiRequest(path, options = {}) {
  const response = await fetch(`${BASE_URL}${path}`, {
    ...options,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.API_TOKEN}`,
      ...options.headers,
    },
  });

  const body = await response.json().catch(() => null);

  return {
    status: response.status,
    headers: response.headers,
    body,
  };
}
Enter fullscreen mode Exit fullscreen mode

Dengan wrapper seperti ini, test case tidak perlu mengulang boilerplate autentikasi dan base URL.

Contoh pemakaian:

test("GET /users mengembalikan daftar user", async () => {
  const res = await apiRequest("/users");

  expect(res.status).toBe(200);
  expect(Array.isArray(res.body.data)).toBe(true);
});
Enter fullscreen mode Exit fullscreen mode

Tujuan lapisan ini adalah membuat test case fokus pada apa yang diuji, bukan detail teknis membangun request.

2. Lapisan assertion

Mengirim request saja tidak membuktikan apa pun. Assertion memastikan respons sesuai ekspektasi.

Hal yang biasanya divalidasi:

  • status code;
  • response time;
  • header;
  • struktur body;
  • nilai field tertentu;
  • schema respons;
  • pesan error;
  • aturan bisnis.

Contoh assertion dasar:

expect(res.status).toBe(201);
expect(res.body.id).toBeDefined();
expect(res.body.email).toBe("user@example.com");
Enter fullscreen mode Exit fullscreen mode

Namun untuk API yang berkembang cepat, assertion field-by-field saja sering tidak cukup. Validasi schema terhadap OpenAPI membantu menangkap perubahan kontrak, seperti field yang hilang, tipe data berubah, atau struktur respons bergeser.

Jika Anda ingin memperdalam strategi assertion, panduan tentang pernyataan API membahas pola assertion yang berguna untuk menangkap bug nyata.

3. Lapisan data pengujian

Tes API membutuhkan input. Jika semua data di-hardcode, suite cepat rapuh dan sulit diperluas.

Lapisan data pengujian menjawab pertanyaan seperti:

  • Dari mana data test berasal?
  • Bagaimana membuat user, order, atau entity lain sebelum test?
  • Bagaimana membersihkannya setelah test selesai?
  • Bagaimana menjalankan test yang sama dengan banyak variasi input?

Sumber data yang umum:

  • fixture;
  • factory;
  • file JSON;
  • file CSV;
  • database;
  • API setup khusus;
  • mock service.

Contoh data JSON:

[
  {
    "email": "valid-user@example.com",
    "password": "StrongPassword123",
    "expectedStatus": 201
  },
  {
    "email": "invalid-email",
    "password": "StrongPassword123",
    "expectedStatus": 400
  }
]
Enter fullscreen mode Exit fullscreen mode

Contoh test berbasis data:

const cases = require("./fixtures/register-users.json");

describe("POST /register", () => {
  test.each(cases)(
    "register dengan email $email mengembalikan $expectedStatus",
    async ({ email, password, expectedStatus }) => {
      const res = await apiRequest("/register", {
        method: "POST",
        body: JSON.stringify({ email, password }),
      });

      expect(res.status).toBe(expectedStatus);
    }
  );
});
Enter fullscreen mode Exit fullscreen mode

Pendekatan pengujian API berbasis data dengan CSV dan JSON membantu memperluas cakupan tanpa menulis fungsi test baru untuk setiap variasi.

Yang paling penting: setiap test harus bisa membuat dan membersihkan datanya sendiri agar tidak bergantung pada urutan eksekusi.

4. Lapisan reporting

Tes yang hanya menghasilkan exit code sulit di-debug. Saat build gagal, developer perlu tahu:

  • test mana yang gagal;
  • request apa yang dikirim;
  • respons apa yang diterima;
  • assertion mana yang tidak terpenuhi;
  • berapa waktu respons;
  • apakah kegagalan ini baru atau berulang.

Reporting yang baik mengubah kegagalan build menjadi investigasi singkat, bukan sesi menebak-nebak.

Format laporan yang umum:

  • HTML untuk dibaca manusia;
  • JUnit XML untuk CI server;
  • JSON untuk integrasi custom;
  • log request/response untuk debugging.

Minimal, laporan harus membantu menjawab:

Endpoint mana yang gagal?
Input apa yang digunakan?
Respons aktualnya apa?
Ekspektasinya apa?
Apakah gagal karena API, data, environment, atau test?
Enter fullscreen mode Exit fullscreen mode

Tanpa lapisan reporting, suite otomatis tetap sulit dioperasikan dalam tim.

5. Lapisan integrasi CI

Lapisan terakhir menghubungkan suite ke pipeline agar tes berjalan otomatis pada:

  • setiap commit;
  • pull request;
  • merge ke branch utama;
  • deployment staging;
  • jadwal tertentu.

Integrasi CI harus menangani:

  • pemilihan environment;
  • injeksi secret;
  • exit code;
  • artifact laporan;
  • paralelisasi jika dibutuhkan;
  • konfigurasi retry jika relevan.

Contoh sederhana GitHub Actions:

name: API Tests

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  api-tests:
    runs-on: ubuntu-latest

    env:
      API_BASE_URL: ${{ secrets.API_BASE_URL }}
      API_TOKEN: ${{ secrets.API_TOKEN }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install dependencies
        run: npm ci

      - name: Run API tests
        run: npm test

      - name: Upload test report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: api-test-report
          path: reports/
Enter fullscreen mode Exit fullscreen mode

Kerangka kerja yang tidak bisa berjalan headless di CI belum layak disebut lengkap. Panduan tentang tes API dalam pipeline CI/CD menjelaskan cara menghubungkan lapisan ini dengan lebih rapi.

Suite yang sehat menjaga kelima lapisan tetap seimbang. Banyak tim terlalu fokus pada request dan assertion, lalu mengabaikan data dan reporting sampai test menjadi flaky atau gagal tanpa informasi yang cukup. Gunakan lima lapisan ini sebagai checklist setiap kali menambah endpoint baru.

Apa yang bukan kerangka kerja pengujian otomatis API

Kerangka kerja pengujian otomatis API bukan alat load testing.

Tes API fungsional memeriksa kebenaran:

  • status code benar;
  • body sesuai kontrak;
  • autentikasi bekerja;
  • error handling sesuai;
  • aturan bisnis terpenuhi.

Load testing dan stress testing memeriksa kemampuan API bertahan di bawah volume trafik. Itu masalah berbeda dan biasanya membutuhkan alat berbeda. Menambahkan assertion response time longgar ke functional test tidak otomatis membuatnya menjadi performance test.

Untuk pengujian beban yang lebih tepat, gunakan pendekatan khusus seperti dalam tutorial pengujian kinerja API.

Kerangka kerja pengujian otomatis API juga bukan unit testing.

Unit test memeriksa bagian kecil kode secara terisolasi, biasanya tanpa network call. API test menjalankan layanan melalui HTTP dan mencakup routing, serialisasi, autentikasi, dan lapisan data.

Keduanya penting, tetapi menangkap jenis cacat yang berbeda.

Code-first versus berbasis platform

Pilihan utamanya adalah kontrol versus kecepatan.

Kerangka kerja code-first memberi fleksibilitas penuh dan bisa hidup berdampingan dengan kode aplikasi. Namun, Anda bertanggung jawab membangun dan memelihara semua lapisan.

Kerangka kerja berbasis platform menyediakan lapisan-lapisan tersebut lebih cepat, tetapi Anda bekerja dalam model yang disediakan platform.

Faktor Kerangka kerja code-first Kerangka kerja berbasis platform
Waktu penyiapan Berhari-hari hingga berminggu-minggu kode penghubung Menit
Fleksibilitas Sangat tinggi, selama bisa dikodekan Terbatas oleh platform
Pemilik pemeliharaan Tim Anda Sebagian besar vendor
Orientasi pengguna baru Membutuhkan kemampuan bahasa pemrograman Visual, hambatan lebih rendah
Validasi schema Tambahkan pustaka sendiri Biasanya tersedia
Paling cocok Tim dengan kapasitas engineering kuat Tim campuran dan pengiriman cepat

Banyak tim memakai keduanya.

Contohnya:

  • engineer mempertahankan suite code-first untuk skenario kompleks;
  • QA dan product membuat cakupan luas di platform;
  • platform dipakai untuk desain, debugging, dan mock;
  • suite code-first dipakai untuk validasi khusus yang butuh logika lebih detail.

Pendekatan hybrid sering lebih realistis daripada memaksa semua orang memakai satu cara.

Cara memilih atau mengadopsi kerangka kerja

Gunakan proses evaluasi yang praktis, bukan sekadar memilih alat paling populer.

1. Inventarisasi API Anda

Buat daftar:

  • layanan yang dimiliki tim;
  • protokol yang dipakai: REST, GraphQL, gRPC, SOAP;
  • endpoint paling kritis;
  • endpoint dengan perubahan paling sering;
  • flow bisnis utama;
  • dependensi eksternal.

Ini membantu menentukan kemampuan yang wajib ada di lapisan request dan assertion.

2. Nilai kemampuan tim

Sesuaikan kerangka kerja dengan orang yang akan menulis dan merawat test.

Jika tim Anda kuat di Python, pytest bisa masuk akal. Jika cakupan akan banyak ditulis QA, analyst, atau product engineer, platform visual mungkin lebih cepat diadopsi.

Jangan memaksa tim non-programmer memelihara repositori kosong tanpa struktur. Sebaliknya, jangan memaksa engineer yang butuh kontrol penuh memakai alat yang terlalu membatasi.

3. Uji kompatibilitas CI sejak awal

Sebelum menulis banyak test, pastikan kerangka kerja bisa:

  • berjalan headless;
  • menerima environment variable;
  • memakai secret dari CI;
  • mengembalikan exit code yang benar;
  • menghasilkan laporan yang bisa dibaca pipeline;
  • menyimpan artifact.

Lakukan validasi ini pada hari pertama, bukan setelah ada puluhan test.

4. Jalankan uji coba pada satu layanan nyata

Pilih satu service yang benar-benar digunakan. Tulis sekitar sepuluh test bermakna, misalnya:

  • happy path;
  • validasi input;
  • autentikasi gagal;
  • permission;
  • not found;
  • conflict;
  • schema response;
  • cleanup data;
  • flow create-read-update-delete;
  • satu skenario error penting.

Dari pilot kecil ini, Anda akan melihat apakah kerangka kerja mudah dipakai untuk kasus nyata.

5. Putuskan strategi data sejak awal

Jangan menunda manajemen data.

Tentukan:

  • apakah test membuat data sendiri;
  • apakah data dibaca dari fixture;
  • apakah perlu seed database;
  • bagaimana cleanup dilakukan;
  • apakah test boleh berjalan paralel;
  • bagaimana mencegah benturan data antar test.

Mengubah strategi data setelah ratusan test dibuat biasanya mahal.

Jika Anda ingin membandingkan opsi konkret, rangkuman platform pengujian otomatis terbaik menyajikan perbandingan berdampingan. Panduan kerangka kerja pengujian otomatis juga menjelaskan pola struktural yang lebih luas.

Kesalahan umum saat memilih kerangka kerja adalah terlalu percaya pada daftar fitur. Fitur memang penting, tetapi yang lebih penting adalah apakah alat tersebut membuat test yang paling sering Anda tulis menjadi mudah, dan kegagalan yang paling sering terjadi menjadi mudah di-debug.

Sepuluh test nyata pada satu service nyata biasanya memberi sinyal lebih akurat daripada seminggu membaca perbandingan vendor.

Di mana Apidog cocok

Apidog adalah platform API all-in-one yang menyediakan lima lapisan kerangka kerja tanpa banyak kode penghubung.

Dalam konteks lima lapisan:

  • lapisan request menggunakan definisi endpoint yang sama untuk desain dan debugging;
  • lapisan assertion mendukung pemeriksaan visual dan validasi schema terhadap spesifikasi OpenAPI;
  • data pengujian dapat dijalankan dari file CSV atau JSON untuk skenario data-driven;
  • laporan HTML dihasilkan otomatis;
  • runner CLI dapat diintegrasikan dengan Jenkins, GitHub Actions, dan sistem CI lain.

Karena desain, debugging, mocking, dan testing berbagi satu sumber kebenaran, request yang Anda debug hari ini bisa dijadikan regression test dengan lebih cepat. Ini mengurangi jarak antara eksplorasi manual dan otomatisasi.

Anda dapat mengunduh Apidog dan mulai membangun suite tes API. Untuk tim yang tetap memilih code-first, Apidog masih bisa digunakan sebagai tempat mendesain dan melakukan mock API yang kemudian diuji oleh suite code-first.

Pertanyaan yang sering diajukan

Apa perbedaan antara alat pengujian API dan kerangka kerja pengujian otomatis API?

Alat pengujian API biasanya mengirim request dan menampilkan respons. Kerangka kerja menambahkan struktur untuk assertion, data pengujian, reporting, dan integrasi CI agar test bisa diulang dan dipelihara dalam skala besar.

Banyak platform modern mencakup keduanya: debugging ad-hoc dan otomatisasi penuh.

Apakah saya perlu tahu cara coding untuk menggunakan kerangka kerja pengujian otomatis API?

Tidak selalu.

Kerangka kerja code-first seperti pytest atau Jest membutuhkan pemrograman. Kerangka kerja berbasis platform memungkinkan Anda membangun dan menjalankan tes API otomatis melalui antarmuka visual.

Pilih berdasarkan siapa yang akan menulis dan memelihara test. Tim campuran sering memakai keduanya.

Berapa banyak dari lima lapisan yang bisa saya lewati?

Tidak ada.

Beberapa lapisan bisa dibuat minimal, tetapi semuanya tetap dibutuhkan:

  • request untuk memanggil API;
  • assertion untuk memvalidasi respons;
  • data untuk input dan setup;
  • reporting untuk debugging;
  • CI untuk otomatisasi.

Melewatkan lapisan CI adalah kesalahan umum karena membuat tes otomatis kembali bergantung pada eksekusi manual.

Bagaimana cara mencegah tes API menjadi flaky?

Flaky test biasanya berasal dari state bersama dan data yang tidak dikelola.

Praktik yang membantu:

  • setiap test membuat data sendiri;
  • setiap test membersihkan data setelah selesai;
  • jangan bergantung pada urutan eksekusi;
  • hindari data hardcoded yang bisa berubah;
  • gunakan environment stabil;
  • mock dependensi yang tidak dapat diandalkan;
  • buat identifier unik untuk data test.

Lapisan data pengujian yang solid mencegah sebagian besar flaky test sejak awal.

Haruskah tes API memvalidasi terhadap schema OpenAPI?

Ya, jika Anda memiliki spesifikasi OpenAPI.

Validasi schema membantu menangkap perubahan struktural seperti:

  • field diganti nama;
  • field hilang;
  • tipe data berubah;
  • object berubah menjadi array;
  • properti wajib tidak lagi dikirim.

Ini menjaga assertion tetap sinkron dengan kontrak API saat layanan berkembang.

Top comments (0)