מה בעצם בדקת שם?

10/10/2023

נתבונן בקוד הבדיקה הבא מתוך leantime:

    #[Depends('Tests\Acceptance\LoginCest:loginSuccessfully')]
    public function createAUser(AcceptanceTester $I)
    {
        $I->wantTo('Create a user');
        $I->amOnPage('/users/showAll');
        $I->click('Add User');
        $I->waitForElement('#firstname', 120);
        $I->fillField('#firstname', 'John');
        $I->fillField('#lastname', 'Doe');
        $I->selectOption('#role', 'Read Only');
        $I->selectOption('#client', 'Not assigned to a client');
        $I->fillField('#user', 'john@doe.com');
        $I->fillField('#phone', '1234567890');
        $I->fillField('#jobTitle', 'Testing');
        $I->fillField('#jobLevel', 'Testing');
        $I->fillField('#department', 'Testing');
        $I->click('Invite User');
        echo $I->grabPageSource();
        $I->waitForElement('.growl', 120);
        $I->wait(2);
        $I

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

עכשיו בואו נראה מה הבדיקה מוודאת, ואיך היינו יכולים לגשת לזה אחרת:

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

  2. הבדיקה מוודאת שיש ב HTML אלמנטים של טופס עם המזהים שמופיעים בקוד הבדיקה.

  3. הבדיקה מוודאת שבדף שחוזר מהטופס יש הודעה שאומרת שמשתמש נוצר בהצלחה.

  4. הבדיקה מוודאת שהטופס מוגש כשניגשים ל URL שמופיע בקוד הבדיקה.

וכן יש גם הרבה דברים שהבדיקה לא מוודאת ואולי היה לנו מעניין לוודא אותם:

  1. אין בדיקה שמשתמש אכן נוצר בבסיס הנתונים.

  2. אין בדיקה שפרטי המשתמש שנוצר קשורים לפרטים שהוזנו בטופס.

  3. אין בדיקה שפרטים מסוימים יובילו לכישלון ביצירת משתמש, ובאיזה מצבים.

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

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

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