API Testing
Semester Ganjil 2025/2026
Jurusan Teknologi Informasi
Politeknik Negeri Malang
[Link] Penjaminan Mutu Perangkat Lunak 1
Apa Itu REST API?
• API (Application Programming Interface): Kontrak yang memungkinkan
berbagai komponen perangkat lunak berkomunikasi satu sama lain.
• REST (Representational State Transfer): Gaya arsitektur untuk membangun
layanan web yang menggunakan protokol HTTP dan berinteraksi
dengan sumber daya (resources).
• Klien & Server: Klien (misalnya, aplikasi mobile) mengirim permintaan
(request); server (backend) mengirim tanggapan (response).
• Endpoint: URL unik untuk mengakses fungsi tertentu, contoh: GET
/v1/users/123.
• Resource (Sumber Daya): Entitas yang diekspos oleh API,
misalnya user atau product.
• Representasi: Format data dari sebuah resource, umumnya dalam
bentuk JSON (JavaScript Object Notation).
[Link] 2
Request & Response HTTP
• Method: Aksi yang ingin dilakukan (GET, POST, PUT, PATCH, DELETE).
• URL (Uniform Resource Locator): Alamat endpoint,
mis. [Link]
• Query Parameter: Filter atau parameter tambahan pada URL,
missal: ?limit=10&sort=title.
• Header: Metadata tambahan untuk permintaan/respons, mis. Accept:
application/json.
• Body (Payload): Data utama yang dikirim dalam permintaan atau
diterima dalam response.
• Status Code: Kode numerik yang menandakan hasil dari permintaan
(2xx untuk sukses, 4xx untuk kesalahan klien, 5xx untuk kesalahan
server).
[Link] 3
Metode HTTP & Idempotensi
• GET: Membaca data. Bersifat aman (tidak mengubah data)
dan idempotent (permintaan berulang memberikan hasil yang sama).
• POST: Membuat data baru. Tidak idempotent secara default.
• PUT: Mengganti seluruh data pada sebuah resource.
Bersifat idempotent.
• PATCH: Memperbarui sebagian data pada sebuah resource. Tidak selalu
idempotent.
• DELETE: Menghapus data. Bersifat idempotent.
• Idempotensi: Sebuah operasi yang jika dieksekusi beberapa kali akan
selalu menghasilkan state akhir yang sama. Penting untuk diuji, terutama
pada PUT dan DELETE.
[Link] 4
Status Code Penting untuk Diuji
• 200 OK: Sukses untuk permintaan baca (GET) atau pembaruan (PUT/PATCH).
• 201 Created: Sukses membuat resource baru (POST). Respons harus menyertakan
header Location yang berisi URL resource baru.
• 204 No Content: Sukses, tetapi tidak ada body dalam respons (umumnya
untuk DELETE).
• 400 Bad Request: Permintaan tidak valid karena kesalahan input dari klien (misalnya,
format JSON salah).
• 401 Unauthorized: Data yang dikirimkan gagal diautorisasi dikarenakan tidak dikenal
atau kesalahan kata sandi.
• 403 Forbidden: Permintaan valid tetapi mengakses resource yang tidak diijinkan
• 404 Not Found: Resource yang diminta tidak ditemukan.
• 422 Unprocessable Content: Data yang dikirim valid secara format, tetapi melanggar
aturan bisnis (misalnya, email sudah terdaftar).
[Link] 5
Header HTTP yang Penting
• Content-Type: Menentukan format body dari permintaan yang
dikirim (mis. application/json).
• Accept: Memberi tahu server format respons yang diinginkan oleh
klien.
• Location: Ditemukan pada respons 201 Created, berisi URL dari
resource yang baru dibuat.
• Allow: Ditemukan pada respons 405 Method Not Allowed, berisi
daftar metode HTTP yang valid.
• ETag: "Sidik jari" dari sebuah versi resource, digunakan untuk
caching dan permintaan kondisional.
[Link] 6
Jenis-Jenis Pengujian API
• Fungsional (Happy Path): Menguji alur normal sesuai ekspektasi.
• Negatif: Menguji bagaimana API menangani input tidak valid atau kondisi
error. Harapannya adalah menerima kode status 4xx yang sesuai.
• Kasus Tepi (Edge Cases): Menguji batas-batas sistem, seperti string yang
sangat panjang, angka maksimum, atau list kosong.
• Validasi Skema: Memastikan struktur body respons sesuai dengan JSON
Schema yang didefinisikan.
• Uji Kontrak: Memastikan implementasi API sesuai dengan
spesifikasi OpenAPI.
• Uji Idempotensi: Mengirim permintaan PUT atau DELETE berulang kali
untuk memastikan state sistem tetap konsisten.
[Link] 7
Pengujian Berbasis Spesifikasi
(OpenAPI & JSON Schema)
• OpenAPI (dulu Swagger): Berkas (YAML/JSON) yang menjadi
"sumber kebenaran" untuk sebuah API. Mendeskripsikan endpoint,
parameter, respons, dan skema data.
• JSON Schema: Standar untuk mendefinisikan struktur dan validasi
data JSON.
• Manfaat: Pengujian dapat diotomatisasi untuk memastikan
implementasi API tidak menyimpang dari kontrak yang telah
disepakati.
[Link] 8
Fitur Umum API: Paginasi, Pengurutan,
dan Penyaringan
• Paginasi (Pagination): Memecah data dalam jumlah besar menjadi
"halaman-halaman" kecil
menggunakan limit & offset atau cursor.
• Pengurutan (Sorting): Mengurutkan hasil berdasarkan field
tertentu, missal: ?sort=createdAt,desc.
• Penyaringan (Filtering): Memfilter hasil berdasarkan kriteria,
missal: ?status=published.
• Skenario Uji: Pastikan limit dipatuhi, urutan data konsisten, dan
filter berfungsi dengan benar.
[Link] 9
Fitur Umum API: Caching
• Caching: Mekanisme untuk menyimpan respons sementara agar tidak
perlu memintanya berulang kali ke server.
• ETag: Header yang berisi ID unik untuk versi tertentu dari sebuah
resource.
• Permintaan Kondisional: Klien dapat mengirim permintaan GET dengan
header If-None-Match yang berisi ETag dari data yang sudah dimilikinya.
• 304 Not Modified: Jika data di server tidak berubah, server akan
merespons dengan status ini tanpa mengirim body, menghemat
bandwidth.
• Skenario Uji: Lakukan GET pertama (simpan ETag), lalu
lakukan GET kedua dengan header If-None-Match dan harapkan
respons 304.
[Link] 10
Contoh Pengujian (cURL)
[Link] 11
Contoh (Postman)
[Link] 12
Contoh (RestAssured)
[Link] 13
AAA & GWT
• Arrange-Act-Assert (AAA)
• Given-When-Then(GWT)
• Pola desain ini membantu membuat tes lebih mudah dibaca,
dipahami, dan dipelihara. Keduanya memiliki tujuan yang sama
tetapi menggunakan terminologi yang sedikit berbeda.
[Link] 14
Arrange/Given
• Arrange/Given: Persiapan
• Tujuan: Menyiapkan semua prasyarat dan input yang diperlukan
untuk tes.
• Contoh:
• Membuat data uji (misalnya, membuat pengguna baru melalui API).
• Mengatur mock untuk dependensi eksternal.
• Menyiapkan payload permintaan (request body).
• Menentukan header yang diperlukan.
[Link] 15
Act/When
• Act/When: Tindakan
• Tujuan: Mengeksekusi unit kode atau perilaku yang sedang diuji.
Dalam pengujian API, ini biasanya berarti mengirim permintaan
HTTP ke endpoint.
• Contoh:
• Mengirim permintaan POST /books.
• Melakukan panggilan GET /users/123.
[Link] 16
Assert/Then
• Assert/Then: Verifikasi
• Tujuan: Memverifikasi bahwa hasil dari tindakan sesuai dengan
harapan.
• Contoh:
• Memeriksa apakah kode status respons adalah 201 Created.
• Memvalidasi bahwa body respons berisi data yang benar.
• Memastikan header Location ada dan memiliki format yang benar.
[Link] 17
Tools atau Framework
• HTTP Client: Postman, Insomnia (GUI untuk mengirim permintaan HTTP
dan menulis tes sederhana).
• CLI Tools: cURL, httpie (Alat baris perintah untuk interaksi HTTP cepat).
• Test Framework: REST Assured (Java), Karate (DSL), Pytest (Python)
untuk menulis tes dalam kode.
• Test Runner: Newman (Menjalankan koleksi Postman dari CLI, cocok
untuk CI/CD).
• Mock Server: Prism, WireMock (Mensimulasikan API dependency untuk
pengujian yang terisolasi dan stabil).
• CI/CD (Continuous Integration/Continuous Deployment): Platform
seperti Jenkins, GitLab CI, atau GitHub Actions untuk menjalankan tes
secara otomatis.
[Link] 18
Strategi Pengujian API
• Pengujian API adalah bagian dari strategi kualitas yang lebih besar,
sering digambarkan dengan Piramida Pengujian.
• Uji Unit (Dasar Piramida): Menguji komponen/fungsi individual (misalnya,
validasi input, logika bisnis) secara terisolasi. Cepat dan murah.
• Uji Integrasi/API (Tengah Piramida): Menguji interaksi antar komponen,
termasuk API itu sendiri tanpa UI. Keseimbangan yang baik antara
kecepatan dan keandalan. Di sinilah sebagian besar pengujian REST API
berada.
• Uji End-to-End/UI (Puncak Piramida): Menguji seluruh alur aplikasi dari
perspektif pengguna melalui antarmuka grafis. Lambat, mahal, dan rapuh.
• Fokus pada bagian tengah piramida: Tulis banyak tes API untuk
mendapatkan umpan balik yang cepat dan andal.
[Link] 19
Manajemen Data Uji
• Kualitas data uji sangat menentukan kualitas pengujian API.
• Isolasi: Setiap tes harus independen. Satu tes tidak boleh bergantung pada data
yang dibuat oleh tes lain.
• Prasyarat: Buat data yang diperlukan di awal setiap tes (misalnya, melalui
API POST atau langsung ke database).
• Pembersihan: Hapus data yang dibuat setelah tes selesai untuk menjaga
lingkungan tetap bersih.
• Data Realistis: Gunakan data yang mencerminkan data produksi, tetapi hindari
penggunaan data sensitif. Gunakan data dummy atau anonim.
• Contoh: Sebelum menguji GET /users/{id},
pastikan user dengan id tersebut ada dengan membuatnya terlebih
dahulu melalui POST /users.
[Link] 20
Otomatisasi dalam Alur CI/CD
• Mengintegrasikan pengujian API ke dalam pipeline CI/CD adalah kunci untuk mendapatkan
umpan balik yang cepat dan konsisten.
• Langkah-langkah Umum dalam Pipeline:
• Trigger: Pipeline dipicu oleh git push atau merge request.
• Build & Lint: Kode aplikasi di-compile dan diperiksa kualitasnya.
• Unit Tests: Tes unit dijalankan.
• Deploy to Test Environment: Aplikasi di-deploy ke lingkungan pengujian yang terisolasi.
• API Tests: Skrip pengujian API (seperti koleksi Postman/Newman atau kode REST Assured)
dijalankan terhadap lingkungan tersebut.
• Gate: Jika tes API gagal, pipeline berhenti dan memberikan notifikasi. Build dianggap gagal.
• Deploy to Staging/Production: Jika semua tes berhasil, build dapat dilanjutkan ke tahap
berikutnya.
[Link] 21
Contoh: Newman
name: API Tests (Newman) - name: Set up [Link]
uses: actions/setup-node@v4
with:
on:
node-version: '18'
push:
branches: [ main ] - name: Install Newman
pull_request: run: npm install -g newman
branches: [ main ]
- name: Run Postman collection
run: newman run "My API
jobs: Collection.postman_collection.json" -e
"staging.postman_environment.json"
test:
runs-on: ubuntu-latest - name: Upload Newman reports
if: always()
steps: uses: actions/upload-artifact@v4
with:
- name: Check out code
name: newman-reports
uses: actions/checkout@v4 path: newman/
[Link] 22
Contoh: Maven
name: API Tests (Maven) - name: Set up JDK 17
uses: actions/setup-java@v4
on: with:
push: java-version: '17'
branches: [ main ] distribution: 'temurin'
pull_request:
branches: [ main ] - name: Run API Tests with Maven
run: mvn test
jobs:
test: - name: Upload test reports
runs-on: ubuntu-latest if: always()
uses: actions/upload-artifact@v4
steps: with:
- name: Check out code name: maven-test-reports
uses: actions/checkout@v4 path: target/surefire-reports/
[Link] 23
Pelaporan & Metrik
• Laporan Tes: Hasil dari eksekusi tes (berhasil/gagal) harus mudah
diakses.
• Metrik Kunci:
• Pass/Fail Rate: Persentase tes yang berhasil vs. gagal.
• Test Coverage: Persentase endpoint atau fungsionalitas yang dicakup oleh
tes. Ini bisa diukur secara manual atau dengan alat bantu.
• Durasi Eksekusi: Waktu yang dibutuhkan untuk menjalankan seluruh
rangkaian tes. Peningkatan durasi bisa menandakan masalah performa.
• Flaky Tests: Tes yang kadang berhasil dan kadang gagal tanpa perubahan
kode. Ini harus diidentifikasi dan diperbaiki.
[Link] 24
Glosarium
• API: Kontrak komunikasi antar perangkat lunak. • JSON Schema: Aturan untuk validasi struktur data JSON.
• Body: Payload data dalam permintaan/respons. • Method: Kata kerja HTTP (GET, POST, dll.).
• Caching: Menggunakan kembali respons yang • Mock Server: Server palsu untuk simulasi dependensi.
tersimpan untuk efisiensi. • Negosiasi Konten: Proses memilih format representasi
data.
• CI/CD: Sistem otomatis untuk menjalankan tes
dan deployment. • OpenAPI: Spesifikasi standar untuk mendeskripsikan REST
API.
• Endpoint: URL spesifik untuk satu operasi API. • Paginasi: Proses memecah data besar menjadi halaman-
• ETag: Pengenal unik untuk versi sebuah halaman kecil.
resource. • Representasi: Format dari sebuah resource (misalnya,
JSON).
• Header: Metadata pada permintaan/respons.
• Resource: Entitas yang diekspos oleh API (misalnya, user).
• HTTP: Protokol komunikasi yang digunakan oleh • REST: Gaya arsitektur API berbasis HTTP.
web.
• Status Code: Kode numerik yang menunjukkan hasil
• Idempotensi: Operasi yang diulang permintaan.
menghasilkan state akhir yang sama.
[Link] 25
Any Questions?
[Link] 26
Tugas
• Implementasikan API testing pada project anda secara berkelompok!
[Link] 27