Escribir pruebas de supervisión sintética para tus servicios con Gemini

1. Introducción

En este codelab, veremos el uso de la función Ayúdame a escribir para crear pruebas de supervisión sintética para tus servicios existentes.

Actividades

  • Implementarás una API en Google Cloud Run, que actuará como base para el servicio que probaremos.
  • Luego, escribirás un monitor sintético, que es una función de Cloud Monitoring.
  • Usarás la función Ayúdame a escribir para escribir el monitor sintético.

Qué aprenderás

  • Qué es la supervisión sintética
  • Cómo usar la función Ayúdame a escribir de Gemini en la supervisión sintética para crear casos de prueba que validen la funcionalidad del servicio principal

Qué necesitarás

  • Navegador web Chrome
  • Una cuenta de Gmail
  • Un proyecto de Cloud con la facturación habilitada
  • Gemini Code Assist habilitado para tu proyecto de Cloud

Este lab está dirigido a desarrolladores de todos los niveles, incluidos principiantes. Aunque la aplicación de muestra está en lenguaje Python, no es necesario que sepas programar en ese lenguaje para entender lo que se hace.

2. Configuración

Ahora habilitaremos Gemini para Cloud en nuestro proyecto de Google Cloud. Sigue los pasos que se indican a continuación:

  1. Ve a https://console.cloud.google.com y asegúrate de haber seleccionado el proyecto de Google Cloud con el que planeas trabajar en este lab. Haz clic en el ícono Abrir Gemini que ves en la parte superior derecha.

28f084ec1e159938.png

  1. La ventana del chat de Gemini para Cloud se abrirá en el lado derecho de la consola. Haz clic en el botón Habilitar como se muestra a continuación. Si no ves el botón Habilitar y, en su lugar, ves una interfaz de Chat, es probable que ya hayas habilitado Gemini para Cloud para el proyecto y que puedas ir directamente al siguiente paso.

e8df9adc4ea43a37.png

  1. Una vez que esté habilitado, podrás probar Gemini para Cloud con una o dos consultas. A continuación, se muestran algunas consultas de ejemplo, pero puedes probar la siguiente: What is Synthetic Monitoring?

9859ea86a8310cb.png

Gemini para Cloud te dará la respuesta a tu pregunta. Consulta la lista de documentación de referencia que se proporciona sobre cómo puedes escribir monitores sintéticos en Google Cloud.

Puedes hacer clic en el ícono f68286b2b2ea5c0a.png en la esquina superior derecha para cerrar la ventana de chat de Gemini para Cloud.

3. Implementa una API de Inventory de muestra en Google Cloud Run

Antes de comenzar a escribir con las pruebas, necesitaremos una API de muestra con la que podamos realizar pruebas. Para ello, escribiremos una API de inventario simple que implementaremos en Google Cloud Run.

Usaremos el IDE de Cloud Shell, un entorno de desarrollo completamente administrado y basado en Code OSS. El entorno incluye la extensión de IDE de Cloud Code que hace que trabajar con servicios de Google Cloud sea eficiente. Sigue los pasos que se indican a continuación:

  1. Visita ide.cloud.google.com. Es posible que el IDE demore un tiempo en aparecer, así que ten paciencia.
  2. Haz clic en el botón Cloud Code - Acceder en la barra de estado de la parte inferior como se muestra. Autoriza el complemento según las instrucciones. Si ves "Cloud Code (ningún proyecto)" en la barra de estado, selecciónalo y elige el proyecto específico de Google Cloud de la lista de proyectos con los que planeas trabajar.

6f5ce865fc7a3ef5.png

  1. Haz clic en el botón Gemini en la esquina inferior derecha como se muestra y selecciona una última vez el proyecto de Google Cloud correcto. Si se te solicita que habilites la API de Cloud AI Companion, hazlo y continúa.
  2. Una vez que selecciones tu proyecto de Google Cloud, asegúrate de poder verlo en el mensaje de estado de Cloud Code en la barra de estado y de tener habilitada Code Assist en la barra de estado, como se muestra a continuación:

709e6c8248ac7d88.png

  1. Haz clic en el nombre del proyecto de Google Cloud en la barra de estado que aparece a continuación.

f151759c156c124e.png

  1. Aparecerá una lista de opciones. Haz clic en Aplicación nueva en la lista que aparece a continuación.

91ea9836f38b7f74.png

  1. Selecciona aplicación Cloud Run.
  2. Selecciona la plantilla de aplicación Python (Flask): Cloud Run.
  3. Guarda la aplicación nueva en la ubicación que quieras.
  4. Una notificación confirmará que se creó tu aplicación y se abrirá una nueva ventana con tu aplicación cargada, como se muestra a continuación. Se abrirá un archivo README.md. Ahora puedes cerrar esa vista.

ed250f23b0e4fee8.png

  1. Desde el Explorador, visita el archivo app.py y reemplázalo por el contenido que se muestra a continuación:
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. Llegó el momento de implementar la API de Inventory en Cloud Run. Tendremos que iniciar una nueva sesión de terminal desde el IDE de Cloud Shell mediante el ícono de menú en la parte superior izquierda. Haz clic en el ícono de menú y, luego, en Terminal → Terminal nueva como se muestra a continuación:

289173c68f1addb5.png

  1. En la sesión de la terminal, ejecuta el siguiente comando:
gcloud run deploy --source .
  1. El comando anterior te preguntará sobre un region para implementar. Elige us-central1. Se te pedirá que permitas unauthenticated invocations. Para ello, di y.
  2. Una vez que el servicio se implemente correctamente, proporcionará una URL del servicio. Anótalo.

4. Prueba la API de Inventory

Ahora puedes probar la API de Inventory. Para ello, inicia el navegador y accede a los siguientes extremos:

SERVICE_URL/inventory

Esto debería devolverte 3 elementos de inventario según los datos de muestra en el servicio. La respuesta de muestra se proporciona a continuación:

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

Ahora podemos recuperar un elemento específico del inventario a través de la siguiente URL. Esto debería mostrar el elemento del inventario que tiene el valor id de 1.

SERVICE_URL/inventory/1

La respuesta debería ser similar a la siguiente:

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

Por último, podemos intentar recuperar un elemento de inventario que no existe.

SERVICE_URL/inventory/200

Deberías ver un mensaje de error, ya que no hay ningún elemento de inventario con el valor 200 de id. La respuesta podría ser similar a la siguiente:

{
  "error": "Item not found"
}

Ya está todo listo para escribir nuestras pruebas de supervisión sintética en Cloud Monitoring con la ayuda de Gemini.

5. Supervisión sintética en Google Cloud

Como se indica en la documentación, los monitores sintéticos te permiten definir lo que vas a probar y una secuencia de pruebas. Por ejemplo, puedes probar la página de acceso de tu aplicación, el proceso de confirmación de la compra de tu tienda de comercio electrónico o las llamadas a la API que tu aplicación hace a servicios de terceros.

Cuando creas un monitor sintético, implementas una Cloud Function de 2a gen. que se basa en Cloud Run. Tu función debe estar escrita en Node.js y depender del framework del SDK de Synthetics de código abierto. Cloud Monitoring distribuye y administra este framework.

Cloud Monitoring admite los siguientes tipos de supervisores sintéticos:

Cloud Monitoring realiza mucho trabajo pesado mientras ejecuta estos monitores sintéticos. Es responsable de lo siguiente:

  • Ejecución periódica de tu Cloud Function.
  • Recopila y almacena los resultados de cada ejecución:
  • Información sobre el éxito y el fracaso, como el mensaje de error, el tipo de error y la línea de código
  • Tiempo de ejecución
  • Registros
  • Métricas

Tomaremos la ayuda de Gemini y, específicamente, la función Help Me Write, que nos proporcionará el código inicial para las pruebas, de modo que podamos usar esto para probar y también desarrollar funciones adicionales a partir de él. Manos a la obra.

6. Cómo escribir el monitor sintético para casos de prueba de la API de Inventory

Ahora iremos a la consola de Cloud para escribir nuestro monitor sintético.

Visita la página Supervisión sintética en Cloud Console. Esto hará que aparezca la página como se muestra a continuación:

96bfce88f55442f3.png

Haz clic en el vínculo CREATE SYNTHETIC MONITOR de la página anterior. Aparecerá un formulario de configuración como el que se muestra a continuación:

af4dde3e9e0a5a16.png

Proporcionamos un nombre s1, pero puedes elegir cualquier otro. Observa el botón AYUDAME EL CÓDIGO en la pantalla anterior. Haz clic allí.

Se abrirá una ventana emergente en la que deberás indicar los casos de prueba que deseas ejecutar para asegurarte de que la API de Inventory funcione correctamente.

a13e78db15b37dd3.png

En el cuadro de edición de instrucciones, usa una instrucción como la que se muestra a continuación:

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". 

Ten en cuenta que proporcionamos 3 casos de prueba. Debes reemplazar el valor SERVICE_URL con el nombre real del servicio de Cloud Run para tu servicio.

Una vez que hagas clic en GENERAR, Gemini generará el código del paquete de pruebas y el archivo package.json, como se muestra a continuación. El código generado para ti puede diferir del que ves a continuación. Observa el código y los archivos de dependencia del archivo package.json.

d19340c357f620bd.png

Haz clic en INSERTAR EN CLOUD FUNCTION. Aparecerá un formulario de creación de Cloud Functions con los valores necesarios propagados.

d70e50624a09149a.png

Haz clic en APLICAR FUNCIÓN y, luego, en el botón CREAR. No elegimos ninguna configuración de canal de alertas en este ejemplo, pero puedes seleccionarla tú.

Esta acción iniciará el proceso de creación de la función de Google Cloud Function en segundo plano. Esto puede tardar unos minutos, así que ten paciencia.

1b07702ea5ac5bdb.png

Una vez que la Cloud Function se haya implementado correctamente, Cloud Monitoring comenzará la tarea de invocar el monitor sintético por ti.

Al principio, verás que no hay invocaciones, como se muestra a continuación:

dac473269a289a3b.png

Una vez que haya ejecuciones específicas, podrás ver las distintas ejecuciones. En la siguiente pantalla, se demuestra que las pruebas se aprobaron:

dc2d7dd98277fbcc.png

Si haces clic en el nombre del monitor sintético (por ejemplo, s1), se mostrarán las distintas ejecuciones como se muestra a continuación:

8369a02b413d12cc.png

7. ¡Felicitaciones!

Felicitaciones. Implementaste correctamente una API de muestra en Google Cloud Run y escribiste pruebas de supervisión sintética para validar la funcionalidad del servicio. Durante el proceso, usaste Gemini para generar el código del paquete de pruebas.

8. Documentos de referencia