בדיקות אוטומטיות בוורדפרס באמצעות PHPUnit

אל תהיו אנשי מערות! הכניסו בדיקות אוטומטיות לוורדפרס שלכם עוד היום!
לוגו וורדפרס

להלן תמליל ההרצאה שלי בוורדקמפ 2014 שבה הסברתי על בדיקות אוטומטיות בוורדפרס. ההרצאה היתה מקיפה יותר ועסקה גם בסלניום, פה בחרתי להביא את החלק שבו אני מדבר על PHPUnit. יש באינטרנט ישראל מאמר שמסביר על PHPUnit באופן כללי ומומלץ לקרוא אותו קודם.

נשאלת השאלה למה בדיוק לבצע בדיקות אוטומטיות? יש הרבה סיבות טובות לביצוע בדיקות כאלו מלבד הרצון בלחסוך כסף על QA – אבל המובילות הן:
1. אי אפשר לתרום לליבה של וורדפרס או לתוספים המובילים ללא בדיקה של הקוד וכתיבת בדיקות- האחראים פשוט לא יקבלו את התרומה שלכם.
2. כאשר אנו בונים מוצר שאנו מתכוונים לתחזק במשך שנים – זה אחד הדברים הנדרשים ביותר.
3. כאשר אנו בונים סדרה של מוצרים שדומים אחד לשני מבחינת פונקציונליות.
4. כאשר אנו רוצים לספק extra value ללקוח שלנו.
5. כאשר אנו בונים API שיש צורך להתממשק אליו.
אם אתם עושים את זה בעבודה היומיומית שלכם – כדאי לכם לשקול השקעת חלק מהמשאבים שלכם בבדיקות אוטומטיות.

הסביבה שאני מדבר עליה היא סביבת לינוקס. אם אתם לא משתמשים בלינוקס כדי לפתח וורדפרס באופן רציני, צר לי עליכם. פתרונות נהדרים כמו WAMP או וובמטריקס הם נפלאים כאשר אנו מפתחי small scale. כאשר אנו עוברים לפאזה יותר רצינית אנו צריכם לעבור ללינוקס. איך נראית סביבת בדיקות מודרנית?

סביבת בדיקות מודרנית

הנה דוגמה לסביבה כזו – יש לנו את המפתח שמייצר את הקוד – ברגע שהוא מבצע commit ל-repo מתחילה להכנס לפעולה תוכנה קטנה שנקראת jenkins, זו תוכנה כמו כל תוכנה אחרת שיושבת על לינוקס ובעצם מאזינה ל-git, ברגע שיש לנו commit" היא נכנסת לפעולה ומסוגלת להריץ סקריפטים דרך bash, את החיווי מהסקריפטים האלו היא מתרגמת לדו"ח שנשלח חזרה אל המפתח.

ככה זה עובד בסביבות enterprise. בסביבת המפתח הבודד אני לא חושב שיש טעם בעבודה עם Jenkins והמערכת המורכבת הזו – אבל בגדול, במקום ש-jenkins יריץ את הבדיקות – אתם יכולים להריץ אותן בעצמכם. בואו ונדבר phpUnit.

phpUnit משמשת לא רק את הליבה של וורדפרס אלא גם פרויקטים רבים נוספים. קל מאוד להתקין אותה על לינוקס. אני לא נכנס להדרכה על לינוקס במצגת הזו אבל זה באופן יחסי קל דרך PEAR ובדרכים אחרות. אחרי שהתקנו את phpunit ההפעלה שלה עובדת כך:
phpunit nameoftestingfile.php

עכשיו נשאלת השאלה מה בדיוק יש בקובץ הבדיקות? באופן עקרוני זה די פשוט, יש לנו class שיורש מ php unit, ב-class הזה יש אוסף של מתודות כאשר כל מתודה מבצעת בסוף assert, הנה למשל דוגמה

דוגמת קוד של בדיקה

כאן למשל אנחנו יכולים לראות קריאה לפונקצית PHP קיימת בקוד שלנו, עשית מספר מניפולציות – למשל העברת משתנים לפונקציה ואז בדיקה של התוצאה כאשר התוצאה צריכה להיות בהתאם לציפיות שלנו.

נשאלת השאלה מאיפה לקובץ הבדיקות יש גישה לפונקציה שכתבנו? למרות שאפשר לקנפג את phpunit שתכלול את קבצי הפרויקט שלנו, אפשר לעשות require – זה לא הכי מקצועי אבל זה יהיה מעולה בהתחלה.
איך בודקים את וורדפרס? הדרך הטובה ביותר היא להוריד בקלות ותוך שניות את גרסת הפיתוח של וורדפרס שכוללת את הבדיקות. אם אנו רוצים לתרום לקוד המקור של וורדפרס, זו הדרך הטובה ביותר לוודא שלא שברנו דבר בדרך. אם אנו רוצים ליצור תוסף חדש, זו הדרך הטובה ביותר לוודא שלא שברנו שום פונקציונליות.
כשאנו מורידים את גרסת הפיתוח של וורדפרס, כל מה שאנו צריכים לעשות זה להכנס ולהריץ phpunit, יש בספריה הראשית קובץ קונפיגרציה שמכוון את phpunit לאן שנרצה והבדיקות רצות. כל נקודה זו בדיקה שעוברת בהצלחה.כל S זו בדיקה שמדלגים מעליה מסיבה מסוימת.

כך נראית גרסת הפיתוח של וורדפרס:

קבצי גרסת הפיתוח של וורדפרס

וכך מריצים את הבדיקות:

הרצת בדיקות אוטומטיות בגרסת הפיתוח של וורדפרס

על מנת להפעיל את הבדיקות אנחנו צריכים להתקין מסד נתונים שישמש את גרסת הפיתוח של וורדפרס בדיוק כמו כל וורדפרס רגיל.

אחרי שהתקנו ובאמת זה לוקח כמה דקות, סביבת בדיקות לוורדפרס – הגיע הזמן לכתוב כמה בדיקות לתוסף שלנו – למשל. ואת זה נעשה על גבי סביבת הבדיקות של וורדפרס מהסיבה המאוד פשוטה – אנחנו יכולים לשלב את הבדיקות של וורדפרס כדי לראות שהתוסף שלנו לא שבר פונקציונליות כלשהי. וכי גם כך סביבת הבדיקות מנקה את מסד הנתונים ודואגת לניקוי כללי של הגרסה, אז ככה שאנחנו רק מרוויחים מזה.

איך אנו כותבים בדיקה לתוסף שלנו? הדרך הטובה ביותר לעשות את זה היא להשתמש בסביבת הבדיקות של וורדרפס. איך אנחנו עושים את זה?

בגדול, אנו נכניס את קבצי התוסף שלנו אל התיקיה של המקור בגרסת הפיתוח של וורדפרס בדיוק כמו כל גרסה רגילה

ואז צריך לקנפג את סביבת הבדיקות של וורדפרס על מנת שתעבוד עם התוסף שלנו. זה יותר פשוט ממה שזה נשמע: הדרך הטובה ביותר היא להשתמש בקבצי הדוגמה שיש לנו בפרויקט

https://github.com/blobaugh/wordpress-plugin-tests

הקבצים האלו כוללים שלושה קבצים חשובים: הראשון הוא קובץ XML שמכיל את ההוראות לבדיקה. אנחנו מציבים אותו בתיקית האב של הפרויקט שלנו.

בתיקית התוסף שלנו אנו פותחים תיקית tests ובה אנו מציבים את שני הקבצים הנותרים – קובץ bootstrap. אנו מקפידים שה: $GLOBALS['wp_tests_options'] יכיל את השם של התוסף שלנו. הקובץ השני הוא קובץ הבדיקות עצמו. אנחנו לא חייבים להשתמש בו אבל כדאי לשים אותו רק כדי לראות שהבדיקות עובדות.

שימו לב שהקובץ מתחיל ב _test – כל קובץ בדיקות שלנו אמור להתחיל בשם הזה אחרת phpUnit לא תדע להכנס לקובץ הבדיקות ולהריץ את הבדיקות.
בשלב הראשוני אפשר פשוט להריץ את הבדיקות – איך עושים את זה? נכנסים עם הקונסולה לתוך התיקיה שבה נמצא התוסף שלנו וכותבים phpunit

הרצת בדיקות לתוסף שלנו בוורדפרס

עכשיו אנחנו יכולים להתחיל ולכתוב את הבדיקות הרציניות לתוסף שלנו. בואו ונסתכל על אחת הבדיקות רק בשביל להבין איל זה עובד – שימו לב ל assert – אם הוא נכשל יש לנו כשלון. פה הבדיקה מאוד פשוטה – רק בדיקה שהתוסף פעיל. אנו צריכים לבדוק כל פונקציה ומתודה בקובץ הבדיקות שלנו.

נשאלת השאלה איך בודקים תמה? באופן עקרוני, אם יש לנו פונקציונליות בקובת ה-functions.php שלנו, אנו יכולים לבדוק אותן בדיוק כמו תוסף, רק שבמקרה הזה נצטרך להשתמש ב- switch_theme() על מנת לגרופ לתמה להיות פעילה – אפילו שזה לא מאוד הכרחי כי אנחנו לא צריכים שהתמה תהיה פעילה.

למי שרוצה לראות איך זה עובד ממש בפועל, יש לי נכון להיום שני תוספים שזמינים ב-wordpress.org. בכל תוסף שלי יש בדיקות אוטומטיות – אתם מוזמנים לבדוק ולהתרשם מהקוד שלהם בגיטהאב:

WP Notice ו-WP Tutorial Maker.

פוסטים נוספים שכדאי לקרוא

תמונת תצוגה של מנעול על מחשב
פתרונות ומאמרים על פיתוח אינטרנט

הגנה מפני XSS עם Trusted Types

תכונה ב-CSP שמאפשרת מניעה כמעט הרמטית להתקפות XSS שכל מפתח ווב צריך להכיר וכדאי שיכיר.

תמונה של עציץ, רספברי פיי ורמקול
רספברי פיי

לגרום לעציץ שלכם לדבר

כך תשתמשו ברספברי פיי, חיישנים וגם בינה מלאכותית שמותקנת על הרספברי פיי (כן) כדי ליצור… עציץ המדבר.

גלילה לראש העמוד