Pengantar Pengujian Otomatis Plugin WordPress Dengan PHPUnit
Diterbitkan: 2022-03-10WordPress 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.
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
.
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.
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.
Saat berikutnya Anda membuat perubahan kode dan push ke GitHub, build akan dipicu di Travis CI.
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.