บทนำสู่การทดสอบปลั๊กอิน WordPress อัตโนมัติด้วย PHPUnit
เผยแพร่แล้ว: 2022-03-10WordPress เป็นระบบจัดการเนื้อหายอดนิยมสำหรับการสร้างเว็บไซต์ เนื่องจากง่ายต่อการเริ่มต้น และมีธีมและปลั๊กอินมากมายสำหรับขยายชุดคุณลักษณะ เหตุผลหลักที่ 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
เขียนการทดสอบปลั๊กอินของเรา
สร้างไฟล์ 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
และคุณจะเห็นผลลัพธ์ที่คล้ายกับภาพหน้าจอด้านล่าง
การทดสอบอัตโนมัติอย่างต่อเนื่องด้วย 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 ให้เลื่อนไปที่ที่เก็บของปลั๊กอินและเปิดใช้งาน
ครั้งต่อไปที่คุณทำการเปลี่ยนแปลงโค้ดและกดไปที่ GitHub บิลด์จะถูกทริกเกอร์บน Travis CI
ฉันได้สร้างผลงานที่ประสบความสำเร็จให้คุณได้รับชม
ห่อ
ไม่เป็นความลับที่นักพัฒนาจำนวนมาก ไม่ใช่แค่ WordPress เท่านั้น จะไม่เขียนการทดสอบสำหรับโครงการของพวกเขาเพราะพวกเขาไม่รู้เกี่ยวกับพวกเขา แม้แต่ผู้ที่มีประสบการณ์และก้าวหน้าบางคนก็ไม่เห็นด้วยเพราะพวกเขาคิดว่ามันเป็นการเสียเวลา
จริงอยู่ที่ การตั้งค่าการทดสอบอัตโนมัติอาจเป็นเรื่องที่น่าเบื่อและใช้เวลานาน อย่างไรก็ตาม เป็นการลงทุนที่จะทำให้แน่ใจว่ามีข้อบกพร่องเพียงเล็กน้อยหรือไม่มีเลยในซอฟต์แวร์ของคุณ ซึ่งจะช่วยประหยัดเวลาและทรัพยากร (รวมถึงการเงิน) ที่บั๊กในซอฟต์แวร์ของคุณจะทำให้คุณเสียค่าใช้จ่าย
เขียนการทดสอบก่อนใช้งานคุณสมบัติเสมอ เพื่อที่คุณจะได้ไม่ลืมหรือรู้สึกขี้เกียจที่จะทำหลังจากใช้งานคุณสมบัติแล้ว
ฉันหวังว่าคุณจะเข้าใจถึงความสำคัญของการเขียนแบบทดสอบและวิธีเริ่มเขียนแบบทดสอบสำหรับปลั๊กอิน WordPress ของคุณเอง
หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดแจ้งให้เราทราบในส่วนความคิดเห็น