2.8.2 Studi Kasus: Validasi API login dan checkout di aplikasi e-commerce
Dalam dunia e-commerce, pengguna tidak hanya sekedar menjelajahi katalog produk, tetapi juga melakukan interaksi krusial seperti login ke akun mereka, menambahkan barang ke keranjang belanja, hingga menyelesaikan transaksi pembelian (checkout). Meskipun terlihat sederhana dari sisi frontend, seluruh alur ini sangat bergantung pada API yang bekerja di belakang layar.
Untuk studi kasus ini, kita akan menggunakan DummyJSON, sebuah web demo
![]() |
e-commerce yang menyediakan API publik untuk tujuan pembelajaran dan pengujian. Fokus pengujian akan dimulai dari login, pengambilan data produk, hingga simulasi proses checkout dengan menambahkan produk ke cart.
⬛ Login API
Login merupakan pintu masuk utama dalam proses otentikasi pengguna. Di DummyJSON, endpoint login akan mengembalikan JSON Web Token (JWT) yang kemudian digunakan sebagai otorisasi untuk endpoint-endpoint lain yang bersifat pribadi.
Pengujian login API bertujuan untuk memastikan bahwa:
● Hanya kredensial yang valid yang bisa mendapatkan akses.
● Token autentikasi dikembalikan hanya pada login yang berhasil.
● Sistem memberikan pesan error yang informatif namun aman.
Token yang diterima harus disimpan dan digunakan kembali dalam header Authorization untuk request selanjutnya, seperti menambahkan produk ke cart.
⬛ Checkout API (Cart Simulation)
Pada web demo DummyJSON, proses checkout disimulasikan dengan menambahkan produk ke cart menggunakan endpoint POST /carts/add. Meskipun tidak ada endpoint untuk pembayaran atau pembuatan order final, pengujian terhadap proses cart tetap mencerminkan sebagian besar skenario validasi penting.
Proses pengujian mencakup:
● Validasi bahwa produk yang ditambahkan benar-benar tersedia.
● Pengiriman struktur payload yang sesuai (misalnya: userId, products).
● Validasi bahwa pengguna sudah login (menggunakan JWT di header).
● Penanganan error seperti ketika user ID tidak valid, produk tidak valid, dsb.
⬛ Keterkaitan antara Login dan Checkout
Login dan checkout tidak bisa diuji secara terpisah. Pengguna yang belum login tidak bisa mengakses endpoint checkout (cart). Begitu pula dengan pengguna yang tidak terdaftar, maupun menambahkan produk yang tidak ada di dalam database.
⬛ API Login – Aspek Teknis dan Fungsional
Tujuan pengujian login API:
● Autentikasi hanya berhasil dengan username & password yang benar.
● Token disimpan untuk request selanjutnya.
● Validasi response untuk format dan status code yang sesuai.
Validasi Response Login:
● 200 OK → login berhasil, token dikembalikan.
● 401 Unauthorized → kredensial salah.
● 400 Bad Request → format payload tidak valid.
● Produk tersedia dan jumlah valid.
● Token dikirim dalam header Authorization.
● Response menyertakan cartId, products, dan total.
● Login dengan username/password valid → dapat token.
● Tambah produk ke cart → berhasil.
Contoh Negative Test Cases:
● Login dengan password salah → 401 Unauthorized.
● Tambah produk yang pengguna yang tidak terdaftar → 404 Not Found.
⬛ Studi Kasus
Kita akan menggunakan DummyJSON https://dummyjson.com/docs untuk melakukan simulasi API testing pada alur e-commerce, yang terdiri dari:
● Login
● Mengambil daftar produk
● Menambahkan ke keranjang (cart)
- Menyusun skenario API testing (positif & negatif)
- Memahami alur penggunaan token otentikasi
- Menggunakan token otomatis di request selanjutnya (Postman)
- Menyusun test case berdasarkan skenario yang dibuat
No |
Nama Skenario |
Langkah / Endpoint |
Expected Result |
1 |
Login dengan kredensial valid |
POST /auth/login |
Status 200, token dikembalikan |
2 |
Ambil semua produk |
GET /products |
Status 200, daftar produk muncul |
3 |
Tambahkan item ke cart |
POST /carts/add |
Status 200, cart dikembalikan |
4 |
Ambil cart user (opsional) |
GET /carts/user/1 |
Status 200, data cart ditampilkan |
No |
Nama Skenario |
Langkah / Endpoint |
Expected Result |
1 |
Login dengan password salah |
POST /auth/login |
Status 400 Bad Request |
2 |
Tambah produk dengan user id yang tidak valid |
POST /carts/add |
Status 404 Not Found |
Untuk memudahkan dalam mengatur test case, kita bisa membuat collection terlebih dahulu.
● Klik menu Collections, + Create New Collection
● Beri nama misalnya: API dummyJSON
- Klik “No Environment” → Create Environments
- Tambahkan environment bernama dummyJSON-env
- Tambahkan variable: base_url
- Tambahkan initial value: https://dummyjson.com
- Klik tombol “Save”
1. Buat Request: Login
Add request → Simpan request dengan nama: Login User
Request: POST {{base_url}}/user/login
Body (raw JSON):
{ |
Pilih environment: dummyJSON-env
Hasil:
● Status: 200 OK
● accessToken akan digunakan di header setiap request.
Perlu diperhatikan bahwa token atau accessToken memiliki masa berlaku tertentu. Oleh karena itu, apabila token sudah kadaluarsa, QA perlu mengirim ulang request ke endpoint login API untuk memperoleh token yang baru.
Karena token ini akan digunakan pada request-request selanjutnya, QA harus menambahkan token tersebut ke dalam header setiap permintaan. Salah satu tantangan yang sering dihadapi adalah kebutuhan untuk memperbarui token secara berkala, yang dapat menjadi merepotkan terutama saat menangani banyak request.
Untuk mengatasi hal ini, salah satu solusi yang dapat diterapkan adalah membuat nilai Authorization menjadi dinamis, sehingga token akan diperbarui secara otomatis setiap kali request dijalankan, tanpa perlu memperbarui token secara manual.
Langkah yang dapat dilakukan adalah menambahkan skrip pada tab Scripts di Postman untuk menyimpan nilai token ke dalam Environment Variable, yang kemudian dapat digunakan kembali secara otomatis di request berikutnya.
Berikut langkah-langkahnya:
- Klik Environment → Pilih environment: dummyJSON-env
○ Tambahkan variable: token
○ Kosongkan Initial value
○ Klik Save
- Kembali ke Login request, tambahkan script di Tab “Scripts”
let response = pm.response.json(); |
- Kirim request Login kembali
Hasil: Token disimpan ke environment, bisa digunakan dengan {{token}} di header berikutnya.
Untuk mengecek bahwa token berhasil tersimpan, klik Environment → dummyJSON-env. Jika Current value tidak kosong, maka token berhasil tersimpan dan token akan diperbarui secara otomatis setiap kali request dijalankan.
2. Mendapatkan Produk
Add request → Simpan request dengan nama: Get Product
Request: GET {{base_url}}/products
Header:
Authorization: Bearer {{token}}
Pilih environment: dummyJSON-env
Hasil:
● Status: 200 OK
● Body mengandung array produk
3. Tambahkan Produk ke Cart
Add request → Simpan request dengan nama: Add Product to Cart
Request: POST {{base_url}}/carts/add
Header:
Authorization: Bearer {{token}}
Body:
{ |
Pilih environment: dummyJSON-env
Hasil:
● Status: 201 Created
● Ada properti total, products, dan id
Untuk menguji negative test cases, kita juga perlu membuat request terlebih dahulu.
1. Login dengan password yang salah
Kita bisa menambahkan request baru atau bisa duplikat dari test case yang sudah kita buat sebelumnya. Supaya lebih cepat, maka kita akan duplicate request dari Login User.
Klik pada Login User → Klik opsi → Duplicate
Simpan request dengan nama: Login User with invalid password
Ubah password pada request body:
Body (raw JSON):
{
"username": "emilys",
"password": "12345"
}
Pilih environment: dummyJSON-env
Hasil: Status: 400 Bad Request dan response menunjukan bahwa akun yang digunakan invalid (dalam case ini adalah password salah).
2. Tambahkan Produk ke Cart dengan user ID yang tidak valid
Klik pada Add Product to Cart → Klik opsi → Duplicate
Simpan request dengan nama: Add Product to Cart with invalid user ID
Request: POST {{base_url}}/carts/add
Header:
Authorization: Bearer {{token}}
Body:
{
"userId": 1000,
"products": [
{ "id": 1, "quantity": 2 },
{ "id": 2, "quantity": 1 }
]
}
Pilih environment: dummyJSON-env
Expected:
● Status: 404 Not Found, dengan response menunjukkan bahwa user dengan ID “1000” tidak ditemukan