Pengantar Pengujian Otomatis Plugin WordPress Dengan PHPUnit

Diterbitkan: 2022-03-10
Ringkasan cepat Anda benar-benar tidak ingin menghabiskan waktu berjam-jam untuk menguji secara manual setiap bagian dari plugin WordPress Anda untuk memastikan tidak ada yang rusak setiap kali Anda menerapkan versi baru — bukan? Dalam tutorial ini, Anda akan belajar cara menguji secara efisien dengan pengujian otomatis.

WordPress adalah sistem manajemen konten yang populer untuk membangun situs web karena mudah untuk memulai dan banyak tema dan plugin tersedia untuk memperluas set fiturnya. Alasan utama WordPress memiliki banyak plugin dan tema adalah karena mudah bagi pengembang dari tingkat mana pun untuk mulai membangunnya. Sebagian besar pengembangnya tidak berpengalaman, dan mereka tidak menulis tes untuk pekerjaan mereka, mungkin karena alasan berikut:

  • Tidak banyak diskusi yang terjadi tentang pengujian unit, jadi mereka mungkin tidak tahu bahwa pengujian itu mungkin.
  • Mereka tidak percaya pada nilai tes menulis untuk kode mereka, atau mereka pikir itu akan memperlambat mereka.
  • Mereka percaya bahwa pengujian untuk melihat apakah plugin atau tema mereka berfungsi di browser sudah cukup.

Dalam tutorial ini, kita akan mempelajari apa itu pengujian otomatis dan pentingnya, mengenal PHPUnit dan WP-CLI, mempelajari cara menulis pengujian dan, terakhir, menyiapkan pengujian otomatis berkelanjutan dengan Travis CI.

Kami memilih untuk menggunakan Travis CI karena menawarkan integrasi tanpa batas dengan GitHub; Anda tidak perlu pergi ke repositori Anda dan mengatur koneksi apa pun di antara mereka. Dan itu gratis untuk repositori publik. Tidak seperti pesaingnya, seperti Semaphore CI, GitLab CI dan CircleCI, Travis CI tidak menawarkan paket repositori pribadi gratis. Namun, tidak ada pesaingnya yang menawarkan integrasi tanpa batas dengan GitHub seperti yang dilakukannya.

Apa itu Pengujian Otomatis?

Menurut Wikipedia, pengujian otomatis, atau otomatisasi pengujian, adalah penggunaan perangkat lunak khusus (terpisah dari perangkat lunak yang diuji) untuk mengontrol pelaksanaan pengujian dan perbandingan hasil aktual dengan hasil yang diprediksi. Otomatisasi pengujian dapat mengotomatiskan beberapa tugas yang berulang tetapi perlu dalam proses pengujian formal yang sudah ada, atau melakukan pengujian tambahan yang akan sulit dilakukan secara manual.

Lebih banyak setelah melompat! Lanjutkan membaca di bawah ini

Ada beberapa jenis pengujian. Dari semuanya, pengujian unit adalah yang paling populer. Tes unit memverifikasi bahwa blok kode, fungsi, atau metode kelas melakukan apa yang dimaksudkan untuk dilakukan. Kami akan melakukan pengujian unit dalam tutorial ini.

Pengujian otomatis membantu mendeteksi bug sehingga tidak dapat masuk ke produksi. Tidak diragukan lagi, plugin yang dikodekan dan diuji akan membutuhkan waktu lebih lama untuk diselesaikan daripada yang tidak diuji. Namun, plugin yang dihasilkan akan mengandung lebih sedikit atau tidak ada bug.

Mari kita lihat contoh dunia nyata yang sederhana tentang bagaimana pengujian unit sangat berharga dan untuk apa kita dapat menggunakannya.

Plugin pembuatan prospek WordPress saya memiliki kelas OptinThemesRepository , dengan metode add() untuk menambahkan templat formulir keikutsertaan baru, dan metode get() untuk pengambilan templat formulir keikutsertaan.

Untuk memastikan add() dan get() berfungsi sebagaimana dimaksud sekarang dan di masa mendatang, saya menulis tes di bawah ini.

 public function testAddGetMethods() { $kick_optin_form = array( 'name' => 'Kick', 'optin_class' => 'kick', 'optin_type' => 'kick', 'screenshot' => MAILOPTIN_ASSETS_URL . 'img/kick.png' ); // add kick optin theme OptinThemesRepository::add($kick_optin_form); $result = OptinThemesRepository::get('kick'); $this->assertEquals($kick_optin_form, $result); }

Jika, di masa depan, tes ini mulai gagal, saya akan tahu ada masalah dan akan tahu fungsi yang tepat, metode kelas atau tempat di plugin saya di mana itu terjadi.

Manfaat Pengujian Otomatis

Sekarang setelah kita mengetahui apa itu pengujian otomatis, mari kita lihat lebih banyak manfaat.

Deteksi Bug Dini

Saat mengembangkan perangkat lunak, Anda dapat dengan mudah menemukan bug dengan alat pengujian otomatis. Ini dapat menghemat banyak waktu dan tenaga dalam melacak bug.

Kualitas Perangkat Lunak Lebih Tinggi

Seorang penguji dengan pengalaman bertahun-tahun dapat membuat kesalahan ketika mereka harus menyiapkan skrip tes manual membosankan yang sama berulang-ulang. Pengujian otomatis tidak hanya memberikan hasil yang akurat, tetapi juga menghemat waktu.

Pelaporan yang Mudah dan Kuat

Alat pengujian otomatis dapat melacak setiap skrip pengujian. Eksekusi setiap skrip pengujian dapat dilihat di log visual. Log visual, atau laporan, biasanya menampilkan jumlah skrip pengujian yang dijalankan dan statusnya (misalnya, lulus, gagal, atau dilewati), bug yang dilaporkan, dan petunjuk tentang cara memperbaiki bug.

Sebelum kita membahas cara menyiapkan dan menulis tes, mari buat plugin sederhana untuk digunakan sebagai studi kasus.

Membangun Plugin WordPress

Kami akan membuat plugin sederhana yang menampilkan tag meta verifikasi webmaster Google dan Bing di header front end WordPress. Plugin ini di-host di akun GitHub saya.

Kode untuk plugin di bawah ini akan masuk ke wp-meta-verify.php .

 <?php class WP_Meta_Verify { public function __construct() { add_action('wp_head', \[$this, 'header_code']); } public function header_code() { $google_code = get_option('wpmv_google_code'); $bing_code = get_option('wpmv_google_code'); echo $this->google_site_verification($google_code); echo $this->bing_site_verification($bing_code); } public function google_site_verification($code) { return "<meta name=\"google-site-verification\" content=\"$code\">"; } public function bing_site_verification($code) { return "<meta name=\"msvalidate.01\" content=\"$code\">"; } } new WP_Meta_Verify();

Anda mungkin memperhatikan bahwa kami tidak menyertakan halaman pengaturan di plugin, tempat Anda biasanya menyimpan kode verifikasi Google dan Bing. Saya melakukan ini dengan tujuan untuk membuatnya tetap sederhana dan untuk memusatkan perhatian kita pada apa yang paling penting. Namun, get_option('wpmv_google_code') dan get_option('wpmv_bing_code') berasumsi bahwa ada halaman pengaturan, dan mereka mengambil kode verifikasi dari sana.

Pengujian Unit Plugin WordPress

PHPUnit adalah alat pengujian de facto untuk PHP, sedangkan WP-CLI adalah antarmuka baris perintah resmi untuk WordPress.

Sebelum WP-CLI, menyiapkan pengujian PHPUnit untuk plugin WordPress sangat merepotkan. WP-CLI memiliki panduan hebat untuk mengaturnya; namun, kami masih akan membahas langkah-langkahnya di sini.

Instal PHPUnit

Untuk menginstal PHPUnit, jalankan perintah berikut.

 composer global require phpunit/phpunit:5.*

Catatan: Kami secara eksplisit menginstal 5.x karena itulah yang didukung WordPress ketika Anda menjalankan PHP 7 atau lebih tinggi, yang saya miliki di komputer saya. Instal PHPUnit 4.8 jika Anda menjalankan PHP versi 5.

Jalankan phpunit --version untuk mengonfirmasi bahwa itu telah diinstal.

Instal WP-CLI

Untuk menginstal WP-CLI, jalankan perintah berikut.

 curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x wp-cli.phar sudo mv wp-cli.phar /usr/local/bin/wp

Jalankan wp --info untuk mengonfirmasi pemasangannya.

Setelah menginstal PHPUnit dan WP-CLI, kami akan menggunakan yang terakhir untuk mengatur pengujian unit untuk plugin.

Siapkan Uji Unit Plugin

Ubah direktori terminal Anda ke root instalasi WordPress Anda, dan jalankan perintah di bawah ini untuk menghasilkan file uji plugin.

 wp scaffold plugin-tests wp-meta-verify

Di bawah ini adalah seperti apa struktur plugin setelah perintah di atas menghasilkan file uji.

 |-bin/ |----install-wp-tests.sh |-tests/ |----bootstrap.php |----test-sample.php |-.travis.yml |-phpcs.xml.dist |-phpunit.xml.dist |-wp-meta-verify.php

Catatan: Secara default, perintah wp scaffold plugin-tests menghasilkan file konfigurasi Travis CI. Anda dapat menentukan flag --ci untuk menghasilkan file konfigurasi untuk layanan CI yang Anda gunakan, seperti: wp scaffold plugin-tests --c gitlab . Pada saat penulisan, hanya Travis CI, CircleCI, dan GitLab CI yang didukung.

Ubah direktori terminal Anda ke direktori plugin Anda, dan jalankan skrip instalasi:

 cd path-to-wordpress-plugin
 bin/install-wp-tests.sh wordpress_test root '' localhost latest

Jika Anda seperti saya, maka nama pengguna MySQL Anda bukan root , dan kata sandinya tidak kosong. Sebagai contoh, anggaplah nama pengguna adalah homestead dan kata sandinya adalah secret . Anda akan menjalankan skrip instalasi seperti ini:

 bin/install-wp-tests.sh wordpress_test homestead 'secret' localhost latest

Jalankan perintah phpunit untuk menjalankan tes default di tests/test-sample.php .

Hasil tes PHPUnit
Hasil tes PHPUnit (Pratinjau besar)

Tulis Tes Plugin Kami

Buat file test-wp-meta-verify.php di folder tests . Ini akan berisi pengujian plugin kami dengan kelas setUp berikut.

 <?php class WP_Meta_VerifyTest extends WP_UnitTestCase { public function setUp() { parent::setUp(); $this->class_instance = new WP_Meta_Verify(); } public function test_google_site_verification() { } public function test_bing_site_verification() { } }

Perlu dicatat bahwa agar suatu metode dianggap sebagai pengujian unit, metode tersebut harus diawali dengan test . Praktik terbaik adalah menambahkan akhiran Test ke setiap kelas tes, meskipun itu tidak wajib. Lihat WP_Meta_VerifyTest .

Bingung tentang apa yang dilakukan setUp() ? Ketahuilah bahwa PHPUnit menjalankannya sekali sebelum setiap metode pengujian (dan pada instance baru) dari kelas kasus uji. Ada juga tearDown() , tetapi dijalankan setelah setiap metode pengujian. Ada juga setUpBeforeClass() dan tearDownAfterClass tearDownAfterClass() , yang masing-masing berjalan sebelum dan sesudah setiap test case. Kasus uji pada dasarnya adalah kelas yang berisi sejumlah metode pengujian. Lihat Buku Pegangan WordPress dan dokumentasi PHPUnit untuk informasi lebih lanjut.

Dari kelas di atas, cukup jelas kita akan menulis tes untuk metode google_site_verification dan bing_site_verification dari kelas plugin kita.

 public function test_google_site_verification() { $meta_tag = $this->class_instance->google_site_verification('B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g'); $expected = '<meta name="google-site-verification" content="B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g">'; $this->assertEquals($expected, $meta_tag); }
 public function test_bing_site_verification() { $meta_tag = $this->class_instance->bing_site_verification('B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g'); $expected = '<meta name="msvalidate.01" content="B6wFaCRbzWE42SyxSvKUOyyPxZfJCb5g">'; $this->assertEquals($expected, $meta_tag); }

Pada dasarnya, pengujian akan memastikan bahwa kedua metode mengembalikan tag meta yang benar ketika kode verifikasi webmaster Google dan Bing diteruskan kepada mereka sebagai argumen.

Jalankan phpunit , dan Anda akan melihat output yang mirip dengan tangkapan layar di bawah ini.

keluaran PHPUnit
Output PHPUnit (Pratinjau besar)

Pengujian Otomatis Berkelanjutan Dengan Travis CI

Travis CI adalah layanan integrasi berkelanjutan terdistribusi yang dihosting yang digunakan untuk membangun dan menguji proyek perangkat lunak yang dihosting di GitHub.

Untuk menggunakan Travis CI, oleh karena itu, kita harus memublikasikan plugin kita di GitHub. Silakan dan lakukan itu sekarang. Jangan ragu untuk merujuk ke milik saya.

Berkat WP-CLI, kami telah menyiapkannya di plugin kami, berkat file .travis.yml .

Saya ingin menyebutkan bahwa saya tidak mematuhi standar pengkodean WordPress, melainkan pada Rekomendasi Standar PHP, dan plugin saya memerlukan setidaknya PHP 5.4. Agar build saya tidak gagal, saya harus mengganti matriksnya dengan yang berikut di file .travis.yml .

 matrix: include: - php: 7.1 env: WP_VERSION=latest - php: 7.0 env: WP_VERSION=latest - php: 5.6 env: WP_VERSION=latest - php: 5.6 env: WP_VERSION=trunk - php: 5.5 env: WP_VERSION=latest - php: 5.4 env: WP_VERSION=latest

Buka Travis CI dan masuk dengan akun GitHub Anda. Ikuti panduan di layar untuk menambahkan repositori GitHub Anda.

Setelah sinkronisasi akun dengan GitHub, gulir ke repositori plugin Anda dan aktifkan.

Menyiapkan repositori Travis CI
Menyiapkan repositori Travis CI (Pratinjau besar)

Saat berikutnya Anda membuat perubahan kode dan push ke GitHub, build akan dipicu di Travis CI.

Hasil pembuatan Travis CI (Pratinjau besar)

Saya telah menyediakan hasil pembuatan yang berhasil untuk kesenangan menonton Anda.

Membungkus

Bukan rahasia lagi bahwa banyak pengembang, bukan hanya WordPress, tidak menulis tes untuk proyek mereka karena mereka tidak mengetahuinya. Bahkan beberapa dari kita yang berpengalaman dan mahir ternyata tidak melakukannya karena menganggapnya membuang-buang waktu.

Memang, menyiapkan pengujian otomatis bisa membosankan dan memakan waktu. Namun demikian, ini adalah investasi yang akan memastikan bahwa sedikit atau tidak ada bug yang menyusup ke dalam perangkat lunak Anda, sehingga menghemat waktu dan sumber daya (termasuk keuangan) yang harus dikeluarkan oleh bug dalam perangkat lunak Anda.

Selalu tulis tes sebelum mengimplementasikan suatu fitur, agar Anda tidak lupa atau merasa malas untuk melakukannya setelah fitur tersebut diimplementasikan.

Saya harap Anda sekarang menyadari pentingnya tes menulis dan bagaimana mulai menulisnya untuk plugin WordPress Anda sendiri.

Jika Anda memiliki pertanyaan atau komentar, beri tahu saya di bagian komentar.