יצירת בדיקות E2E ב-Playwright באמצעות AI: תיאור והטמעה

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אוטומציה של בדיקות end-to-end: היכן הרגרסיה נתקעת

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

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

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

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

Playwright סוגר בדיוק את החצי השני של המשימה — נבחן כיצד אוטומציה של בדיקות end-to-end נבנית כך שריצה לפני שחרור תימשך דקות, ושהיא תזכה לאמון.

מה משתנה אחרי ההטמעה: כיסוי, מהירות, יציבות

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

אחרי הטמעת יצירה ותחזוקה של בדיקות, שיעור האוטומציה עולה ל־80–90% מתרחישי הקצה-לקצה. הסט מנוהל על Playwright: התרחישים מתוארים דרך פעולות המשתמש, ולכן דרישה חדשה הופכת לבדיקה תוך דקות, ולא תוך יום עבודה ידני. הריצה מתבצעת במקביל, וזמן הרגרסיה מתקצר משעות לעשרות דקות.

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

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

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

דרכים ליצירת בדיקות: אפשרויות, מגבלות, בחירה

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

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

כיצד בוחרים גישה

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

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

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

הטמעת אוטומציית בדיקות: שלבי העבודה ההנדסית

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

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

  2. מפת תרחישים. מסמנים מסלולים קריטיים לפי שלבים: נתוני קלט, מצב המערכת לפני ואחרי, נקודות כשל. לכל אחד מתעדים תוצאה צפויה וקבוצת נתוני בדיקה.

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

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

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

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

ארטיפקטים של ההטמעה: סכמות, קונפיגורציות, נהלים

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

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

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

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

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

מה בדיוק הוטמע באוטומציה

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

מדדים לפני ואחרי

מדד לפני אחרי
משך הרגרסיה יומיים 40 דקות
יציבות הריצות חלק מהנפילות על נתונים וסביבה כ-97% ריצות מוצלחות
ניתוח נפילות חיפוש ידני של הסיבה בלוגים טרייס, צילומי מסך ווידאו לכל נפילה

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

במה נבדלת יצירת בדיקות מהקלטת מאקרו?

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

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

היצירה יוצאת ממשמעות השלב: המודל מקבל תיאור תרחיש בשפה אנושית ומרכיב בדיקה סביב הכוונה — מה המשתמש עושה, איזה מצב צפוי, מה נחשב להצלחה. בתרחיש ב-Playwright זה מתבטא דרך התפקיד של האלמנט, הטקסט הנראה שלו ובדיקות נגישות, ולא דרך נתיב קשיח במרקאפ.

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

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

ספקות טכניים: יציבות, תמיכה, סקיילינג

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

הבדיקות ייפלו בכל שינוי בפריסה?

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

מאיפה מגיעים נתוני הבדיקה?

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

האם צריך סטנד נפרד?

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

מה קורה אחרי ההעברה ואיך הכיסוי מתסקל?

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

נדון במשימה ונחזור עם הערכה ותוכנית

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

  • רשימת תרחישי משתמש מרכזיים: מה חייב לעבוד אחרי כל שחרור ומה נבדק כיום ידנית
  • גישה לריפוזיטורי או לסטנד: מבנה הפרויקט, הסטאק, בדיקות קיימות וכיצד הן מורצות
  • סכמת הסביבות: היכן נבנית ומופרסת הגרסה, אילו נתונים וחשבונות משמשים בבדיקות
  • דרישות להרשאות ולעבודה עם נתונים: האם מותר לכתוב לבסיס הבדיקות, האם יש קוים סגורים, האם נדרשת הרשאה ייעודית
  • קריטריוני קבלה לקטע הפיילוט ומגבלות לוחות זמנים — לפי איזה סימן אתם מגדירים שלב כסגור

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

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