Написание синтетических тестов мониторинга для ваших сервисов с использованием Gemini

1. Введение

В этом практическом занятии мы рассмотрим использование функции «Помогите мне написать» для создания синтетических тестов мониторинга для ваших существующих сервисов.

Что вы будете делать...

  • Вам предстоит развернуть API в Google Cloud Run, который послужит основой для нашего сервиса, который мы будем тестировать.
  • Затем вам предстоит написать синтетический монитор, что является одной из функций облачного мониторинга.
  • Для написания синтетического монитора вам потребуется использовать функцию «Помогите мне написать».

Что вы узнаете...

  • Что такое синтетический мониторинг.
  • Как использовать функцию «Помогите мне написать» в Gemini в режиме синтетического мониторинга для создания тестовых случаев, которые будут проверять основную функциональность сервиса.

Что вам понадобится...

  • Веб-браузер Chrome
  • Аккаунт Gmail
  • Облачный проект с включенной функцией выставления счетов.
  • Функция Gemini Code Assist включена для вашего облачного проекта.

Эта лабораторная работа предназначена для разработчиков всех уровней, включая начинающих. Хотя пример приложения написан на языке Python, вам не нужно быть знакомым с программированием на Python, чтобы понять, что происходит.

2. Настройка

Теперь мы включим Gemini for Cloud в нашем проекте Google Cloud. Следуйте приведенным ниже инструкциям:

  1. Перейдите по ссылке https://console.cloud.google.com и убедитесь, что вы выбрали проект Google Cloud, с которым планируете работать в рамках этой лабораторной работы. Нажмите на значок Open 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. Разверните пример API для управления запасами в Google Cloud Run.

Прежде чем приступить к написанию тестов, нам понадобится пример API, который мы сможем протестировать. Для этого мы напишем простой API для управления запасами, который развернем в Google Cloud Run .

Мы будем использовать Cloud Shell IDE — полностью управляемую среду разработки на основе Code OSS . В состав среды входит расширение Cloud Code IDE Extension, которое делает работу с сервисами Google Cloud более эффективной. Следуйте приведенным ниже инструкциям:

  1. Перейдите по адресу ide.cloud.google.com . Возможно, потребуется некоторое время для отображения IDE, поэтому, пожалуйста, наберитесь терпения.
  2. Нажмите на кнопку « Cloud Code — Войти» в нижней строке состояния, как показано на рисунке. Авторизуйте плагин в соответствии с инструкциями. Если в строке состояния отображается «Cloud Code — нет проекта» , выберите этот пункт, а затем выберите конкретный проект Google Cloud из списка проектов, с которыми вы планируете работать.

6f5ce865fc7a3ef5.png

  1. Нажмите на кнопку Gemini в правом нижнем углу, как показано на рисунке, и еще раз выберите правильный проект Google Cloud. Если вас попросят включить API Cloud AI Companion , сделайте это и продолжите.
  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. В проводнике Windows откройте файл 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, используя значок меню в верхнем левом углу. Щелкните значок меню, затем выберите Терминал → Новый Терминал, как показано ниже:

289173c68f1addb5.png

  1. В терминале выполните следующую команду:
gcloud run deploy --source .
  1. Приведенная выше команда запросит информацию о region для развертывания, пожалуйста, выберите us-central1 . Она запросит разрешение на unauthenticated invocations , пожалуйста, разрешите это, набрав y .
  2. После успешного развертывания сервиса будет предоставлен URL-адрес сервиса. Запишите его.

4. Протестируйте API управления запасами.

Теперь вы можете протестировать 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-адрес. В результате вы получите товар с 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 . Ваша функция должна быть написана на Node.js и использовать открытый фреймворк Synthetics SDK . Cloud Monitoring распространяет и управляет этим фреймворком.

Облачный мониторинг поддерживает следующие типы синтетических мониторов:

В процессе выполнения этих синтетических тестов система облачного мониторинга выполняет большую часть работы. Она отвечает за следующее:

  • Периодическое выполнение вашей облачной функции.
  • Сбор и хранение результатов каждого выполнения:
  • Информация об успешном и неудачном выполнении, такая как сообщение об ошибке, тип ошибки и строка кода.
  • Время выполнения
  • Журналы
  • Метрики

Мы воспользуемся помощью Gemini, а именно функцией Help Me Write , которая предоставит нам исходный код для тестов, чтобы мы могли использовать его для тестирования и разработки дополнительных функций. Давайте начнём.

6. Разработка синтетического монитора для тестовых случаев API управления запасами.

Теперь мы перейдём в облачную консоль, чтобы написать наш синтетический монитор.

Перейдите на страницу синтетического мониторинга в Cloud Console. Откроется страница, показанная ниже:

96bfce88f55442f3.png

Нажмите на ссылку «СОЗДАТЬ СИНТЕТИЧЕСКИЙ МОНИТОР» на странице выше. Откроется форма настройки, как показано ниже:

af4dde3e9e0a5a16.png

Мы указали имя s1 , но вы можете выбрать любое другое имя. Обратите внимание на кнопку «ПОМОГИТЕ МНЕ, КОД» на экране выше. Нажмите на неё.

При этом появится всплывающее окно, в котором вам потребуется указать тестовые сценарии, которые вы хотите выполнить, чтобы убедиться в корректной работе 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 Service для вашей службы.

После нажатия кнопки GENERATE , Gemini сгенерирует код набора тестов и файл package.json , как показано ниже. Сгенерированный для вас код может отличаться от показанного ниже. Ознакомьтесь с кодом и файлами зависимостей в файле package.json .

d19340c357f620bd.png

Нажмите кнопку «Вставить в облачную функцию» . Откроется форма создания облачной функции, в которой уже будут заполнены необходимые значения.

d70e50624a09149a.png

Нажмите кнопку «ПРИМЕНИТЬ ФУНКЦИЮ» , а затем кнопку « СОЗДАТЬ» . В этом примере мы не выбирали конфигурацию канала оповещений, но вы можете выбрать ее по своему усмотрению.

Это запустит процесс создания функции Google Cloud Function в фоновом режиме. Это может занять несколько минут, поэтому наберитесь терпения.

1b07702ea5ac5bdb.png

После успешного развертывания облачной функции система облачного мониторинга начнет запускать для вас синтетический монитор.

Вначале вы увидите, что вызовов нет, как показано ниже:

dac473269a289a3b.png

После запуска отдельных тестов вы сможете увидеть результаты их выполнения. На скриншоте ниже показано, что тесты проходят успешно:

dc2d7dd98277fbcc.png

Если вы щёлкнете по названию синтетического монитора (например, s1), отобразятся различные варианты его выполнения, как показано ниже:

8369a02b413d12cc.png

7. Поздравляем!

Поздравляем! Вы успешно развернули пример API в Google Cloud Run и написали синтетические тесты мониторинга для проверки функциональности сервиса. В процессе вы использовали Gemini для генерации кода для набора тестов.

8. Справочные документы