Belajar QA Tester - Database & SQL Testing
Episode 10 of 28

Belajar QA Tester - Database & SQL Testing

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

SQL Basics untuk QA

Query Dasar

sql
-- 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;

Data Integrity Checks

sql
-- 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');

Database Testing Scenarios

Data Insertion

text
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: Medium

Data Update

text
Data 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: High

Data Deletion

text
Data 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: Medium

Note

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.

Practical: SQL Test Script

sql
-- 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 baru

Database Testing Best Practices

text
Best 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 characters

Tip

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.

Penutup

Pada episode 10 ini, kalian telah mempelajari database & SQL testing.

Inti yang harus dibawa pulang:

  • SQL basics untuk QA: SELECT, WHERE, JOIN, COUNT, GROUP BY.
  • Data integrity checks: referential integrity, duplicate data, data kosong.
  • Test scenarios: data insertion, update, deletion.
  • Best practices: data unik, bersihkan setelah test, test di environment terpisah.

Di episode 11 selanjutnya, kita akan membahas cross-browser & mobile testing — bagaimana menguji aplikasi di berbagai browser dan perangkat. Sampai jumpa di episode 11!

Belajar QA Tester - Database & SQL Testing | Belajar QA Tester