บทนำสู่การทดสอบปลั๊กอิน WordPress อัตโนมัติด้วย PHPUnit

เผยแพร่แล้ว: 2022-03-10
สรุปอย่างรวดเร็ว ↬ คุณไม่ต้องการใช้เวลาหลายชั่วโมงในการทดสอบทุกส่วนของปลั๊กอิน WordPress ด้วยตนเองเพื่อให้แน่ใจว่าไม่มีอะไรเสียหายทุกครั้งที่คุณปรับใช้เวอร์ชันใหม่ - ใช่ไหม ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีทดสอบอย่างมีประสิทธิภาพด้วยการทดสอบอัตโนมัติ

WordPress เป็นระบบจัดการเนื้อหายอดนิยมสำหรับการสร้างเว็บไซต์ เนื่องจากง่ายต่อการเริ่มต้น และมีธีมและปลั๊กอินมากมายสำหรับขยายชุดคุณลักษณะ เหตุผลหลักที่ WordPress มีปลั๊กอินและธีมมากมาย เนื่องมาจากมันง่ายสำหรับนักพัฒนาในทุกระดับที่จะเริ่มสร้างมัน นักพัฒนาส่วนใหญ่ไม่มีประสบการณ์ และพวกเขาไม่ได้เขียนการทดสอบสำหรับงานของตน อาจเป็นเพราะสาเหตุต่อไปนี้:

  • มีการอภิปรายไม่มากนักเกี่ยวกับการทดสอบหน่วย ดังนั้นพวกเขาจึงอาจไม่ทราบว่าการทดสอบนั้นเป็นไปได้ด้วยซ้ำ
  • พวกเขาไม่เชื่อในคุณค่าของการเขียนการทดสอบสำหรับโค้ดของพวกเขา มิฉะนั้นพวกเขาคิดว่ามันจะทำให้พวกเขาช้าลง
  • พวกเขาเชื่อว่าการทดสอบเพื่อดูว่าปลั๊กอินหรือธีมใช้งานได้ในเบราว์เซอร์เพียงพอหรือไม่

ในบทช่วยสอนนี้ เราจะเรียนรู้ว่าการทดสอบอัตโนมัติคืออะไรและมีความสำคัญ ทำความรู้จักกับ PHPUnit และ WP-CLI เรียนรู้วิธีเขียนการทดสอบ และสุดท้าย ตั้งค่าการทดสอบอัตโนมัติอย่างต่อเนื่องด้วย Travis CI

เรากำลังเลือกใช้ Travis CI เนื่องจากมีการรวมเข้ากับ GitHub ได้อย่างราบรื่น คุณไม่จำเป็นต้องไปที่ที่เก็บของคุณและตั้งค่าการเชื่อมต่อระหว่างกัน และฟรีสำหรับพื้นที่เก็บข้อมูลสาธารณะ Travis CI ต่างจากคู่แข่งอย่าง Semaphore CI, GitLab CI และ CircleCI ไม่มีแผนบริการพื้นที่เก็บข้อมูลส่วนตัวฟรี อย่างไรก็ตาม ไม่มีคู่แข่งรายใดเสนอการผสานรวมกับ GitHub ได้อย่างราบรื่นเหมือนที่ทำ

การทดสอบอัตโนมัติคืออะไร?

ตามวิกิพีเดีย การทดสอบอัตโนมัติหรือการทดสอบอัตโนมัติคือการใช้ซอฟต์แวร์พิเศษ (แยกจากซอฟต์แวร์ที่กำลังทดสอบ) เพื่อควบคุมการดำเนินการทดสอบและการเปรียบเทียบผลลัพธ์จริงกับผลลัพธ์ที่คาดการณ์ไว้ การทดสอบอัตโนมัติสามารถทำให้งานที่ซ้ำๆ แต่จำเป็นเป็นไปโดยอัตโนมัติในกระบวนการทดสอบที่เป็นทางการซึ่งมีอยู่แล้ว หรือทำการทดสอบเพิ่มเติมที่อาจทำได้ยากด้วยตนเอง

เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓

การทดสอบมีหลายประเภท การทดสอบหน่วยเป็นที่นิยมมากที่สุด การทดสอบหน่วยตรวจสอบว่ากลุ่มของโค้ด ฟังก์ชัน หรือเมธอดของคลาสทำในสิ่งที่ตั้งใจจะทำ เราจะทำการทดสอบหน่วยในบทช่วยสอนนี้

การทดสอบอัตโนมัติช่วยตรวจจับจุดบกพร่องเพื่อไม่ให้เกิดปัญหาในการผลิต ไม่ต้องสงสัยเลย ปลั๊กอินที่เข้ารหัสและทดสอบแล้วจะใช้เวลาดำเนินการนานกว่าปลั๊กอินที่ไม่ได้ทดสอบ อย่างไรก็ตาม ปลั๊กอินที่ได้จะมีข้อบกพร่องน้อยกว่าหรือไม่มีเลย

มาดูตัวอย่างง่ายๆ ในโลกแห่งความเป็นจริงว่าการทดสอบหน่วยนั้นมีค่าเพียงใด และเราจะนำไปใช้ทำอะไรได้บ้าง

ปลั๊กอินการสร้างโอกาสในการขาย WordPress ของฉันมีคลาส OptinThemesRepository พร้อมวิธีการ add() สำหรับการเพิ่มเทมเพลตฟอร์มการเลือกรับใหม่ และเมธอด get() สำหรับการดึงเทมเพลตฟอร์มแบบเลือกใช้

เพื่อให้แน่ใจว่าทั้ง add() และ get() ทำงานตามที่ตั้งใจไว้ในตอนนี้และในอนาคต ฉันจึงเขียนการทดสอบด้านล่าง

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

ถ้าในอนาคต การทดสอบนี้เริ่มล้มเหลว ฉันจะรู้ว่ามีปัญหาและรู้ฟังก์ชันที่แน่นอน วิธีการเรียน หรือจุดในปลั๊กอินของฉันที่มันเกิดขึ้น

ประโยชน์ของการทดสอบอัตโนมัติ

ตอนนี้เรารู้แล้วว่าการทดสอบอัตโนมัติคืออะไร มาดูประโยชน์เพิ่มเติมกันดีกว่า

การตรวจจับข้อผิดพลาดในช่วงต้น

ขณะพัฒนาซอฟต์แวร์ คุณสามารถค้นหาจุดบกพร่องได้อย่างง่ายดายด้วยเครื่องมือทดสอบอัตโนมัติ ซึ่งจะช่วยประหยัดเวลาและความพยายามอย่างมากในการติดตามจุดบกพร่อง

ซอฟต์แวร์คุณภาพสูงขึ้น

ผู้ทดสอบที่มีประสบการณ์หลายปีอาจทำผิดพลาดได้เมื่อต้องเตรียมสคริปต์การทดสอบด้วยตนเองที่น่าเบื่อซ้ำแล้วซ้ำอีก การทดสอบอัตโนมัติไม่เพียงแต่ให้ผลลัพธ์ที่แม่นยำเท่านั้น แต่ยังช่วยประหยัดเวลาอีกด้วย

การรายงานที่ง่ายและมีประสิทธิภาพ

เครื่องมือทดสอบอัตโนมัติสามารถติดตามแต่ละสคริปต์ทดสอบได้ การทำงานของสคริปต์ทดสอบแต่ละรายการสามารถเห็นได้ในบันทึกภาพ บันทึกภาพหรือรายงานมักจะแสดงจำนวนสคริปต์ทดสอบที่ดำเนินการและสถานะ (เช่น ผ่าน ล้มเหลว หรือข้าม) ข้อบกพร่องที่รายงานและคำแนะนำเกี่ยวกับวิธีการแก้ไขจุดบกพร่อง

ก่อนที่เราจะพูดถึงวิธีตั้งค่าและเขียนการทดสอบ เรามาสร้างปลั๊กอินง่ายๆ เพื่อใช้เป็นกรณีศึกษากันก่อน

การสร้างปลั๊กอิน WordPress

เรากำลังจะสร้างปลั๊กอินง่ายๆ ที่แสดงเมตาแท็กการตรวจสอบ Google และ Bing ผู้ดูแลเว็บในส่วนหัวของส่วนหน้าของ WordPress ปลั๊กอินนี้โฮสต์อยู่ในบัญชี GitHub ของฉัน

โค้ดสำหรับปลั๊กอินด้านล่างนี้จะอยู่ใน 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();

คุณอาจสังเกตเห็นว่าเราไม่ได้รวมหน้าการตั้งค่าไว้ในปลั๊กอิน ซึ่งโดยทั่วไปแล้วคุณจะบันทึกรหัสยืนยัน Google และ Bing ไว้ ฉันทำสิ่งนี้โดยตั้งใจเพื่อให้สิ่งนี้เรียบง่ายและมุ่งความสนใจไปที่สิ่งที่สำคัญที่สุด อย่างไรก็ตาม get_option('wpmv_google_code') และ get_option('wpmv_bing_code') ถือว่ามีหน้าการตั้งค่าและพวกเขาดึงรหัสยืนยันจากที่นั่น

หน่วยทดสอบปลั๊กอิน WordPress

PHPUnit เป็นเครื่องมือทดสอบ โดยพฤตินัย สำหรับ PHP ในขณะที่ WP-CLI เป็นอินเทอร์เฟซบรรทัดคำสั่งอย่างเป็นทางการสำหรับ WordPress

ก่อน WP-CLI การตั้งค่าการทดสอบ PHPUnit สำหรับปลั๊กอิน WordPress เป็นเรื่องที่ยุ่งยาก WP-CLI มีคำแนะนำที่ดีในการตั้งค่า อย่างไรก็ตาม เราจะยังคงทำตามขั้นตอนต่างๆ ต่อไปนี้

ติดตั้ง PHPUnit

ในการติดตั้ง PHPUnit ให้รันคำสั่งต่อไปนี้

 composer global require phpunit/phpunit:5.*

หมายเหตุ: เรากำลังติดตั้ง 5.x อย่างชัดเจนเพราะนั่นคือสิ่งที่ WordPress รองรับเมื่อคุณใช้ PHP 7 หรือสูงกว่า ซึ่งฉันมีในเครื่องของฉัน ติดตั้ง PHPUnit 4.8 หากคุณใช้ PHP เวอร์ชัน 5

เรียกใช้ phpunit --version เพื่อยืนยันการติดตั้ง

ติดตั้ง WP-CLI

ในการติดตั้ง WP-CLI ให้รันคำสั่งต่อไปนี้

 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

เรียกใช้ wp --info เพื่อยืนยันการติดตั้ง

หลังจากติดตั้ง PHPUnit และ WP-CLI แล้ว เราจะใช้อันหลังเพื่อตั้งค่าการทดสอบหน่วยสำหรับปลั๊กอิน

ตั้งค่า Plugin Unit Test

เปลี่ยนไดเร็กทอรีของเทอร์มินัลเป็นรูทของการติดตั้ง WordPress และเรียกใช้คำสั่งด้านล่างเพื่อสร้างไฟล์ทดสอบปลั๊กอิน

 wp scaffold plugin-tests wp-meta-verify

ด้านล่างนี้คือโครงสร้างของปลั๊กอินจะมีลักษณะอย่างไรหลังจากที่คำสั่งด้านบนสร้างไฟล์ทดสอบ

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

หมายเหตุ: ตามค่าดีฟอลต์ คำสั่ง wp scaffold plugin-tests จะสร้างไฟล์คอนฟิกูเรชัน Travis CI คุณสามารถระบุแฟล็ก --ci เพื่อสร้างไฟล์การกำหนดค่าสำหรับบริการ CI ที่คุณใช้ เช่น: wp scaffold plugin-tests --c gitlab ในขณะที่เขียน รองรับเฉพาะ Travis CI, CircleCI และ GitLab CI เท่านั้น

เปลี่ยนไดเร็กทอรีของเทอร์มินัลเป็นไดเร็กทอรีของปลั๊กอิน และรันสคริปต์การติดตั้ง:

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

หากคุณเป็นเหมือนฉัน ชื่อผู้ใช้ MySQL ของคุณก็ไม่ใช่ root และรหัสผ่านก็ไม่เว้นว่าง ตัวอย่างเช่น สมมติว่าชื่อผู้ใช้คือ homestead และรหัสผ่านเป็น secret คุณจะเรียกใช้สคริปต์การติดตั้งดังนี้:

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

เรียกใช้คำสั่ง phpunit เพื่อเรียกใช้การทดสอบเริ่มต้นใน tests/test-sample.php

ผลการทดสอบ PHPUnit
ผลการทดสอบ PHPUnit (ตัวอย่างขนาดใหญ่)

เขียนการทดสอบปลั๊กอินของเรา

สร้างไฟล์ test-wp-meta-verify.php ในโฟลเดอร์ tests มันจะมีการทดสอบปลั๊กอินของเราด้วยคลาส setUp ต่อไปนี้

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

เป็นที่น่าสังเกตว่าเพื่อให้วิธีการได้รับการพิจารณาการทดสอบหน่วยนั้นจะต้องนำหน้าด้วย test แนวทางปฏิบัติที่ดีที่สุดคือการเพิ่มส่วนต่อท้าย Test ให้กับทุกคลาสการทดสอบ แม้ว่าจะไม่จำเป็นก็ตาม ดู WP_Meta_VerifyTest

สับสนว่า setUp() ทำอะไร? เพิ่งรู้ว่า PHPUnit รันหนึ่งครั้งก่อนแต่ละวิธีการทดสอบ (และในอินสแตนซ์ใหม่) ของคลาสกรณีทดสอบ นอกจากนี้ยังมี tearDown() แต่จะรันหลังจากแต่ละวิธีการทดสอบ นอกจากนี้ยังมี setUpBeforeClass() และ tearDownAfterClass() ซึ่งทำงานก่อนและหลังแต่ละกรณีทดสอบตามลำดับ กรณีทดสอบนั้นเป็นคลาสที่มีวิธีการทดสอบหลายวิธี ดูคู่มือ WordPress และเอกสารประกอบ PHPUnit สำหรับข้อมูลเพิ่มเติม

จากชั้นเรียนด้านบน เห็นได้ชัดว่าเรากำลังจะเขียนการทดสอบสำหรับเมธอด google_site_verification และ bing_site_verification ของคลาสปลั๊กอินของเรา

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

โดยทั่วไป การทดสอบจะทำให้แน่ใจว่าทั้งสองวิธีส่งคืนเมตาแท็กที่ถูกต้องเมื่อส่งรหัสยืนยัน Google และ Bing สำหรับผู้ดูแลเว็บเป็นอาร์กิวเมนต์

เรียกใช้ phpunit และคุณจะเห็นผลลัพธ์ที่คล้ายกับภาพหน้าจอด้านล่าง

เอาต์พุต PHPUnit
เอาต์พุต PHPUnit (ตัวอย่างขนาดใหญ่)

การทดสอบอัตโนมัติอย่างต่อเนื่องด้วย Travis CI

Travis CI เป็นบริการการรวมแบบต่อเนื่องที่โฮสต์และกระจายซึ่งใช้ในการสร้างและทดสอบโครงการซอฟต์แวร์ที่โฮสต์บน GitHub

ในการใช้ Travis CI เราต้องเผยแพร่ปลั๊กอินของเราบน GitHub ไปข้างหน้าและทำอย่างนั้นตอนนี้ รู้สึกอิสระที่จะอ้างถึงของฉัน

ขอบคุณ WP-CLI เราจึงได้ตั้งค่าไว้ในปลั๊กอินของเราแล้ว โดยได้รับความอนุเคราะห์จากไฟล์ . .travis.yml

ฉันอยากจะบอกว่าฉันไม่ได้ปฏิบัติตามมาตรฐานการเข้ารหัสของ WordPress แต่ปฏิบัติตามคำแนะนำมาตรฐาน PHP และปลั๊กอินของฉันต้องมีอย่างน้อย PHP 5.4 เพื่อไม่ให้งานสร้างของฉันล้มเหลว ฉันต้องแทนที่เมทริกซ์ด้วยสิ่งต่อไปนี้ในไฟล์ . .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

ตรงไปที่ Travis CI และลงชื่อเข้าใช้ด้วยบัญชี GitHub ของคุณ ทำตามคำแนะนำบนหน้าจอเพื่อเพิ่มที่เก็บ GitHub ของคุณ

หลังจากการซิงโครไนซ์บัญชีกับ GitHub ให้เลื่อนไปที่ที่เก็บของปลั๊กอินและเปิดใช้งาน

การตั้งค่าที่เก็บ Travis CI
การตั้งค่าที่เก็บ Travis CI (ตัวอย่างขนาดใหญ่)

ครั้งต่อไปที่คุณทำการเปลี่ยนแปลงโค้ดและกดไปที่ GitHub บิลด์จะถูกทริกเกอร์บน Travis CI

ผลลัพธ์การสร้าง Travis CI (ตัวอย่างขนาดใหญ่)

ฉันได้สร้างผลงานที่ประสบความสำเร็จให้คุณได้รับชม

ห่อ

ไม่เป็นความลับที่นักพัฒนาจำนวนมาก ไม่ใช่แค่ WordPress เท่านั้น จะไม่เขียนการทดสอบสำหรับโครงการของพวกเขาเพราะพวกเขาไม่รู้เกี่ยวกับพวกเขา แม้แต่ผู้ที่มีประสบการณ์และก้าวหน้าบางคนก็ไม่เห็นด้วยเพราะพวกเขาคิดว่ามันเป็นการเสียเวลา

จริงอยู่ที่ การตั้งค่าการทดสอบอัตโนมัติอาจเป็นเรื่องที่น่าเบื่อและใช้เวลานาน อย่างไรก็ตาม เป็นการลงทุนที่จะทำให้แน่ใจว่ามีข้อบกพร่องเพียงเล็กน้อยหรือไม่มีเลยในซอฟต์แวร์ของคุณ ซึ่งจะช่วยประหยัดเวลาและทรัพยากร (รวมถึงการเงิน) ที่บั๊กในซอฟต์แวร์ของคุณจะทำให้คุณเสียค่าใช้จ่าย

เขียนการทดสอบก่อนใช้งานคุณสมบัติเสมอ เพื่อที่คุณจะได้ไม่ลืมหรือรู้สึกขี้เกียจที่จะทำหลังจากใช้งานคุณสมบัติแล้ว

ฉันหวังว่าคุณจะเข้าใจถึงความสำคัญของการเขียนแบบทดสอบและวิธีเริ่มเขียนแบบทดสอบสำหรับปลั๊กอิน WordPress ของคุณเอง

หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดแจ้งให้เราทราบในส่วนความคิดเห็น