Flaky regression terjadi ketika perubahan di aplikasi menyebabkan tes otomatis gagal secara sporadis atau tidak dapat direproduksi. Untuk CodeIgniter 4, strategi pengujian yang terstruktur—mulai dari unit hingga end-to-end—membantu tim menemukan penyebab regresi lebih cepat dan mempertahankan kepercayaan terhadap pipeline. Artikel ini langsung membahas bagaimana membangun dan mengelola suite tes agar hasilnya stabil dan dapat diandalkan.
1. Dasar Suite Unit untuk Logika Model dan Service
Unit test fokus pada fungsi kecil seperti model, helper, atau service yang tidak bergantung pada sumber daya eksternal. Gunakan PHPUnit yang sudah terintegrasi dengan CodeIgniter 4. Pastikan setiap tes memuat konteks minimal sehingga hasil bisa direproduksi.
Contoh struktur file:
tests/App/Models/UserModelTest.php
Gunakan reflections untuk menyuntikkan dependency yang dapat diganti stub. Hindari mengakses database asli kecuali melalui mock. Jika harus menguji query builder, jalankan di environment in-memory (SQLite) agar hasil tidak bergantung pada data lingkungan.
Tips:
- Setiap tes harus membersihkan state secara eksplisit, misalnya mereset objek atau cache.
- Gunakan data provider untuk variasi input agar kasus ekstrem tertutup tanpa duplikasi kode.
2. Integrasi Pengujian API dan Database Secara Terisolasi
Integrasi test menggabungkan beberapa komponen seperti controller dan model. Konfigurasi harus tetap deterministik:
- Jalankan migration dan seeding khusus sebelum suite untuk memastikan schema dan data konsisten.
- Gunakan database terpisah (misalnya
ci_integration) agar tidak tercampur dengan data produksi.
Gunakan helper CI_Controller::setPrivateProperty() jika perlu mengakses property protected. Pastikan setiap tes menghapus record yang dibuatnya dengan transaksi yang digulung kembali:
// Contoh setup transaksi
$this->db->transStart();
// lakukan aksi
$this->db->transRollback();
Menjalankan rollback memastikan environment kembali bersih. Jangan lupa menyertakan assertion terhadap HTTP status dan payload JSON untuk meyakinkan response API.
3. End-to-End Test dengan Browser Automation
Gunakan Playwright atau Codeception untuk E2E. Fokus pada alur utama seperti login, checkout, atau approval workflow. Strategi mengurangi flaky di sini termasuk:
- Menunggu elemen secara eksplisit (
await locator.isVisible()) ketimbang delay statis. - Menjaga data test deterministik dengan akun dan fixture yang tetap.
- Mengisolasi environment E2E dari data produksi menggunakan subdomain staging.
Selain itu, jalankan tes E2E dalam mode headless di CI untuk konsistensi. Dokumentasikan precondition tiap alur agar tester manual atau automatis dapat memverifikasinya sebelum menekan tombol deploy.
4. Konfigurasi Suite CI/CD untuk Mengeliminasi Flaky
Setup pipeline harus menjalankan suite secara berurutan dan dapat diulang. Rangkaian yang disarankan:
- Linting (PHPStan / CodeIgniter lint) untuk sintaks.
- Unit test.
- Integrasi test.
- E2E test (opsional bisa parallel dengan branch staging).
Contoh potongan phpunit.xml minimal untuk CI:
<phpunit bootstrap="vendor/autoload.php" colors="true" verbose="true">
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">tests/Unit</directory>
</testsuite>
</testsuites>
<php>
<env name="CI" value="true"/>
<env name="APP_ENV" value="testing"/>
</php>
</phpunit>
Pastikan pipeline membersihkan cache dan node modules setiap run jika lingkungan shared agar tidak ada state tersisa.
5. Manajemen Fixture dan Stub yang Stabil
Fixture harus representatif namun kecil. Simpan data sebagai JSON atau factory object dan muat ulang sebelum tiap tes. Hindari mengandalkan data yang dihasilkan secara acak tanpa kontrol.
Strategi praktis:
- Gunakan builder pattern untuk membuat objek domain dan reuse dalam banyak tes.
- Stub external service (misalnya API eksternal) menggunakan
MockHandleratauDummyConnectoragar paket tes tetap offline.
Catat dependencies versi data dan schema agar tim lain dapat memperbarui fixture serentak ketika ada perubahan field.
6. Verifikasi Workflow sebelum Rilis
Lengkapi pipeline dengan pengujian smoke test di environment staging setelah deploy otomatis. Warna hijau berarti minimal fungsi masih berjalan.
- Gunakan webhook atau notifikasi ke channel tim jika smoke test gagal.
- Lakukan manual checklist seperti login utama, submission form, atau background job yang sensitif.
Documentasikan langkah verifikasi supaya setiap anggota tahu apa yang perlu dicek dan metric apa yang diprioritaskan.
7. Monitoring dan Kepercayaan pada Pipeline
Untuk mengurangi flaky, analisa hasil tes:
- Catat tes mana yang gagal paling sering dan tambahkan logging extra.
- Gunakan dashboard CI (GitLab, GitHub Actions) untuk memonitor tren waktu running agar bisa mendeteksi ketidakstabilan.
- Buat alert untuk rerun suite jika ada kegagalan mendadak, lalu bandingkan kembali dengan baseline.
Secara berkala lakukan retrospeksi untuk menghapus atau memperbaiki tes yang terlalu rentan terhadap lingkungan.
Kesimpulan
Strategi komprehensif—unit, integrasi, end-to-end, CI/CD, fixture stabil, verifikasi workflow, dan monitoring—membantu mengurangi flaky regression di CodeIgniter 4. Dengan pendekatan ini tim dapat mengembalikan kepercayaan terhadap pipeline otomatis dan mengantarkan rilis yang lebih stabil.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!