使用 Gemini 为您的服务编写合成监控测试

1. 简介

在此 Codelab 中,我们将了解如何利用帮我写功能为现有服务编写合成监控测试。

实践内容…

  • 您将向 Google Cloud Run 部署一个 API,该 API 将作为我们测试的服务的基础。
  • 然后,您将编写合成监控工具,这是 Cloud Monitoring 的一项功能。
  • 您将使用“帮我写”功能来编写综合监控器。

学习内容…

  • 什么是合成监控。
  • 如何使用 Gemini 的“帮我写”功能在 Synthetic Monitoring 中编写测试用例,以验证核心服务功能。

所需条件…

  • 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 聊天窗口会在控制台右侧打开。点击“启用”按钮,如下所示。如果您没有看到启用按钮,而是看到了聊天界面,可能是因为您已经为项目启用了 Gemini for Cloud,可以直接执行下一步。

e8df9adc4ea43a37.png

  1. 启用 Gemini for Cloud 后,您可以向其发出一两句查询来测试一下。下方显示了几个查询示例,不过您可以尝试以下查询 What is Synthetic Monitoring?

9859ea86a8310cb.png

Gemini for Cloud 会回答您的问题。查看提供的参考文档列表,了解如何在 Google Cloud 中编写合成监控工具。

您可以点击右上角的 f68286b2b2ea5c0a.png 图标关闭 Gemini for Cloud 聊天窗口。

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 - 登录按钮。按照说明对插件进行授权。如果您在状态栏中看到 Cloud Code - no project,请选择该选项,然后从项目列表中选择您打算使用的 Google Cloud 项目。

6f5ce865fc7a3ef5.png

  1. 如图所示,点击右下角的 Gemini 按钮,然后再次选择正确的 Google Cloud 项目。如果系统要求您启用 云 AI Companion API,请按照要求操作,然后继续。
  2. 选择 Google Cloud 项目后,请确保您能够在状态栏的 Cloud Code 状态消息中看到该项目,并且在状态栏右侧看到已启用 Code Assist,如下所示:

709e6c8248ac7d88.png

  1. 点击下方状态栏中的 Google Cloud 项目名称

f151759c156c124e.png

  1. 系统会显示一个选项列表。点击下方列表中的新应用

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. 现在,您可以将商品目录 API 部署到 Cloud Run 了。我们需要通过左上角的菜单图标,从 Cloud Shell IDE 启动新的终端会话。点击菜单图标,然后点击终端 → 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"
}

现在,我们已准备好在 Cloud Monitoring 中借助 Gemini 编写合成监控测试。

5. Google Cloud 中的合成监控

文档中所述,合成监控工具使您可以定义要测试的内容以及测试序列。例如,您可以测试应用的登录页面、网店的结账流程,或是应用对第三方服务进行的 API 调用。

创建合成监控工具时,您需要部署基于 Cloud Run 构建的第 2 代 Cloud Functions 函数。您的函数必须使用 Node.js 编写,并依赖于开源 Synthetics SDK 框架。Cloud Monitoring 会分发和管理此框架。

Cloud Monitoring 支持以下类型的合成监控工具:

Cloud Monitoring 在执行这些合成监控工具时会完成大量繁重的工作。它负责:

  • Cloud Functions 函数的定期执行。
  • 收集并存储每次执行的结果:
  • 成功和失败信息,例如错误消息、错误类型和代码行
  • 执行时间
  • 日志
  • 指标

我们将借助 Gemini,特别是 Help Me Write 功能,为我们提供测试的初始代码,以便我们使用该代码进行测试,并在此基础上构建更多功能。我们开始吧。

6. 为 Inventory API 测试用例编写合成监控工具

现在,我们将前往 Cloud 控制台来编写合成监控器。

访问 Cloud 控制台中的合成监控页面。系统会显示如下所示的页面:

96bfce88f55442f3.png

点击上页中的创建合成监控器链接。系统会显示一个配置表单,如下所示:

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_网址 值替换为您的服务的实际 Cloud Run 服务名称。

点击生成后,Gemini 将生成测试套件代码和 package.json 文件,如下所示。为您生成的代码可能与下方显示的代码有所不同。查看 package.json 文件中的代码和依赖项文件。

d19340c357f620bd.png

点击插入到 Cloud Functions。系统随即会显示 Cloud Functions 创建表单,其中已为您填充必要的值。

d70e50624a09149a.png

点击应用函数,然后点击创建按钮。在此示例中,我们未选择任何提醒渠道配置,但您可以随意选择。

这将在后台启动创建 Google Cloud Function 的流程。这可能需要几分钟的时间,请耐心等待。

1b07702ea5ac5bdb.png

成功部署 Cloud Functions 函数后,Cloud Monitoring 将开始为您调用合成监控工具。

一开始,您会看到没有调用,如下所示:

dac473269a289a3b.png

一旦有具体的跑步活动,您就可以看到各种执行情况。以下屏幕截图显示测试已通过:

dc2d7dd98277fbcc.png

如果您点击合成监控工具名称(例如 s1),系统会显示各种执行情况,如下所示:

8369a02b413d12cc.png

7. 恭喜!

恭喜!您已成功将示例 API 部署到 Google Cloud Run,并编写了合成监控测试来验证该服务的功能。在此过程中,您利用 Gemini 帮助生成了测试套件的代码。

8. 参考文档