วิธีปฏิบัติที่ดีที่สุดสำหรับเว็บไซต์ WordPress ทดสอบการถดถอย?


22

สวัสดีทุกคน,

ฉันต้องการฟังสิ่งที่คนอื่น ๆ ที่นำเสนอโซลูชันที่ไม่ใช่บล็อกที่ซับซ้อนให้กับลูกค้าด้วย WordPress ซึ่งเป็นแพลตฟอร์มที่พวกเขาใช้สำหรับการทดสอบการถดถอยอัตโนมัติ?

สำหรับผู้ที่ไม่คุ้นเคยกับคำว่า"การทดสอบการถดถอย" Wikipedia ให้นิยามเป็น:

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

บอกวิกิพีเดียเพิ่มเติมว่าสิ่งต่อไปนี้เป็นสิ่งที่ฉันกำลังประสบในโครงการในขณะนี้:

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

ด้วยธรรมชาติของการกระทำและตัวกรองทั่วโลกฉันพบว่าความซับซ้อนเริ่มกระโชกแรงเมื่อฉันเพิ่มฟังก์ชั่นที่ลูกค้าร้องขอมากขึ้นและกลายเป็นเรื่องยากที่จะได้รับปลั๊กอินที่ซับซ้อนมั่นคงโดยเฉพาะอย่างยิ่งถ้าใช้การโทรจำนวนมากWP_Queryและอัพเดทฐานข้อมูลจำนวนมาก .

ทางออกในใจของฉันคือการตั้งค่าการทดสอบการถดถอยด้วยชุดของ"กรณีทดสอบ"เพื่อประกอบด้วย"ชุดทดสอบ" โดยหลักการแล้วมันไม่ได้ยากเมื่อคุณกำลังทดสอบเอาต์พุต HTML ของการร้องขอ HTTP GET แต่จะมีความซับซ้อนเพิ่มขึ้นเล็กน้อยเมื่อคุณต้องทดสอบสิ่งต่าง ๆ เมื่อลงชื่อเข้าใช้ผ่านคอนโซลผู้ดูแลระบบและ / หรือเพื่อทดสอบการโต้ตอบ jQuery

ฉันตั้งค่านี้เป็นวิกิชุมชนโดยหวังว่าเราจะสามารถรวบรวมแนวปฏิบัติที่ดีที่สุดได้ที่นี่ แต่ฉันรู้สึกกระตือรือร้นที่จะได้ยินกระบวนการหากผู้เชี่ยวชาญ WordPress คนอื่นกำลังใช้งานอยู่


ฉันคิดว่าคุณกำลังพูดถึงการทดสอบรหัสของคุณเอง (ธีม / ปลั๊กอิน)? เมื่อคุณสร้างรหัสใหม่หรือเมื่อคุณอัปเดต "สภาพแวดล้อม" (WP, ปลั๊กอินอื่น ๆ )? หรือทั้งคู่? ฉันคิดว่าผู้ดูแลเว็บมืออาชีพอาจมีคำแนะนำที่ดีเกี่ยวกับวิธีทดสอบแอปเว็บ (ซีลีเนียมและเนื้อหา) - บางทีการโพสต์ข้ามเป็นความคิดที่ดีหรือไม่
Jan Fabry

@Jan Fabry - ใช่ทดสอบโค้ดของฉันเอง ความคิดที่ดีเกี่ยวกับการโพสต์ข้ามฉันจะทำในไม่ช้า
MikeSchinkel

คำตอบ:


10

PHPUnit จะนึกถึงถ้าชุดทดสอบ WP ไม่ได้แตกหักและถ้า WP ได้รับการออกแบบและเขียนในลักษณะที่สามารถทดสอบได้จริงอย่างถูกต้อง ;-)

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

ท่ามกลางสิ่งที่มีสีสันที่ฉันได้เห็นเกิดขึ้น:

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

  • การเปลี่ยนแปลงเล็กน้อยใน WP API ทำให้คุณได้รับWP_Errorวัตถุแทนค่าที่คาดไว้ก่อนหน้านี้ว่าfalseเป็นอินพุตที่ไม่ดี

  • ปลั๊กอินของคุณถูกเพิ่มจากภายในโฟลเดอร์ mu-plugins ทำให้เกิดการไหลของรหัสที่ต่างกันอย่างละเอียด

  • ปลั๊กอินของคุณทำงานได้ดีจนกระทั่ง memcached หรือที่เก็บถาวรอื่น ๆ เปิดใช้งานอยู่

  • ปลั๊กอินของคุณใช้งานได้ดีจนกระทั่ง switch_to_blog () ถูกเรียกใช้แล้ว

  • ปลั๊กอินจะเปลี่ยน hook ที่อยู่เมื่อเรียกใช้และจะขัดจังหวะโดยไม่รู้ตัวว่าเป็นผลข้างเคียง

  • ปลั๊กอิน (un?) รู้รอบกับข้อมูลอินพุตหรือเอาต์พุตของคุณไปยังจุดที่สิ่งต่าง ๆ ดูไม่ดีแม้ว่าคุณจะไม่ผิดก็ตาม

ฉันสามารถขยายรายการต่อไปได้ แต่สิ่งเหล่านี้จะเป็นรายการสำคัญที่ทำให้ปลั๊กอินของฉันแตกเอง ทั้งสองรายการสามารถจับได้ด้วยการทดสอบหน่วย สองอันถัดไปเช่นกันถ้าคุณอดทนพอ แต่ฉันขอยืนยันว่า WP ไม่ควรเปลี่ยนวิธีการทำงานเมื่อมันเกิดขึ้น ไม่มีการทดสอบจำนวนใดที่จะสามารถแก้ไขการใช้งาน switch_to_blog () ของ buggy ได้ และสองคนสุดท้ายนั้นไม่สามารถทดสอบได้อย่างสิ้นหวัง

โอ้และ ... อย่าให้ฉันเริ่มต้นด้วยการโจมตีของสิ่งที่แนบมาแบบร่างอัตโนมัติการแก้ไขรายการเมนูและสิ่งที่ไม่ได้เก็บไว้ในตารางโพสต์

โชคดี... :-)


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

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

7

คุณควรพิจารณาอย่างยิ่งซีลีเนียม

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


ขอบคุณสำหรับคำแนะนำที่ฉันได้ยินมาก่อน จริง ๆ แล้วคุณใช้สำหรับโครงการ WordPress? แค่สงสัย.
MikeSchinkel

ใช่. ฉันใช้มันเพื่อทดสอบปลั๊กอินที่ฉันใช้งานอยู่ ในชีวิตก่อนหน้านี้เราใช้มันเพื่อทดสอบแอพ EDC สำหรับการวิจัยทางคลินิก
Ethan Seifert

1

ซีลีเนียมอาจใช้งานได้ แต่ฉันคิดว่าในยุคปัจจุบันคุณจะพบว่าCodeceptionนั้นดีกว่าและใช้งานง่ายกว่า สำหรับการทดสอบการถดถอยทางสายตาที่ง่ายที่สุดแม้จะมีส่วนขยายที่จะจับภาพหน้าจอและทำการเปรียบเทียบให้คุณโดยอัตโนมัติ

แน่นอนว่าการทดสอบCodeception WebDriverสามารถดำเนินการต่อไปและทำการทดสอบการถดถอยเชิงฟังก์ชันได้ คุณสามารถกรอกและส่งแบบฟอร์มให้คลิกปุ่มและการเชื่อมโยงในเว็บไซต์ที่ดำเนินการใด ๆ JS ฯลฯ คุณสามารถใช้เบราว์เซอร์ในชีวิตจริงเช่น Firefox หรือ Chrome ในการทดสอบของคุณหรือคุณสามารถดำเนินการทดสอบหัวขาดกับPhantomJS นั่นหมายความว่าคุณสามารถเรียกใช้การทดสอบ WebDriver สำหรับปลั๊กอินของคุณซึ่งเป็นส่วนหนึ่งของกระบวนการสร้างบน Travis CIหากคุณต้องการ

มีแม้กระทั่งไลบรารีเฉพาะ WordPress หลายอย่างที่จะช่วยคุณเริ่มต้นใช้งาน:


1
ซีลีเนียมและ Codeception นั้นไม่ได้ จำกัด เฉพาะ คุณสามารถใช้ WP-Browser เพื่อขับ Selenium [ซึ่งเป็นเบราว์เซอร์ที่แท้จริงเช่น Chrome], Phantom [ซึ่งเป็นเบราว์เซอร์ที่ไม่ใช่ gui พร้อมการสนับสนุน JS] หรือแม้แต่ PHPBrowser ซึ่งเป็นเบราว์เซอร์ใบ้ [เร็วมาก แต่ไม่มี JS เช่นการทดสอบ API] WP-Browser สามารถขับเคลื่อนได้ทุกอย่าง
จิมแมกไกวร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.