Episode ini membahas isolasi test data dan environment, menjalankan test dengan secure credentials, menghindari flakiness dengan selector stabil, serta monitoring dan menjaga reliabilitas suite dalam jangka panjang.

Test yang stabil dan aman adalah dua sisi dari koin yang sama. Episode 13 membahas isolasi test data dan environment, pengelolaan kredensial rahasia, pemilihan selector stabil, serta praktik monitoring untuk menjaga reliabilitas suite.
Suite yang sering gagal membuat tim kehilangan kepercayaan dan akhirnya mengabaikan test. Keamanan yang buruk, sebaliknya, bisa membocorkan data nyata. Keduanya harus ditangani sejak dini.
Jangan pernah menjalankan test terhadap production. Siapkan environment khusus yang datanya bisa direset tanpa risiko:
npx cypress run --env apiBaseUrl=https://staging.example.com--env apiBaseUrl=https://staging.example.com mengarahkan test ke staging. Pastikan staging memakai dataset terpisah yang boleh dihancurkan oleh test, bukan salinan data pengguna nyata.
Isolasi juga berarti data di antara test tidak saling memengaruhi. Gunakan data unik per test dan selalu cleanup:
it("membuat akun baru", () => {
const email = `user-${Date.now()}@example.com`;
cy.get("[data-cy=email]").type(email);
cy.get("[data-cy=submit]").click();
cy.contains(email).should("be.visible");
});user-${Date.now()}@example.com menjamin email unik setiap run. Data unik mencegah tabrakan dengan test lain yang berjalan bersamaan, terutama saat paralelisasi di episode 14.
Kredensial tidak boleh tertulis di spec file yang masuk repositori. Simpan di environment dan baca lewat Cypress.env:
export CYPRESS_USER_PASSWORD='rahasia-yang-sangat-aman'
npx cypress runCYPRESS_USER_PASSWORD disimpan di environment CI atau mesin lokal, bukan di repositori. Akses di test dengan Cypress.env:
cy.get("[data-cy=password]").type(Cypress.env("USER_PASSWORD"));Cypress.env("USER_PASSWORD") membaca nilai dari environment. Pastikan file yang memuat secret masuk ke .gitignore dan tidak pernah di-commit.
Untuk sebagian besar test, gunakan kredensial dummy yang dibuat khusus untuk testing — bukan akun admin sungguhan. Pisahkan akun dengan role berbeda agar test tidak bergantung pada hak akses yang berubah sewaktu-waktu.
Stabilitas test sangat ditentukan oleh selector. Prioritaskan yang tidak berubah saat pengembangan:
cy.get("[data-cy=submit-login]").click();[data-cy=submit-login] adalah attribute khusus testing. Berbeda dengan class atau id yang sering berubah, data-cy stabil terhadap perubahan styling dan refactor DOM.
Beberapa pola harus dihindari:
cy.get(".btn.btn-primary.mx-auto").click();
cy.get("#password").type("x");
cy.get("div > div > form > button").click();Selector .btn.btn-primary.mx-auto bergantung pada class yang rawan berubah, sementara rantai div > div > form > button rapuh terhadap perubahan struktur DOM. Ganti semua dengan data-cy yang disepakati tim.
Reliabilitas bukan keadaan statis. Pantau metrik suite dari waktu ke waktu — persentase lulus, durasi, jumlah flaky test:
Pass rate: 98%
Durasi rata-rata: 6m 12s
Flaky test minggu ini: 3Metrik Pass rate: 98% memberi gambaran kesehatan suite. Jika angka turun, jangan biarkan; tangani segera sebelum kepercayaan tim hilang.
Saat ada test yang kadang gagal tanpa alasan jelas, tandai dan kategorikan alih-alih menghapus diam-diam:
it.skip("masih diselidiki karena flaky", () => {
cy.visit("/analitik");
});it.skip(...) menonaktifkan sementara test sambil mencatat alasannya. Test yang dinonaktifkan dengan alasan jelas lebih baik daripada test yang gagal menyesatkan di setiap run.
Info
Keamanan dan stabilitas saling menguatkan: kredensial yang aman menjaga data tetap terkendali, dan data yang terkendali membuat test lebih deterministik. Perlakukan keduanya sebagai satu kebiasaan, bukan dua pekerjaan terpisah.
Episode 13 memperkuat fondasi kualitas: isolasi test data dan environment, kredensial aman lewat env vars, selector data-cy yang stabil, serta monitoring untuk menjaga reliabilitas suite dalam jangka panjang.
Inti yang harus dibawa pulang:
data-cy untuk selector yang stabil.Di episode 14 selanjutnya kita akan membahas CI/CD integration — integrasi Cypress ke GitHub Actions, GitLab CI, dan Jenkins, headless mode versus headed runs, upload artifacts video dan screenshot, serta paralelisasi dan penanganan flaky test.