Pengantar Cypress
π§ͺ Pengantar Cypress
1. π Definisi: Apa itu Cypress?
Cypress adalah framework end-to-end testing berbasis JavaScript yang digunakan untuk mengotomatisasi pengujian aplikasi web langsung di browser nyata.
Berbeda dengan Selenium yang berinteraksi melalui remote driver, Cypress berjalan langsung di dalam browser, sehingga lebih cepat dan terintegrasi dengan baik dengan DOM, jaringan, dan API.
βοΈ Posisi Cypress dalam Pengujian
Cypress berada pada tahap pengujian antarmuka (UI) dan pengujian integrasi front-end, berfokus untuk:
- Menguji alur kerja pengguna (user flow)
- Memastikan elemen UI berfungsi sesuai ekspektasi
- Menguji integrasi API di sisi klien
2. π Keunggulan Cypress
Cypress memiliki beberapa fitur pembeda dibanding framework lain:
π a. Arsitektur Modern
- Cypress berjalan di dalam browser yang sama dengan aplikasi yang diuji
- Tidak menggunakan WebDriver eksternal seperti Selenium, sehingga pengujian berjalan lebih cepat dan stabil
π b. Test Runner Interaktif
- Menampilkan hasil pengujian secara real-time
- Setiap langkah uji (klik, input, visit) ditampilkan di UI Test Runner
βͺ c. Time Travel Debugging
- Cypress menyimpan screenshot otomatis di setiap langkah uji, sehingga kamu dapat βmelihat kembaliβ apa yang terjadi saat pengujian gagal
π§ d. Built-in Waiting
- Cypress secara otomatis menunggu elemen muncul sebelum melanjutkan langkah berikutnya, mengurangi kebutuhan penggunaan
wait()manual
3. βοΈ Instalasi Cypress via NPM/Yarn
Sebelum mulai, pastikan kamu sudah menginstal Node.js dan npm.
π§ Langkah Instalasi
- Inisialisasi proyek Node.js
1 2 3
mkdir cypress-demo cd cypress-demo npm init -y
- Instal Cypress
1
npm install cypress --save-dev
- Jalankan Cypress pertama kali
1
npx cypress open
β Cypress akan membuka GUI Test Runner dan otomatis membuat struktur folder:
1
2
3
4
5
6
cypress/
βββ e2e/
β βββ example.cy.js
βββ fixtures/
βββ support/
cypress.config.js
4. π§© Struktur Tes: Anatomi File Tes
Cypress menggunakan gaya pengujian Mocha dan Chai, dengan struktur dasar sebagai berikut:
1
2
3
4
5
describe('Nama Fitur yang Diuji', () => {
it('Deskripsi langkah pengujian', () => {
// kode pengujian di sini
});
});
π§± Penjelasan:
describe()β Mengelompokkan serangkaian test caseit()β Mendefinisikan satu test casecyβ Objek global Cypress untuk berinteraksi dengan browser
5. π§ Perintah Dasar Cypress
| Perintah | Fungsi |
|---|---|
cy.visit('url') | Membuka halaman web |
cy.get('selector') | Mencari elemen DOM |
cy.type('text') | Mengetik teks ke input |
cy.click() | Mengklik elemen |
cy.contains('text') | Mencari elemen berdasarkan teks |
cy.url() | Mendapatkan URL aktif |
cy.should('contain', 'value') | Verifikasi hasil |
π§ͺ Contoh
1
2
3
4
cy.visit('https://example.com');
cy.get('#username').type('admin');
cy.get('#password').type('12345');
cy.get('#login-button').click();
6. π» Studi Kasus: Login Otomatis ke saucedemo.com
π Tujuan
Melakukan pengujian login berhasil dan login gagal pada situs demo https://www.saucedemo.com.
π Lokasi File
Buat file baru di:
1
cypress/e2e/saucedemo_login.cy.js
π§ Kode Uji
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
describe('Testing Login Page SauceDemo', () => {
// Dilakukan sebelum setiap test case
beforeEach(() => {
cy.visit('https://www.saucedemo.com/');
});
it('β
Login Berhasil dengan Kredensial Valid', () => {
cy.get('#user-name').type('standard_user');
cy.get('#password').type('secret_sauce');
cy.get('#login-button').click();
// Verifikasi berhasil login
cy.url().should('include', '/inventory.html');
});
it('β Login Gagal dengan Password Salah', () => {
cy.get('#user-name').type('standard_user');
cy.get('#password').type('wrong_password');
cy.get('#login-button').click();
// Verifikasi pesan error
cy.get('.error-message-container')
.should('contain', 'Username and password do not match any user');
});
});
π§Ύ Cara Menjalankan Tes:
1
npx cypress open
Lalu pilih file saucedemo_login.cy.js untuk menjalankannya.
7. π§Ύ Test Scenario dan Test Case
π Test Scenario
| ID | Deskripsi | Tujuan | | β | β | β | | TS-001 | Verifikasi login berhasil dengan kredensial valid | Pastikan login sukses ke halaman utama | | TS-002 | Verifikasi login gagal dengan password salah | Pastikan sistem menampilkan pesan error | | TS-003 | Verifikasi form login kosong | Pastikan validasi input muncul |
π§ͺ Test Case Detail
β Test Case 1: Login Berhasil
| Atribut | Nilai | | β | β | | ID | TC-001 | | Deskripsi | Login menggunakan username dan password valid | | Langkah Uji | 1. Buka https://www.saucedemo.com/
2. Isi username standard_user
3. Isi password secret_sauce
4. Klik tombol Login | | Hasil Diharapkan | Berhasil masuk ke halaman inventory.html | | Status | β
Passed |
β Test Case 2: Login Gagal
| Atribut | Nilai | | β | β | | ID | TC-002 | | Deskripsi | Login dengan password salah | | Langkah Uji | 1. Isi username standard_user
2. Isi password wrong_pass
3. Klik tombol Login | | Hasil Diharapkan | Tampil pesan error Epic sadface: Username and password do not match any user in this service | | Status | β
Passed |
8. π§© Contoh Tambahan: Pengujian Produk & Logout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
describe('Fitur Produk & Logout', () => {
beforeEach(() => {
cy.visit('https://www.saucedemo.com/');
cy.get('#user-name').type('standard_user');
cy.get('#password').type('secret_sauce');
cy.get('#login-button').click();
});
it('π Menambahkan Produk ke Keranjang', () => {
cy.get('.btn_inventory').first().click();
cy.get('.shopping_cart_link').click();
cy.get('.inventory_item_name').should('be.visible');
});
it('πͺ Logout dari Aplikasi', () => {
cy.get('#react-burger-menu-btn').click();
cy.get('#logout_sidebar_link').click();
cy.url().should('eq', 'https://www.saucedemo.com/');
});
});
9. π‘ Kesimpulan
Cypress adalah framework modern untuk end-to-end testing berbasis JavaScript yang:
- Menyediakan test runner interaktif
- Menjalankan pengujian cepat dan stabil
- Memiliki fitur time travel debugging
- Dapat meniru perilaku pengguna sebenarnya di browser
Dengan Cypress, tim pengembang dapat memastikan fungsi utama aplikasi web bekerja sesuai ekspektasi dengan efisiensi tinggi.