כתיבת בדיקות של מעקב סינתטי לשירותים באמצעות Gemini

1. מבוא

ב-codelab הזה נראה איך משתמשים בתכונה עזרה בכתיבה כדי ליצור בדיקות של מעקב סינתטי לשירותים קיימים.

מה עושים...

  • תפרסו API ב-Google Cloud Run, שישמש כבסיס לשירות שנבדוק.
  • לאחר מכן תכתבו Synthetic Monitor, שהיא תכונה של Cloud Monitoring.
  • תשתמשו בתכונה 'עזרה בכתיבה' כדי לכתוב את המוניטור הסינתטי.

מה תלמדו...

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

מה צריך...

  • דפדפן האינטרנט Chrome
  • חשבון Gmail
  • פרויקט ב-Cloud עם חיוב מופעל
  • ‫Gemini Code Assist מופעל בפרויקט שלכם ב-Cloud

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

‫2. הגדרה

עכשיו נפעיל את Gemini for Cloud בפרויקט שלנו ב-Google Cloud. כך עושים את זה:

  1. נכנסים לכתובת https://console.cloud.google.com ומוודאים שבחרתם את הפרויקט ב-Google Cloud שבו אתם מתכננים לעבוד במעבדה הזו. לוחצים על הסמל של Gemini בפינה השמאלית העליונה.

28f084ec1e159938.png

  1. חלון הצ'אט של Gemini for Cloud ייפתח בצד שמאל של המסוף. לוחצים על הלחצן 'הפעלה' כמו שמוצג למטה. אם לא מופיע הלחצן הפעלה ומופיע במקומו ממשק של Chat, סביר להניח שכבר הפעלתם את Gemini for Cloud בפרויקט, ואתם יכולים לעבור ישירות לשלב הבא.

e8df9adc4ea43a37.png

  1. אחרי שמפעילים אותו, אפשר לשאול את Gemini for Cloud שאילתה או שתיים כדי לבדוק אותו. מוצגות כמה שאילתות לדוגמה, אבל אפשר לנסות את השאילתה הבאה What is Synthetic Monitoring?

9859ea86a8310cb.png

‫Gemini for Cloud ייתן תשובה לשאלה שלכם. אפשר לעיין ברשימת מסמכי העזר שסיפקנו כדי ללמוד איך לכתוב בדיקות סינתטיות ב-Google Cloud.

כדי לסגור את חלון הצ'אט של Gemini for Cloud, לוחצים על הסמל f68286b2b2ea5c0a.png בפינה השמאלית העליונה.

‫3. פריסת דוגמה של Inventory API ב-Google Cloud Run

לפני שנתחיל לכתוב את הבדיקות, נצטרך API לדוגמה שנוכל לבדוק. לשם כך, נכתוב ממשק API פשוט למלאי, שנפרוס ב-Google Cloud Run.

אנחנו נשתמש ב-Cloud Shell IDE, סביבת פיתוח מנוהלת מלאה שמבוססת על Code OSS. הסביבה כוללת את התוסף Cloud Code IDE, שמאפשר לעבוד ביעילות עם שירותי Google Cloud. כך עושים את זה:

  1. עוברים אל ide.cloud.google.com. יכול להיות שיעבור זמן מה עד שסביבת הפיתוח המשולבת תופיע, אז כדאי לחכות בסבלנות.
  2. לוחצים על הלחצן Cloud Code - Sign in (קוד בענן – כניסה) בשורת הסטטוס התחתונה, כמו שמוצג. נותנים הרשאה לפלאגין לפי ההוראות. אם בשורת המצב מופיע הכיתוב Cloud Code - no project, בוחרים באפשרות הזו ואז בוחרים את הפרויקט הספציפי ב-Google Cloud שרוצים לעבוד איתו.

6f5ce865fc7a3ef5.png

  1. לוחצים על הלחצן Gemini בפינה השמאלית התחתונה כמו שמוצג, ובוחרים בפעם האחרונה את פרויקט Google Cloud הנכון. אם תתבקשו להפעיל את Cloud AI Companion API, תצטרכו לעשות זאת כדי להמשיך.
  2. אחרי שבוחרים את פרויקט Google Cloud, מוודאים שהוא מופיע בהודעת הסטטוס של Cloud Code בסרגל הסטטוס, וגם ש-Code Assist מופעל בצד ימין בסרגל הסטטוס, כמו שמוצג כאן:

709e6c8248ac7d88.png

  1. לוחצים על שם הפרויקט ב-Google Cloud בסרגל הסטטוס שבתחתית המסך.

f151759c156c124e.png

  1. תוצג רשימה של אפשרויות. לוחצים על New Application (אפליקציה חדשה) מהרשימה שלמטה.

91ea9836f38b7f74.png

  1. בוחרים באפשרות Cloud Run.
  2. בוחרים את תבנית האפליקציה Python (Flask): Cloud Run.
  3. שומרים את האפליקציה החדשה במיקום הרצוי.
  4. תוצג הודעה שמאשרת שהבקשה נוצרה, וייפתח חלון חדש עם הבקשה שנטענה, כמו שמוצג בהמשך. קובץ README.md ייפתח. אפשר לסגור את התצוגה הזו עכשיו.

ed250f23b0e4fee8.png

  1. ב-Explorer, עוברים לקובץ app.py ומחליפים אותו בתוכן שמוצג בהמשך:
from flask import Flask, jsonify, request

app = Flask(__name__)

inventory = [
    {
        'id': 1,
        'name': 'Item 1',
        'quantity': 10
    },
    {
        'id': 2,
        'name': 'Item 2',
        'quantity': 20
    },
    {
        'id': 3,
        'name': 'Item 3',
        'quantity': 30
    }
]

@app.route('/inventory', methods=['GET'])
def get_inventory():
    return jsonify(inventory)

@app.route('/inventory/<int:id>', methods=['GET'])
def get_inventory_item(id):
    for item in inventory:
        if item['id'] == id:
            return jsonify(item)
    return jsonify({'error': 'Item not found'}), 404

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
  1. הגיע הזמן לפרוס את Inventory API ב-Cloud Run. צריך להפעיל סשן חדש של Terminal מ-Cloud Shell IDE דרך סמל התפריט בפינה הימנית העליונה. לוחצים על סמל התפריט ואז על Terminal → New Terminal כמו שמוצג למטה:

289173c68f1addb5.png

  1. בסשן של הטרמינל, מריצים את הפקודה הבאה:
gcloud run deploy --source .
  1. הפקודה שלמעלה תבקש לבחור region לפריסה, צריך לבחור באפשרות us-central1. תתבקשו לאשר את unauthenticated invocations. כדי לאשר, תצטרכו לומר y.
  2. אחרי שהשירות יופעל בהצלחה, תתקבל כתובת URL של השירות. רושמים את זה.

4. בדיקה של Inventory API

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

SERVICE_URL/inventory

צריכים להיות 3 פריטים במלאי בהתאם לנתוני הדוגמה בשירות. דוגמה לתשובה:

[
  {
    "id": 1,
    "name": "Item 1",
    "quantity": 10
  },
  {
    "id": 2,
    "name": "Item 2",
    "quantity": 20
  },
  {
    "id": 3,
    "name": "Item 3",
    "quantity": 30
  }
]

עכשיו אנחנו יכולים לאחזר פריט מלאי ספציפי באמצעות כתובת ה-URL שבהמשך. הפונקציה הזו אמורה להחזיר את פריט המלאי עם הערך 1 במאפיין id.

SERVICE_URL/inventory/1

התגובה אמורה להיות דומה לזו:

{
  "id": 1,
  "name": "Item 1",
  "quantity": 10
}

לבסוף, אפשר לנסות לאחזר פריט מלאי שלא קיים.

SERVICE_URL/inventory/200

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

{
  "error": "Item not found"
}

עכשיו אפשר לכתוב את הבדיקות של Synthetic Monitoring ב-Cloud Monitoring בעזרת Gemini.

5. Synthetic Monitoring in Google Cloud

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

כשיוצרים בדיקה סינתטית, פורסים פונקציית Cloud Functions מדור שני שמבוססת על Cloud Run. הפונקציה צריכה להיכתב ב-Node.js ולהסתמך על מסגרת Synthetics SDK בקוד פתוח. ‫Cloud Monitoring מפיץ את המסגרת הזו ומנהל אותה.

‫Cloud Monitoring תומך בסוגים הבאים של בדיקות סינתטיות:

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

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

אנחנו נעזר ב-Gemini, ובמיוחד בתכונה Help Me Write שתספק לנו את הקוד הראשוני לבדיקות, כדי שנוכל להשתמש בו לבדיקה וגם כדי לבנות עליו תכונות נוספות. בואו נתחיל.

6. כתיבת הכלי Synthetic Monitor לתרחישי בדיקה של Inventory API

עכשיו נעבור אל מסוף Cloud כדי לכתוב את המוניטור הסינתטי.

נכנסים לדף Synthetic Monitoring במסוף Cloud. יוצג הדף שמופיע בהמשך:

96bfce88f55442f3.png

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

af4dde3e9e0a5a16.png

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

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

a13e78db15b37dd3.png

בתיבת העריכה של ההנחיה, משתמשים בהנחיה כמו זו שמופיעה למטה:

Help me write Node.js based synthetic test script with the assert module that performs the following tests:
1. A GET operation on SERVICE_URL/inventory. The http response code returned should be 200. 
2. A GET operation on SERVICE_URL/inventory/1. The http response code returned should be 200. The response data is JSON format. It should be a single object with attributes as follows: "id" value should be 1, "name" value should be "Item 1" and "quantity" value should be 10.
3. A GET operation on SERVICE_URL/inventory/200. The https response code returned should be 404. The response data is in JSON format. It should be a single object with attributes as follows: "error" value should be "Item not found". 

שימו לב שסיפקנו 3 תרחישי בדיקה, ועליכם להחליף את הערך SERVICE_URL בשם השירות בפועל של Cloud Run עבור השירות שלכם.

אחרי שלוחצים על GENERATE (יצירה), Gemini ייצור את הקוד של חבילת הבדיקה וגם את הקובץ package.json, כמו שמוצג למטה. יכול להיות שהקוד שיווצר יהיה שונה מהקוד שמופיע בהמשך. מעיינים בקוד ובקבצים של יחסי התלות בקובץ package.json.

d19340c357f620bd.png

לוחצים על INSERT INTO CLOUD FUNCTION (הוספה ל-Cloud Function). יופיע טופס ליצירת פונקציה ב-Cloud Functions עם הערכים הנדרשים.

d70e50624a09149a.png

לוחצים על APPLY FUNCTION ואז על הלחצן CREATE. בדוגמה הזו לא בחרנו אף הגדרה של ערוץ התראות, אבל אתם יכולים לבחור הגדרה כזו.

תהליך היצירה של פונקציה של Cloud Functions יתחיל ברקע. הפעולה הזו עשויה להימשך כמה דקות, אז כדאי לחכות בסבלנות.

1b07702ea5ac5bdb.png

אחרי שפורסים בהצלחה את הפונקציה ב-Cloud Functions, ‏ Cloud Monitoring מתחיל להפעיל את ה-Synthetic Monitor בשבילכם.

בהתחלה לא יופיעו קריאות, כמו שרואים בתמונה הבאה:

dac473269a289a3b.png

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

dc2d7dd98277fbcc.png

אם לוחצים על השם של הכלי לניטור סינתטי (למשל s1), מוצגות ההרצות השונות כמו בדוגמה הבאה:

8369a02b413d12cc.png

7. מעולה!

הצלחתם לפרוס API לדוגמה ב-Google Cloud Run ולכתוב בדיקות של ניטור סינתטי כדי לאמת את הפונקציונליות של השירות. במהלך התהליך, השתמשת ב-Gemini כדי ליצור את הקוד של חבילת הבדיקה.

8. מסמכי עזר