Belajar Cypress - Security & Test Stability
Episode 13 of 23

Belajar Cypress - Security & Test Stability

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.

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

Pendahuluan

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.

Isolasi Test Data dan Environment

Environment Test Terpisah

Jangan pernah menjalankan test terhadap production. Siapkan environment khusus yang datanya bisa direset tanpa risiko:

Menjalankan test ke environment staging
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.

Data yang Tidak Bocor Antar Test

Isolasi juga berarti data di antara test tidak saling memengaruhi. Gunakan data unik per test dan selalu cleanup:

JSData unik per test
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.

Menjalankan Test dengan Secure Credentials

Jangan Menaruh Secret di Kode

Kredensial tidak boleh tertulis di spec file yang masuk repositori. Simpan di environment dan baca lewat Cypress.env:

Menyimpan kredensial di environment
export CYPRESS_USER_PASSWORD='rahasia-yang-sangat-aman'
npx cypress run

CYPRESS_USER_PASSWORD disimpan di environment CI atau mesin lokal, bukan di repositori. Akses di test dengan Cypress.env:

JSMembaca secret dari 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.

Kredensial Dummy untuk Test

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.

Menghindari Flakiness dengan Selector Stabil

Aturan Selector

Stabilitas test sangat ditentukan oleh selector. Prioritaskan yang tidak berubah saat pengembangan:

JSSelector stabil dengan data-cy
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.

Menghindari Selector Rapuh

Beberapa pola harus dihindari:

JSPola selector yang rapuh
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.

Monitoring dan Menjaga Reliabilitas

Pantau Kecenderungan

Reliabilitas bukan keadaan statis. Pantau metrik suite dari waktu ke waktu — persentase lulus, durasi, jumlah flaky test:

Metrik suite yang dipantau
Pass rate: 98%
Durasi rata-rata: 6m 12s
Flaky test minggu ini: 3

Metrik Pass rate: 98% memberi gambaran kesehatan suite. Jika angka turun, jangan biarkan; tangani segera sebelum kepercayaan tim hilang.

Menandai Test yang Rapuh

Saat ada test yang kadang gagal tanpa alasan jelas, tandai dan kategorikan alih-alih menghapus diam-diam:

JSMenandai test yang sedang diselidiki
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.

Penutup

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:

  • Jalankan test di environment khusus, bukan production.
  • Gunakan data unik per test untuk mencegah tabrakan.
  • Simpan kredensial di environment, bukan di repositori.
  • Prefer data-cy untuk selector yang stabil.
  • Pantau pass rate dan flakiness secara rutin; tandai test yang rapuh.

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.

Belajar Cypress - Security & Test Stability | Belajar Cypress