使用 Gemini 編寫服務的綜合監控測試

1. 簡介

在本程式碼研究室中,我們將瞭解如何使用「幫我寫」功能,為現有服務撰寫綜合監控測試。

執行步驟

  • 您將 API 部署至 Google Cloud Run,做為我們測試服務的基礎。
  • 接著,您會編寫綜合監控器,這是 Cloud Monitoring 的一項功能。
  • 您將使用「幫我寫」功能撰寫合成監控器。

課程內容...

  • 瞭解綜合監控。
  • 瞭解如何在 Synthetic Monitoring 中使用 Gemini 的「幫我寫」功能,撰寫測試案例來驗證核心服務功能。

事前準備

  • Chrome 網路瀏覽器
  • Gmail 帳戶
  • 已啟用計費功能的 Cloud 專案
  • 為雲端專案啟用 Gemini Code Assist

本實驗室適合各種程度的開發人員,包括初學者。雖然範例應用程式是以 Python 語言編寫,但您不需要熟悉 Python 程式設計,也能瞭解實際情況。

2. 設定

我們現在要在 Google Cloud 專案中啟用 Gemini for 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. 在 Google Cloud Run 部署範例 Inventory API

在開始編寫測試之前,我們需要一個可供測試的 API 範例。為此,我們將編寫簡單的庫存 API,並部署至 Google Cloud Run

我們將使用 Cloud Shell IDE,這是以 Code OSS 為基礎的全代管開發環境。這個環境內建 Cloud Code IDE 擴充功能,可有效率地使用 Google Cloud 服務。請按照下列步驟操作:

  1. 前往 ide.cloud.google.com。IDE 可能需要一段時間才會顯示,請耐心等候。
  2. 點選底部狀態列中的「Cloud Code - Sign in」按鈕,如下圖所示。依指示授權外掛程式。如果狀態列顯示「Cloud Code - no project」,請選取該項目,然後從專案清單中選取要使用的特定 Google Cloud 專案。

6f5ce865fc7a3ef5.png

  1. 如圖所示,按一下右下角的「Gemini」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. 在檔案總管中前往 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. 現在要將目錄 API 部署至 Cloud Run。我們需要透過左上角的選單圖示,從 Cloud Shell IDE 啟動新的終端機工作階段。按一下選單圖示,然後依序點選「Terminal」→「New Terminal」,如下所示:

289173c68f1addb5.png

  1. 在終端機工作階段中,輸入下列指令:
gcloud run deploy --source .
  1. 上述指令會詢問要部署的 region,請選擇 us-central1。系統會要求允許 unauthenticated invocations,請說出 y 允許。
  2. 服務部署完成後,系統會提供服務網址。請記下該值。

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
  }
]

我們現在可以透過下方網址擷取特定目錄項目。這應該會傳回 id 值為 1 的商品。

SERVICE_URL/inventory/1

回覆內容大致如下:

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

最後,我們可以嘗試擷取不存在的商品目錄項目。

SERVICE_URL/inventory/200

由於沒有 id 值為 200 的商品目錄項目,因此系統應會傳回錯誤訊息。回覆內容大致如下:

{
  "error": "Item not found"
}

現在我們已準備好在 Gemini 的協助下,於 Cloud Monitoring 中編寫綜合監控測試。

5. Google Cloud 中的綜合監控

說明文件所述,合成監控器可讓您定義要測試的內容和測試順序。舉例來說,您可以測試應用程式的登入頁面、電子商務商店的結帳程序,或是應用程式對第三方服務發出的 API 呼叫。

建立綜合監控時,您會部署以 Cloud Run 為基礎的第 2 代 Cloud Function。函式必須以 Node.js 編寫,並依附開放原始碼的 Synthetics SDK 架構。Cloud Monitoring 會發布及管理這個架構。

Cloud Monitoring 支援下列類型的綜合監控器:

執行這些綜合監控項目時,Cloud Monitoring 會執行許多繁重的工作。負責:

  • 定期執行 Cloud Functions。
  • 收集並儲存每次執行的結果:
  • 成功和失敗資訊,例如錯誤訊息、錯誤類型和程式碼行
  • 執行時間
  • 記錄
  • 指標

我們將使用 Gemini,特別是 Help Me Write 功能,取得測試的初始程式碼,以便進行測試,並在此基礎上建構額外功能。我們開始吧。

6. 為 Inventory API 測試案例編寫綜合監控項目

現在我們要前往 Cloud Console,編寫綜合監控器。

前往 Cloud 控制台的「綜合監控」頁面。系統會顯示如下所示的頁面:

96bfce88f55442f3.png

按一下上述頁面中的「CREATE SYNTHETIC MONITOR」(建立合成監控) 連結。系統會顯示如下所示的設定表單:

af4dde3e9e0a5a16.png

我們已提供名稱「s1」,但您可以選擇任何其他名稱。請注意上方畫面中的「幫我編寫程式碼」按鈕。按一下該按鈕。

系統會顯示彈出式視窗,您必須提供提示,說明要執行的測試案例,確保 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 服務名稱。

按一下「生成」後,Gemini 會生成測試套件程式碼和 package.json 檔案,如下所示。為您生成的程式碼可能與下方顯示的程式碼不同。查看 package.json 檔案中的程式碼和依附元件檔案。

d19340c357f620bd.png

按一下「INSERT INTO CLOUD FUNCTION」(插入到 Cloud Functions)。系統會顯示 Cloud Functions 建立表單,並為您填入必要值。

d70e50624a09149a.png

依序點選「套用函式」和「建立」按鈕。在本範例中,我們未選擇任何警報管道設定,但您可以自由選取。

系統會在背景啟動 Google Cloud 函式建立程序。這項作業可能需要幾分鐘,請耐心等候。

1b07702ea5ac5bdb.png

Cloud 函式部署完成後,Cloud Monitoring 就會開始為您叫用綜合監控項目。

一開始您會看到沒有任何呼叫,如下所示:

dac473269a289a3b.png

一旦有特定執行作業,您就能查看各種執行作業。下圖顯示測試已通過:

dc2d7dd98277fbcc.png

按一下「綜合監控」名稱 (例如 s1),就會顯示各種執行作業,如下所示:

8369a02b413d12cc.png

7. 恭喜!

恭喜!您已成功將範例 API 部署至 Google Cloud Run,並編寫綜合監控測試來驗證服務功能。過程中,您運用 Gemini 生成測試套件的程式碼。

8. 參考文件