CARDS School V3 - QA & Test Automation
QA profesional di platform manajemen sekolah
- 847+
- Test case otomatis
- 64
- File spec
- 700+
- Lembaga pengguna CARDS
Ringkasan
CARDS adalah ekosistem manajemen sekolah yang dipakai 700+ lembaga pendidikan: dashboard web, aplikasi untuk orang tua, aplikasi sekolah, dan aplikasi POS beserta dashboard web-nya sendiri. Sebagai satu-satunya QA engineer di tim, saya memegang standar cakupan pengujian dan pelaporan bug untuk semuanya.
Peran saya mencakup perancangan test, manual testing, regression, exploratory testing, dan UAT, ditambah validasi bug, automation end-to-end, dan mengoordinasi intern QA. Automation difokuskan pada rilis mayor terbaru dan tetap tertelusur ke dokumentasi test case.
Demi menjaga kerahasiaan, studi kasus ini tidak memuat URL internal, kredensial, data pengguna, maupun kode dari repo perusahaan. Kode di bawah bersifat ilustratif - ditulis ulang secara generik untuk menunjukkan pola yang saya pakai, bukan sumber production.
Tujuan
Menjaga ekosistem CARDS siap rilis di web, mobile, dan POS lewat perancangan test, manual testing, dan automation yang dipetakan satu-satu ke dokumentasi test case.
Cakupan pengujian
CARDS School V3 - automation (847+ case, 64 spec)
- Onboarding dan autentikasi
- Pengaturan Academic Year
- Pengaturan Subject
- Pengaturan Grade Level
- Pengaturan Tag
Dashboard web Cazh POS - CPA V2 (86 case)
- Login
- Dashboard
- Employee
Manual testing di seluruh ekosistem
- Keuangan: penerimaan siswa baru, tagihan, tunggakan, donasi, tabungan, top-up & penarikan saldo
- Modul presensi
- Regression, UI, exploratory, dan responsive testing di web, mobile & POS
- Skenario UAT disiapkan dan dijalankan sebelum rilis
Strategi pengujian
- Page Object Model memisahkan selector dan action dari assertion.
- Fixture data-driven memberi tiap skenario input-nya sendiri.
- cy.intercept memverifikasi perilaku request dan response, bukan cuma UI yang tampil.
- cy.session membuat sesi login sekali saja, tidak diulang di tiap test.
- Setiap test membawa test case ID-nya sendiri, sehingga suite tetap tertelusur ke Zephyr.
- Mochawesome menghasilkan laporan eksekusi. Suite dijalankan secara lokal, bukan di CI.
Arsitektur
- Dokumentasi test case (Zephyr)tiap case punya ID
- Spec + Page ObjectID ada di nama test
- Aplikasi yang diujidashboard web / POS
- Laporan Mochawesomedijalankan lokal
Implementasi
class SettingsPage {
elements = {
createButton: () => cy.get('[data-testid="create"]'),
nameField: () => cy.get('[data-testid="name"]'),
saveButton: () => cy.get('[data-testid="save"]'),
toast: () => cy.get('[data-testid="toast"]'),
};
visit() { cy.visit(`${Cypress.env('baseUrl')}/settings`); return this; }
create(name) {
this.elements.createButton().click();
this.elements.nameField().type(name);
this.elements.saveButton().click();
return this;
}
assertSaved() { this.elements.toast().should('contain', 'Saved'); }
}beforeEach(() => {
cy.session('qa-user', () => {
cy.request('POST', '/api/login', Cypress.env('creds'))
.its('body.token')
.then((t) => window.localStorage.setItem('token', t));
});
});
it('TC-AY-012 create a new academic year', () => {
cy.intercept('POST', '/api/academic-years').as('create');
settingsPage.visit().create('2026/2027');
cy.wait('@create').its('response.statusCode').should('eq', 201);
});// fixtures/subjects.json
// [ { "id": "TC-SUB-001", "name": "Mathematics", "valid": true },
// { "id": "TC-SUB-002", "name": "", "valid": false } ]
cy.fixture('subjects').then((rows) => {
rows.forEach((row) => {
it(`${row.id} ${row.valid ? 'accepts' : 'rejects'} the name`, () => {
subjectPage.create(row.name);
row.valid ? subjectPage.assertSaved() : subjectPage.assertError();
});
});
});Hasil
847+
Test case otomatis
CARDS School V3, 64 file spec
86
Test case otomatis
Dashboard web Cazh POS (CPA V2)
700+
Lembaga di platform ini
60+
Intern QA yang dikoordinasi