Home » Software Quality Assurance » Implementasi Automated Testing Framework Pada Marketplace Shopee dan Tokopedia Menggunakan PHPUnit dan FitNesse

Start here

Implementasi Automated Testing Framework Pada Marketplace Shopee dan Tokopedia Menggunakan PHPUnit dan FitNesse

Pada kesempatan kali ini, Penulis akan membahas hasil automated testing pada fungsi pembacaan detail kartu kredit/debit pada aplikasi marketplace Shopee dan Tokopedia menggunakan PHPUnit (bahasa pemrograman PHP) dan FitNesse (bahasa pemrograman Java).

Pengetesan dilakukan pada sample code yang Penulis kembangkan sendiri pada masing-masing bahasa dikarenakan pada aplikasi Android dari kedua marketplace tersebut (Shopee dan Tokopedia) tidak dapat dilakukan pengetesan kecuali aplikasi masih dalam tahap pengembangan. Kode yang ditulis merupakan dua buah class sebagai berikut:

  • Class CheckName (PHP) atau Checkname (Java): Class untuk menerima nama pemilik kartu kredit/debit dan mengembalikan value berupa integer jumlah suku kata pada nama.
  • Class CheckCC (PHP) atau Checkcc (Java): Class untuk menerima nomor kartu kredit/debit dan mengembalikan value berupa integer jumlah pecahan nomor kartu.

PHPUnit

PHPUnit merupakan sebuah framework unit testing untuk bahasa pemrograman PHP dan merupakan turunan dari arsitektur xUnit untuk framework-framework unit testing yang berasal dari SUnit dan menjadi populer bersamaan dengan JUnit. PHPUnit dikembangkan oleh Sebastian Bergmann dan pengembangannya disimpan di GitHub.

Pra Pengujian

Pemakaian PHPUnit membutuhkan instalasi terlebih dahulu menggunakan Composer dan setelahnya pun perlu dilakukan pengetikan kode (class) untuk menjalankan test pada class-class yang akan diuji (Penguji mengikuti panduan pada situs ini). Berikut adalah potongan kode class yang akan diuji:

  • Class CheckName
class CheckName {
    public function countName($nm) {
        return count(explode(" ", $nm));
    }
}

  • Class CheckCC
class CheckCC {
    public function countCCNum($cc) {
        return count(explode(" ", $cc));
    }
}

Pengujian dapat dilakukan dengan menentukan test case dan expected value terlebih dahulu. Pada kali ini, Penulis akan mencoba menentukan test case pada masing-masing class sebagai berikut:

  • Class CheckName: Nama yang akan diberikan adalah “Fachri Veryawan Mahkota”.
  • Class CheckCC: Nomor kartu yang akan diberikan adalah “1234 5678 9012 3456”

dan expected value yang ditentukan oleh Penulis adalah sebagai berikut:

  • Class CheckName: assertGreaterThan(2), berarti value yang diberikan harus sama atau lebih dari 2. Pada kasus ini, diharapkan nama yang diberikan memiliki minimal dua suku kata sebagai syarat dasar nama depan dan nama belakang.
  • Class CheckCC: assertEquals(4), berarti value yang diberikan harus sama dengan 4. Pada kasus ini, diharapkan pada nomor kartu yang diberikan terdapat empat bagian nomor kartu sebagai syarat keabsahan kartu tersebut.

Maka, dari test case dan expected value dihasilkan kode untuk pengujian sebagai berikut:

use PHPUnit\Framework\TestCase;

require_once "CheckCC.php";

require_once "CheckName.php";

class UnitTest extends TestCase {
   public function testCC() {
       $CCC = new CheckCC();
       $TestCC = "1234 5678 9012 3456";
       $CCCount = $CCC->countCCNum($TestCC);
       $this->assertEquals(4, $CCCount);
    }

   public function testName() {
       $CN = new CheckName();
       $TestName = "Fachri Veryawan Mahkota";
       $NCount = $CN->countName($TestName);
       $this->assertGreaterThan(2, $NCount);
   }
}

Pasca Pengujian

Setelah kita jalankan class UnitTest, akan didapatkan hasil sebagai berikut:

PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

.. 2 / 2 (100%)

Time: 00:00.043, Memory: 4.00 MB

OK (2 tests, 2 assertions)

Dari hasil tersebut, dapat disimpulkan:

  1. Terdapat dua fungsi test yang berhasil diuji dari total dua fungsi test yang diberikan.
  2. Pengujian memakan waktu 0.043 detik.
  3. Pengujian memakan memori sistem sebanyak empat megabyte.
  4. Tidak terdapat error pada dua assertion dari kedua fungsi test, menandakan keluaran fungsi sesuai dengan expected value.

Pengujian dengan Test Case Berbeda

Jika terdapat test case yang menimbulkan hasil yang tidak sesuai dengan expected value — pada kasus ini misalkan nama hanya mengandung satu suku kata (“Fachri”) — maka akan didapatkan hasil sebagai berikut:

PHPUnit 9.4.2 by Sebastian Bergmann and contributors.

.F 2 / 2 (100%)

Time: 00:00.076, Memory: 4.00 MB

There was 1 failure:

1) UnitTest::testName
Failed asserting that 1 is greater than 2.

D:\latihan-php-unit\UnitTest.php:24

FAILURES!
Tests: 2, Assertions: 2, Failures: 1.

Pada hasil pengujian terlihat fungsi pengujian yang memberikan error, termasuk expected value dan keluaran yang diberikan oleh fungsi tersebut. PHPUnit pun menampilkan direktori dari program pengujian dan jumlah failure yang terjadi pada saat pengujian.

FitNesse

FitNesse merupakan web server, wiki, dan automated testing tool untuk perangkat lunak yang berbasis pada Framework for Integrated Testing milik Ward Cunningham dan dirancang untuk mendukung acceptance testing.

Pra Pengujian

Instalasi FitNesse membutuhkan terpasangnya JDK terlebih dahulu dan mengunduh file .jar dari FitNesse yang tertera pada halaman ini (Penulis menggunakan video YouTube ini sebagai referensi). Berikut adalah potongan kode class yang akan diuji:

  • Class Checkname
import java.util.ArrayList;
import java.util.Arrays;

public class Checkname {
    private String name;
    public void setName(String name) {
        this.name = name;
    }

    public String result() {
        ArrayList<String> spl = new ArrayList<String>(Arrays.asList(name.split(" ")));
        if (spl.size() < 2) {
            return "Nama tidak valid";
        }
        else {
            return "Nama valid";
        }
    }
}
  • Class Checkcc
import java.util.ArrayList;
import java.util.Arrays;

public class Checkcc {
    private String cc;
    public void setCc(String cc) {
        this.cc = cc;
    }

    public String result() {
        ArrayList<String> spl = new ArrayList<String>(Arrays.asList(cc.split(" ")));
        if (spl.size() != 4) {
            return "Nomor kartu tidak valid";
        }
        else {
            return "Nomor kartu valid";
        }
    }
}

Seperti pada PHPUnit, pengujian dapat dilakukan dengan menentukan test case dan expected value terlebih dahulu. Test case yang ditentukan pada masing-masing class adalah sebagai berikut:

  • Class Checkname: Nama yang akan diberikan adalah “Fachri Veryawan Mahkota”.
  • Class Checkcc: Nomor kartu yang akan diberikan adalah “1234 5678 9012 3456”

dan expected value yang ditentukan adalah sebagai berikut:

  • Class Checkname: Value yang diberikan harus sama atau lebih dari 2. Pada kasus ini, diharapkan nama yang diberikan memiliki minimal dua suku kata sebagai syarat dasar nama depan dan nama belakang.
  • Class Checkcc: Value yang diberikan harus sama dengan 4. Pada kasus ini, diharapkan pada nomor kartu yang diberikan terdapat empat bagian nomor kartu sebagai syarat keabsahan kartu tersebut.

Maka berdasarkan kedua hal diatas, berikut adalah script/tabel yang digunakan pada FitNesse untuk pengujian:

!*< Hidden
!define TEST_SYSTEM {slim}
*!

!path D:\Fitnesse

|Checkname|
|name|result?|
|Fachri Veryawan Mahkota|Nama valid|

|Checkcc|
|cc|result?|
|1234 5678 9012 3456|Nomor kartu valid|

image host

Pasca Pengujian

Berikut adalah hasil dari pengujian oleh FitNesse:

image host

Dapat dilihat bahwa ada dua buah assertion degan hasil yang sesuai dengan ekspektasi.

Penutup

Sekian penjelasan dari Penulis mengenai implementasi Automated Testing Framework. Bila ada pertanyaan, silahkan tulis pada kolom komentar dan Penulis akan mencoba menjawab dengan kemampuan Penulis. Terima kasih.


Leave a comment

Your email address will not be published. Required fields are marked *