Semua proyek
Pekerjaan profesional · PT. Cazh Teknologi Inovasi

CARDS School V3 - QA & Test Automation

QA profesional di platform manajemen sekolah

CypressPage Object ModelData-driven fixturescy.interceptcy.sessionMochawesomeJira & Zephyr
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

  1. Dokumentasi test case (Zephyr)tiap case punya ID
  2. Spec + Page ObjectID ada di nama test
  3. Aplikasi yang diujidashboard web / POS
  4. Laporan Mochawesomedijalankan lokal

Implementasi

Page Object dengan selector generik membuat spec tetap mudah dibaca dan stabil.Contoh ilustratif - bukan kode production
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'); }
}
cy.session login sekali; nama test membawa test case ID-nya untuk ketertelusuran.Contoh ilustratif - bukan kode production
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);
});
Satu fixture menggerakkan kasus positif dan negatif dari satu tabel data.Contoh ilustratif - bukan kode production
// 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