Menguasai database testing menggunakan SQL queries untuk memverifikasi data integrity, melakukan backend verification, dan memastikan data tersimpan dengan benar

Setelah di episode 9 kita mempelajari API testing dasar, pada episode ini kita mempelajari database & SQL testing — bagaimana menguji data integrity dan melakukan backend verification menggunakan SQL queries. Database testing penting karena banyak bug tersembunyi di level data yang tidak terlihat di UI atau API.
Mengapa database testing penting? Karena aplikasi yang terlihat berfungsi di UI bisa saja menyimpan data dengan benar di database. Dengan menguji langsung ke database, kalian bisa memastikan data integrity dan menemukan bug yang tidak terlihat di permukaan.
-- Ambil semua data
SELECT * FROM users;
-- Filter data
SELECT * FROM users WHERE email = 'john@test.com';
-- Hitung jumlah
SELECT COUNT(*) FROM users WHERE status = 'active';
-- Cek data terakhir
SELECT * FROM orders ORDER BY created_at DESC LIMIT 1;-- Cek referential integrity
SELECT o.id, o.user_id, u.name
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE u.id IS NULL;
-- Cek duplicate data
SELECT email, COUNT(*)
FROM users
GROUP BY email
HAVING COUNT(*) > 1;
-- Cek data kosong
SELECT * FROM users WHERE name IS NULL OR name = '';
-- Cek data konsisten
SELECT * FROM orders
WHERE status NOT IN ('pending', 'paid', 'shipped', 'delivered', 'cancelled');Data Insertion Tests:
├── TC-DB-001: Insert user via UI
│ ├── Action: Daftar user baru via form
│ ├── DB Check: SELECT * FROM users WHERE email = 'new@test.com'
│ ├── Expected: Data tersimpan dengan benar
│ └── Priority: High
├── TC-DB-002: Insert user via API
│ ├── Action: POST /api/users
│ ├── DB Check: SELECT * FROM users WHERE email = 'api@test.com'
│ ├── Expected: Data tersimpan dengan benar
│ └── Priority: High
└── TC-DB-003: Insert dengan validasi
├── Action: Insert dengan field kosong
├── DB Check: Tidak ada data baru
├── Expected: Insert gagal, data tidak tersimpan
└── Priority: MediumData Update Tests:
├── TC-DB-004: Update profile
│ ├── Action: Update nama via UI
│ ├── DB Check: SELECT name FROM users WHERE id = 1
│ ├── Expected: Nama berubah
│ └── Priority: High
└── TC-DB-005: Update status order
├── Action: Bayar order
├── DB Check: SELECT status FROM orders WHERE id = 1
├── Expected: Status berubah dari 'pending' ke 'paid'
└── Priority: HighData Deletion Tests:
├── TC-DB-006: Soft delete user
│ ├── Action: Hapus user via UI
│ ├── DB Check: SELECT * FROM users WHERE id = 1
│ ├── Expected: is_deleted = true, data masih ada
│ └── Priority: Medium
└── TC-DB-007: Hard delete user
├── Action: Hapus user permanen
├── DB Check: SELECT * FROM users WHERE id = 1
├── Expected: Data tidak ada
└── Priority: MediumNote
Gunakan SQL client seperti DBeaver, pgAdmin, atau MySQL Workbench untuk terhubung ke database. Pastikan kalian punya akses read-only ke production database untuk verifikasi, tapi jangan pernah melakukan write operation di production.
-- Test Script: Verifikasi User Registration
-- Run setelah user berhasil daftar
-- 1. Cek user tersimpan
SELECT id, name, email, created_at
FROM users
WHERE email = 'testuser@example.com';
-- 2. Cek default values
SELECT role, is_active, is_verified
FROM users
WHERE email = 'testuser@example.com';
-- Expected: role='user', is_active=true, is_verified=false
-- 3. Cek timestamp
SELECT created_at, updated_at
FROM users
WHERE email = 'testuser@example.com';
-- Expected: created_at = NOW(), updated_at = NOW()
-- 4. Cek relasi
SELECT u.id, p.user_id
FROM users u
LEFT JOIN profiles p ON u.id = p.user_id
WHERE u.email = 'testuser@example.com';
-- Expected: profile tersimpan untuk user baruBest Practices:
├── 1. Gunakan data unik untuk setiap test
│ └── Hindari test mengganggu test lain
├── 2. Bersihkan data setelah test
│ └── Rollback atau delete test data
├── 3. Test di environment terpisah
│ └── Jangan test langsung di production
├── 4. Verifikasi semua field
│ └── Jangan hanya cek field utama
├── 5. Cek data types & constraints
│ ├── VARCHAR length
│ ├── NOT NULL constraints
│ └── UNIQUE constraints
└── 6. Test edge cases
├── Data kosong
├── Data maksimum
└── Data dengan special charactersTip
Database testing adalah skill yang membedakan QA Tester yang baik dari yang biasa. Dengan kemampuan SQL, kalian bisa menemukan bug yang tidak terlihat di UI atau API.
Pada episode 10 ini, kalian telah mempelajari database & SQL testing.
Inti yang harus dibawa pulang:
Di episode 11 selanjutnya, kita akan membahas cross-browser & mobile testing — bagaimana menguji aplikasi di berbagai browser dan perangkat. Sampai jumpa di episode 11!