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

1. 简介

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

实践内容…

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

学习内容…

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

所需条件…

  • Chrome 网络浏览器
  • Gmail 账号
  • 启用了结算功能的 Cloud 项目
  • 已为您的 Cloud 项目启用 Gemini Code Assist

本实验的适用对象为各种水平的开发者,包括新手。尽管示例应用使用的是 Python 语言,但您无需熟悉 Python 编程就能理解代码内容。

2. 设置

现在,我们将在 Google Cloud 项目中启用 Gemini for Cloud。请按下面给出的步骤操作:

  1. 访问 https://console.cloud.google.com,并确保您已选择计划用于本实验的 Google Cloud 项目。点击显示在右上角的“打开 Gemini”图标。

28f084ec1e159938

  1. 云端专用 Gemini 聊天窗口会在控制台右侧打开。点击“启用”按钮,如下所示。如果您没有看到启用按钮,而是看到了 Chat 界面,可能是因为您已经为项目启用了 Gemini for Cloud,可以直接执行下一步。

e8df9adc4ea43a37.png

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

9859ea86a8310cb.png

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

你可以点击右上角的 f68286b2b2ea5c0a.png 图标关闭“云端专用 Gemini”聊天窗口。

3. 在 Google Cloud Run 上部署示例 Inventory API

在编写测试代码之前,我们需要一个示例 API 进行测试。为此,我们将编写一个简单的 Inventory 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

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

709e6c8248ac7d88

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

f151759c156c124e.png

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

91ea9836f38b7f74

  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. 是时候将 Inventory API 部署到 Cloud Run 了。我们需要通过左上角的菜单图标,从 Cloud Shell IDE 启动新的终端会话。点击菜单图标,然后点击终端 → New Terminal,如下所示:

289173c68f1addb5

  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 Functions 函数。您的函数必须使用 Node.js 编写,并依赖于开源 Synthetics SDK 框架。Cloud Monitoring 分发和管理此框架。

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

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

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

我们将请 Gemini 帮忙,特别是 Help Me Write 功能,它可以为我们提供初始测试代码,以便我们可以用它来进行测试,并在其基础上构建其他功能。我们开始吧。

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

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

访问 Cloud Console 中的 Synthetic Monitoring 页面。系统随即会打开如下所示的页面:

96bfce88f55442f3

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

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 服务名称。

点击 GENERATE(生成)后,Gemini 也会生成测试套件代码和 package.json 文件,如下所示。系统为您生成的代码可能与您在下方看到的代码不同。查看 package.json 文件中的代码和依赖项文件。

d19340c357f620bd.png

点击插入 Cloud Functions 函数。系统将打开一个 Cloud Functions 函数创建表单,其中填充了必要的值。

d70e50624a09149a.png

依次点击应用函数创建按钮。我们没有在此示例中选择任何提醒渠道配置,但您可以自由选择。

这会开始在后台创建 Google Cloud Functions 函数。这可能需要几分钟的时间,请耐心等待。

1b07702ea5ac5bdb.png

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

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

dac473269a289a3b.png

当有特定的运行作业后,您将能够看到不同的执行作业。以下屏幕演示了测试正在通过:

dc2d7dd98277fbcc.png

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

8369a02b413d12cc

7. 恭喜!

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

8. 参考文档