מאגר לוח המחוונים של VTS

כדי לתמוך בלוח מחוונים לאינטגרציה מתמשך, ביצועי וגמיש, יש לתכנן בקפידה את גיבוי לוח המחוונים של VTS עם הבנה חזקה של פונקציונליות מסד הנתונים. Google Cloud Datastore הוא מסד נתונים NoSQL המציע ערבויות ACID טרנזאקטיביות ועקביות בסופו של דבר וכן עקביות חזקה בתוך קבוצות ישויות. עם זאת, המבנה שונה מאוד מ- SQLdatabases (ואפילו Cloud Bigtable); במקום טבלאות, שורות ותאים יש סוגים, ישויות ותכונות.

החלקים הבאים מתארים את מבנה הנתונים ואת דפוסי השאילתות ליצירת backend יעיל לשירות האינטרנט VTS Dashboard.

ישויות

הגופים הבאים מאחסנים סיכומים ומשאבים מריצות בדיקת VTS:

  • ישות מבחן . מאחסן מטא נתונים על בדיקות מבחן מסוים. המפתח שלה הוא שם הבדיקה ותכונותיו כוללות ספירת כשלים, ספירת מעבר ורשימת שברי מקרה הבדיקה ממועד עדכון עבודות ההתראה.
  • ישות הפעלת מבחן . מכיל מטא נתונים מריצות של מבחן מסוים. עליו לאחסן את חותמות זמן ההתחלה והסיום של הבדיקה, מזהה בניית הבדיקה, מספר מקרי הבדיקה שעוברים ונכשלים, סוג הריצה (למשל הגשה מראש, הגשה שלאחר מכן או מקומית), רשימת קישורי יומן, המארח שם המכונה וספירת הכיסוי.
  • ישות מידע על המכשיר . מכיל פרטים על המכשירים המשמשים במהלך ריצת הבדיקה. הוא כולל מזהה בניית מכשיר, שם מוצר, יעד בנייה, סניף ומידע ABI. זה מאוחסן בנפרד מהישות של ריצת הבדיקה כדי לתמוך בהפעלת בדיקות מרובות מכשירים באופן אחד לרבים.
  • ישות הפעלת נקודת פרופיל . מסכם את הנתונים שנאספו לנקודת פרופיל מסוימת במסגרת ריצת מבחן. הוא מתאר את תוויות הציר, שם נקודת הפרופיל, הערכים, הסוג ומצב הרגרסיה של נתוני הפרופיל.
  • ישות כיסוי . מתאר את נתוני הכיסוי שנאספו עבור קובץ אחד. הוא מכיל את המידע על פרויקט Git, נתיב הקובץ ורשימת ספירת הכיסוי בכל שורה בקובץ המקור.
  • ישות הפעלת מקרה מבחן . מתאר את התוצאה של מקרה מבחן מסוים ממבחן, כולל שם מקרה המבחן ותוצאתו.
  • ישות מועדפים של משתמשים . ניתן לייצג כל מנוי משתמש בישות המכילה הפניה לבדיקה ולזהות המשתמש שנוצרה משירות המשתמשים של App Engine. זה מאפשר שאילתות דו כיווניות יעילות (כלומר לכל המשתמשים שמנויים למבחן ולכל הבדיקות המועדפות על ידי משתמש).

קיבוץ ישויות

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

איור 1 . מוצא ישויות מבחן.

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

יתרונות

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

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

מגבלות

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

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

שיקולי קנה מידה

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

מקרי מבחן

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

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

איור 2 . מקרי מבחן יורדים מביצוע בדיקות (לא מומלץ).

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

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

איור 3 . מקרי בדיקה המאוחסנים באופן עצמאי (מומלץ).

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

דפוסי גישה לנתונים

לוח המחוונים של VTS משתמש בדפוסי הגישה לנתונים הבאים:

  • מועדפי משתמשים . ניתן לבקש שאילתה באמצעות פילטר שוויון בישויות המועדפות על המשתמשים שהאובייקט הספציפי למשתמש App Engine הוא מאפיין.
  • רישום מבחן . שאילתה פשוטה של ​​ישויות בדיקה. כדי להפחית את רוחב הפס לצורך עיבוד דף הבית, ניתן להשתמש בהקרנה על ספירות עובר ונכשלות כדי להשמיט את הרישום שעלול להיות ארוך של מזהי מקרה כשל במבחן ומטא נתונים אחרים המשמשים את עבודות ההתראה.
  • מבחן ריצות . שאילתות עבור ישויות הפעלת בדיקה דורשת מיון על המפתח (חותמת זמן) וסינון אפשרי על מאפייני ריצת הבדיקה כגון מזהה build, ספירת העברה וכו 'על ידי ביצוע שאילתת אב קדמון עם מפתח ישות הבדיקה, הקריאה עקבית מאוד. בשלב זה, ניתן לאחזר את כל תוצאות מקרה הבדיקה באמצעות רשימת המזהים המאוחסנים במאפיין ריצת בדיקה; מובטחת שזו גם תוצאה עקבית מאוד מטבעם של פעולות אחסון נתונים.
  • נתוני פרופיל וכיסוי . שאילתה לנתוני פרופיל או כיסוי המשויכים לבדיקה יכולה להיעשות מבלי לאחזר אף נתוני ריצת מבחן אחרים (כגון נתוני פרופיל / כיסוי אחרים, נתוני מקרה מבחן וכו '). שאילתת אב קדמון המשתמשת במבחני הבדיקה ובמפתחות ישויות הריצה תשיג את כל נקודות הפרופיל שנרשמו במהלך ריצת הבדיקה; על ידי סינון על שם נקודת הפרופיל או שם הקובץ, ניתן לאחזר ישות פרופיל או כיסוי יחיד. מטבען של שאילתות קדמוניות, פעולה זו עקבית מאוד.

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