PHPUnit ile WordPress Eklentilerinin Otomatik Test Edilmesine Giriş

Yayınlanan: 2022-03-10
Kısa özet ↬ Her yeni sürümü dağıttığınızda hiçbir şeyin bozulmadığından emin olmak için WordPress eklentinizin her bölümünü manuel olarak test etmek için saatler harcamak istemezsiniz, değil mi? Bu öğreticide, otomatikleştirilmiş testlerle verimli bir şekilde nasıl test edeceğinizi öğreneceksiniz.

WordPress, web siteleri oluşturmak için popüler bir içerik yönetim sistemidir, çünkü başlaması kolaydır ve özellik setini genişletmek için tonlarca tema ve eklenti mevcuttur. WordPress'in çok sayıda eklenti ve temaya sahip olmasının ana nedeni, herhangi bir seviyedeki geliştiricinin bir tane oluşturmaya başlamasının kolay olmasıdır. Geliştiricilerinin çoğu deneyimli değildir ve muhtemelen aşağıdaki nedenlerden dolayı çalışmaları için testler yazmazlar:

  • Birim testi hakkında çok fazla tartışma yoktur, bu nedenle testin mümkün olduğunu bile bilmiyor olabilirler.
  • Kodları için test yazmanın değerine inanmıyorlar veya bunun onları yavaşlatacağını düşünüyorlar.
  • Eklentilerinin veya temalarının tarayıcıda çalışıp çalışmadığını test etmenin yeterli olduğuna inanıyorlar.

Bu eğitimde, otomatik testin ne olduğunu ve önemini öğreneceğiz, PHPUnit ve WP-CLI'yi tanıyacağız, nasıl test yazılacağını öğreneceğiz ve son olarak Travis CI ile sürekli otomatik test ayarlayacağız.

GitHub ile sorunsuz entegrasyon sunduğu için Travis CI'yi kullanmayı tercih ediyoruz; deponuza gitmeniz ve aralarında herhangi bir bağlantı kurmanız gerekmez. Ve halka açık depolar için ücretsizdir. Semaphore CI, GitLab CI ve CircleCI gibi rakiplerinin aksine Travis CI, ücretsiz bir özel depo planı sunmuyor. Ancak rakiplerinden hiçbiri GitHub ile olduğu gibi sorunsuz entegrasyon sunmuyor.

Otomatik Test Nedir?

Wikipedia'ya göre, otomatik test veya test otomasyonu, testlerin yürütülmesini ve gerçek sonuçların tahmin edilen sonuçlarla karşılaştırılmasını kontrol etmek için özel yazılımın (test edilen yazılımdan ayrı) kullanılmasıdır. Test otomasyonu, halihazırda yürürlükte olan resmi bir test sürecinde tekrarlayan ancak gerekli bazı görevleri otomatikleştirebilir veya manuel olarak yapılması zor olacak ek testler gerçekleştirebilir.

Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓

Birkaç test türü vardır. Hepsinden, birim testi en popüler olanıdır. Birim testleri, bir kod bloğunun, işlevin veya sınıf yönteminin amaçlanan şeyi yaptığını doğrular. Bu eğitimde birim testi yapacağız.

Otomatik test, üretime geçmemeleri için hataları tespit etmeye yardımcı olur. Şüphesiz, kodlanmış ve test edilmiş bir eklentinin tamamlanması, test edilmemiş bir eklentiden daha uzun sürer. Ancak, ortaya çıkan eklenti daha az hata içerecek veya hiç hata içermeyecektir.

Birim testlerinin ne kadar değerli olduğuna ve bunları ne için kullanabileceğimize dair gerçek dünyadan basit bir örnek görelim.

WordPress müşteri adayı oluşturma eklentimde, yeni katılım formu şablonları eklemek için bir add() yöntemi ve bir katılım formu şablonunun alınması için bir get() yöntemi olan bir OptinThemesRepository sınıfı bulunur.

Hem add() hem de get() 'in şimdi ve gelecekte amaçlandığı gibi çalışmasını sağlamak için aşağıdaki testi yazdım.

 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); }

Gelecekte, bu test başarısız olmaya başlarsa, bir sorun olduğunu bilirdim ve eklentimde meydana geldiği tam işlevi, sınıf yöntemini veya noktayı bilirdim.

Otomatik Testin Faydaları

Artık otomatik testin ne olduğunu bildiğimize göre, daha fazla fayda görelim.

Erken Hata Tespiti

Yazılım geliştirirken, otomatikleştirilmiş test araçlarıyla hataları kolayca bulabilirsiniz. Bu, hataların izlenmesinde çok fazla zaman ve çaba tasarrufu sağlayabilir.

Daha Yüksek Yazılım Kalitesi

Uzun yıllara dayanan deneyime sahip bir test uzmanı, aynı sıkıcı manuel test senaryolarını tekrar tekrar hazırlamak zorunda kaldığında hata yapabilir. Otomatik testler yalnızca doğru sonuçlar vermekle kalmaz, aynı zamanda zamandan da tasarruf sağlar.

Kolay ve Güçlü Raporlama

Otomatik test araçları, her bir test komut dosyasını izleyebilir. Her test komut dosyasının yürütülmesi görsel günlüklerde görülebilir. Görsel günlük veya rapor, genellikle yürütülen test komut dosyalarının sayısını ve durumlarını (örneğin, başarılı, başarısız veya atlandı), bildirilen hataları ve hataların nasıl düzeltileceğine ilişkin ipuçlarını görüntüler.

Testlerin nasıl kurulacağına ve yazılacağına geçmeden önce, vaka çalışması olarak kullanmak için basit bir eklenti oluşturalım.

WordPress Eklentisi Oluşturma

WordPress ön ucunun başlığında Google ve Bing web yöneticisi doğrulama meta etiketlerini görüntüleyen basit bir eklenti oluşturacağız. Eklenti GitHub hesabımda barındırılıyor.

Aşağıdaki bu eklentinin kodu wp-meta-verify.php dosyasına girecektir.

 <?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();

Eklentiye, genellikle Google ve Bing doğrulama kodunu kaydedeceğiniz bir ayarlar sayfası eklemediğimizi fark edebilirsiniz. Bunu basit tutmak ve dikkatimizi en önemli şeye odaklamak için bilerek yaptım. Ancak, get_option('wpmv_google_code') ve get_option('wpmv_bing_code') bir ayarlar sayfası olduğunu varsayar ve doğrulama kodlarını oradan alır.

Bir WordPress Eklentisini Test Etmek

PHPUnit, PHP için fiili test aracı iken WP-CLI, WordPress için resmi komut satırı arayüzüdür.

WP-CLI'den önce, WordPress eklentileri için PHPUnit testi kurmak bir acıydı. WP-CLI'nin kurulumu için harika bir kılavuzu var; ancak yine de buradaki adımların üzerinden geçeceğiz.

PHPUnit'i kurun

PHPUnit'i kurmak için aşağıdaki komutları çalıştırın.

 composer global require phpunit/phpunit:5.*

Not: Açıkça 5.x kuruyoruz çünkü benim makinemde bulunan PHP 7 veya üstünü çalıştırırken WordPress bunu destekliyor. PHP sürüm 5 kullanıyorsanız PHPUnit 4.8'i yükleyin.

Yüklendiğini onaylamak için phpunit --version çalıştırın.

WP-CLI'yi yükleyin

WP-CLI'yi kurmak için aşağıdaki komutları çalıştırın.

 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

Kurulumunu onaylamak için wp --info çalıştırın.

PHPUnit ve WP-CLI'yi kurduktan sonra, eklenti için birim testini kurmak için ikincisini kullanacağız.

Eklenti Birimi Testini Kurma

Terminalinizin dizinini WordPress kurulumunuzun kök dizinine değiştirin ve eklenti test dosyalarını oluşturmak için aşağıdaki komutu çalıştırın.

 wp scaffold plugin-tests wp-meta-verify

Yukarıdaki komut test dosyalarını oluşturduktan sonra eklentinin yapısının nasıl görüneceği aşağıdadır.

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

Not: Varsayılan olarak, wp scaffold plugin-tests komutu bir Travis CI yapılandırma dosyası oluşturur. Kullandığınız CI hizmeti için bir yapılandırma dosyası oluşturmak için bir --ci bayrağı belirtebilirsiniz, örneğin: wp scaffold plugin-tests --c gitlab . Yazma sırasında olduğu gibi, yalnızca Travis CI, CircleCI ve GitLab CI desteklenmektedir.

Terminalinizin dizinini eklentinizin dizinine değiştirin ve kurulum komut dosyasını çalıştırın:

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

Benim gibiyseniz, MySQL kullanıcı adınız root değil ve şifre boş değil. Örneğin, kullanıcı adının homestead ve parolanın secret olduğunu varsayalım. Kurulum komut dosyasını şu şekilde çalıştırırsınız:

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

tests/test-sample.php içindeki varsayılan testi çalıştırmak için phpunit komutunu çalıştırın.

PHPUnit test sonucu
PHPUnit test sonucu (Büyük önizleme)

Eklenti Testlerimizi Yazın

tests klasöründe bir test-wp-meta-verify.php dosyası oluşturun. Aşağıdaki setUp sınıfı ile eklenti testlerimizi içerecektir.

 <?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() { } }

Bir yöntemin birim testi olarak kabul edilebilmesi için önüne test eklenmesi gerektiğini belirtmekte fayda var. En iyi uygulama, gerekli olmasa da her test sınıfına bir Test son eki eklemektir. WP_Meta_VerifyTest bakın.

setUp() ne yaptığı konusunda kafanız mı karıştı? PHPUnit'in test durumu sınıfının her test yönteminden (ve yeni örneklerinde) önce bir kez çalıştırdığını bilin. Ayrıca tearDown() vardır, ancak her test yönteminden sonra çalıştırılır. Ayrıca sırasıyla her test senaryosundan önce ve sonra çalışan setUpBeforeClass() ve TeaDownAfterClass( tearDownAfterClass() vardır. Test durumu, temel olarak bir dizi test yöntemini içeren bir sınıftır. Daha fazla bilgi için WordPress El Kitabı ve PHPUnit belgelerine bakın.

Yukarıdaki sınıftan, eklenti sınıfımızın google_site_verification ve bing_site_verification yöntemleri için testler yazacağımız oldukça açık.

 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); }

Temel olarak testler, Google ve Bing web yöneticisi doğrulama kodları kendilerine bağımsız değişken olarak iletildiğinde her iki yöntemin de doğru meta etiketi döndürmesini sağlayacaktır.

phpunit çalıştırın ve aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz.

PHPBirim çıktısı
PHPUnit çıktısı (Büyük önizleme)

Travis CI ile Sürekli Otomatik Test

Travis CI, GitHub'da barındırılan yazılım projelerini oluşturmak ve test etmek için kullanılan, barındırılan, dağıtılan bir sürekli entegrasyon hizmetidir.

Bu nedenle Travis CI'yi kullanmak için eklentimizi GitHub'da yayınlamamız gerekiyor. Devam et ve bunu şimdi yap. Benimkine atıfta bulunmaktan çekinmeyin.

WP-CLI sayesinde, .travis.yml dosyasının izniyle eklentimizde zaten kurduk.

WordPress kodlama standartlarına değil, PHP Standartları Önerilerine bağlı kaldığımı ve eklentilerimin en az PHP 5.4 gerektirdiğini belirtmek isterim. Derlemelerimin başarısız olmaması için matrislerini .travis.yml dosyasında aşağıdaki ile değiştirmek zorunda kaldım.

 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

Travis CI'ye gidin ve GitHub hesabınızla oturum açın. GitHub deponuzu eklemek için ekrandaki kılavuzu izleyin.

GitHub ile hesap senkronizasyonundan sonra, eklentinizin deposuna gidin ve etkinleştirin.

Travis CI deposunu ayarlama
Travis CI deposunu ayarlama (Geniş önizleme)

Bir sonraki kod değişikliğinde ve GitHub'a bastığınızda, Travis CI'de bir derleme tetiklenir.

Travis CI derleme sonucu (Geniş önizleme)

İzleme zevkiniz için başarılı bir yapım sonucu sağladım.

Toplama

Sadece WordPress geliştiricileri değil, birçok geliştiricinin projeleri hakkında bilmedikleri için testleri yazmadıkları bir sır değil. Aramızdaki bazı deneyimli ve gelişmişler bile bunu zaman kaybı olarak gördükleri için yapmıyorlar.

Kabul, otomatik test kurmak sıkıcı ve zaman alıcı olabilir. Yine de, yazılımınıza çok az hatanın girmesini veya hiç olmamasını sağlayacak, böylece yazılımınızdaki hataların size mal olacağı zamandan ve kaynaklardan (finansal dahil) tasarruf etmenizi sağlayacak bir yatırımdır.

Bir özelliği uygulamadan önce daima bir test yazın, böylece özellik uygulandıktan sonra bunu yapmayı unutmaz veya tembel hissetmezsiniz.

Umarım artık test yazmanın önemini ve kendi WordPress eklentiniz için bir tane yazmaya nasıl başlayacağınızı anlamışsınızdır.

Herhangi bir sorunuz veya yorumunuz varsa, lütfen yorumlar bölümünde bana bildirin.