Pisanie testów monitorowania syntetycznego na potrzeby usług z użyciem Gemini

1. Wprowadzenie

W tym laboratorium kodowania przyjrzymy się wykorzystaniu funkcji Pomóż mi pisać do tworzenia testów monitorowania syntetycznego dla istniejących usług.

Co musisz zrobić...

  • Wdrożysz interfejs API w Google Cloud Run, który będzie podstawą usługi, którą przetestujemy.
  • Następnie napiszesz monitor syntetyczny, który jest funkcją Cloud Monitoring.
  • Do napisania monitora syntetycznego użyjesz funkcji Pomóż mi pisać.

Czego się nauczysz...

  • Czym jest monitorowanie syntetyczne.
  • Jak używać funkcji Pomóż mi pisać w Gemini w monitorowaniu syntetycznym do tworzenia przypadków testowych, które będą weryfikować podstawową funkcjonalność usługi.

Co będzie Ci potrzebne...

  • przeglądarki Chrome,
  • konto Gmail,
  • Projekt w chmurze z włączonymi płatnościami
  • Usługa Gemini Code Assist jest włączona w Twoim projekcie w Cloud

Ten moduł jest przeznaczony dla deweloperów na wszystkich poziomach zaawansowania, w tym dla początkujących. Chociaż przykładowa aplikacja jest napisana w języku Python, nie musisz znać tego języka, aby zrozumieć, co się dzieje.

2. Konfiguracja

Teraz włączymy Gemini w Cloud w naszym projekcie Google Cloud. Wykonaj te czynności:

  1. Otwórz https://console.cloud.google.com i upewnij się, że masz wybrany projekt Google Cloud, w którym chcesz pracować w tym module. Kliknij ikonę Otwórz Gemini w prawym górnym rogu.

28f084ec1e159938.png

  1. Po prawej stronie konsoli otworzy się okno czatu Gemini w Cloud. Kliknij przycisk Włącz, jak pokazano poniżej. Jeśli nie widzisz przycisku Włącz, a zamiast niego widzisz interfejs czatu, prawdopodobnie masz już włączoną usługę Gemini w Cloud w projekcie i możesz przejść bezpośrednio do następnego kroku.

e8df9adc4ea43a37.png

  1. Po włączeniu możesz przetestować Gemini w Cloud, zadając mu kilka pytań. Wyświetlonych jest kilka przykładowych zapytań, ale możesz wypróbować to: What is Synthetic Monitoring?

9859ea86a8310cb.png

Gemini w Cloud odpowie na Twoje pytanie. Zapoznaj się z listą dokumentacji referencyjnej, która zawiera informacje o tym, jak pisać monitory syntetyczne w Google Cloud.

Aby zamknąć okno czatu Gemini w Cloud, w prawym górnym rogu kliknij ikonę f68286b2b2ea5c0a.png.

3. Wdrażanie przykładowego interfejsu Inventory API w Google Cloud Run

Zanim zaczniemy pisać testy, potrzebujemy przykładowego interfejsu API, który będziemy mogli testować. W tym celu napiszemy prosty interfejs API do zarządzania asortymentem, który wdrożymy w usłudze Google Cloud Run.

Będziemy korzystać z Cloud Shell IDE, w pełni zarządzanego środowiska programistycznego opartego na Code OSS. Środowisko zawiera rozszerzenie Cloud Code IDE, które ułatwia pracę z usługami Google Cloud. Wykonaj te czynności:

  1. Otwórz stronę ide.cloud.google.com. Wyświetlenie środowiska IDE może zająć trochę czasu, więc uzbrój się w cierpliwość.
  2. Na pasku stanu u dołu kliknij przycisk Cloud Code – zaloguj się, jak pokazano na ilustracji. Autoryzuj wtyczkę zgodnie z instrukcjami. Jeśli na pasku stanu widzisz „Cloud Code – brak projektu”, wybierz tę opcję, a następnie wybierz z listy projekt Google Cloud, z którym chcesz pracować.

6f5ce865fc7a3ef5.png

  1. Kliknij przycisk Gemini w prawym dolnym rogu, jak pokazano, i jeszcze raz wybierz właściwy projekt w chmurze Google. Jeśli pojawi się prośba o włączenie interfejsu Cloud AI Companion API, zrób to i przejdź dalej.
  2. Po wybraniu projektu Google Cloud sprawdź, czy jest on widoczny w komunikacie o stanie Cloud Code na pasku stanu oraz czy po prawej stronie na pasku stanu masz włączoną funkcję Code Assist, jak pokazano poniżej:

709e6c8248ac7d88.png

  1. Na pasku stanu poniżej kliknij nazwę projektu Google Cloud.

f151759c156c124e.png

  1. Pojawi się lista opcji. Na liście poniżej kliknij Nowa aplikacja.

91ea9836f38b7f74.png

  1. Wybierz aplikację Cloud Run.
  2. Wybierz szablon aplikacji Python (Flask): Cloud Run.
  3. Zapisz nową aplikację w wybranej lokalizacji.
  4. Pojawi się powiadomienie potwierdzające utworzenie aplikacji, a w nowym oknie otworzy się aplikacja, jak pokazano poniżej. Otworzy się plik README.md. Możesz na razie zamknąć ten widok.

ed250f23b0e4fee8.png

  1. W Eksploratorze otwórz plik app.py i zastąp jego zawartość treścią poniżej:
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. Czas wdrożyć interfejs Inventory API w Cloud Run. Musimy uruchomić nową sesję terminala z IDE Cloud Shell, klikając ikonę menu w lewym górnym rogu. Kliknij ikonę menu, a następnie Terminal → Nowy terminal, jak pokazano poniżej:

289173c68f1addb5.png

  1. W sesji terminala wpisz to polecenie:
gcloud run deploy --source .
  1. Powyższe polecenie spowoduje wyświetlenie pytania o region do wdrożenia. Wybierz us-central1. Pojawi się prośba o zezwolenie na dostęp do unauthenticated invocations. Zezwól na to, mówiąc y.
  2. Po pomyślnym wdrożeniu usługi zostanie podany jej adres URL. Zapisz to.

4. Wypróbuj interfejs Inventory API

Możesz teraz przetestować interfejs Inventory API, uruchamiając przeglądarkę i otwierając te punkty końcowe:

SERVICE_URL/inventory

Powinny zostać zwrócone 3 produkty z asortymentu zgodnie z danymi przykładowymi w usłudze. Przykładowa odpowiedź jest podana poniżej:

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

Możemy teraz pobrać konkretny produkt z asortymentu za pomocą poniższego adresu URL. Powinno to zwrócić produkt, którego wartość id wynosi 1.

SERVICE_URL/inventory/1

Odpowiedź powinna być podobna do tej:

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

Na koniec możemy spróbować pobrać element asortymentu, który nie istnieje.

SERVICE_URL/inventory/200

Powinien pojawić się komunikat o błędzie, ponieważ nie ma produktu z wartością id równą 200. Odpowiedź powinna być podobna do tej:

{
  "error": "Item not found"
}

Możemy teraz pisać testy monitorowania syntetycznego w Cloud Monitoring za pomocą Gemini.

5. Monitorowanie syntetyczne w Google Cloud

Jak podano w dokumentacji, monitory syntetyczne umożliwiają zdefiniowanie tego, co i w jakiej kolejności ma być testowane. Możesz na przykład przetestować stronę logowania aplikacji, proces płatności w sklepie internetowym lub wywołania interfejsu API, które aplikacja wykonuje w usługach innych firm.

Gdy tworzysz monitor syntetyczny, wdrażasz funkcję w Cloud Functions 2 generacji, która jest oparta na Cloud Run. Funkcja musi być napisana w Node.js i korzystać z platformy Synthetics SDK typu open source. Cloud Monitoring dystrybuuje tę platformę i nią zarządza.

Cloud Monitoring obsługuje te typy monitorów syntetycznych:

Cloud Monitoring wykonuje wiele zadań podczas uruchamiania tych monitorów syntetycznych. Odpowiada za:

  • Okresowe wykonywanie funkcji Cloud Function.
  • Zbieranie i przechowywanie wyników każdego wykonania:
  • Informacje o sukcesie i niepowodzeniu, takie jak komunikat o błędzie, typ błędu i wiersz kodu.
  • Czas wykonywania
  • Logi
  • Dane

Skorzystamy z pomocy Gemini, a konkretnie z funkcji Help Me Write, która dostarczy nam początkowy kod testów. Będziemy mogli go użyć do testowania i tworzenia dodatkowych funkcji. Zaczynajmy.

6. Tworzenie monitora syntetycznego na potrzeby przypadków testowych interfejsu API asortymentu

Teraz przejdziemy do Cloud Console, aby napisać monitor syntetyczny.

Otwórz stronę Synthetic Monitoring w konsoli Cloud. Spowoduje to wyświetlenie strony jak poniżej:

96bfce88f55442f3.png

Na powyższej stronie kliknij link UTWÓRZ MONITOR SYNTETYCZNY. Wyświetli się formularz konfiguracji, jak pokazano poniżej:

af4dde3e9e0a5a16.png

Podaliśmy nazwę s1, ale możesz wybrać dowolną inną. Zwróć uwagę na przycisk POMÓŻ MI NAPISAĆ KOD na powyższym ekranie. Kliknij ten element.

Wyświetli się wyskakujące okienko, w którym musisz podać prompt opisujący przypadki testowe, które chcesz wykonać, aby sprawdzić, czy interfejs Inventory API działa prawidłowo.

a13e78db15b37dd3.png

W polu edycji prompta użyj prompta podobnego do tego poniżej:

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

Zwróć uwagę, że podaliśmy 3 przypadki testowe. Wartość SERVICE_URL należy zastąpić rzeczywistą nazwą usługi Cloud Run.

Gdy klikniesz WYGENERUJ, Gemini wygeneruje kod zestawu testów i plik package.json, jak pokazano poniżej. Wygenerowany kod może się różnić od kodu widocznego poniżej. Zapoznaj się z kodem i plikami zależności w pliku package.json.

d19340c357f620bd.png

Kliknij INSERT INTO CLOUD FUNCTION (Wstaw do funkcji Cloud). Spowoduje to wyświetlenie formularza tworzenia funkcji w Cloud Functions z wypełnionymi niezbędnymi wartościami.

d70e50624a09149a.png

Kliknij ZASTOSUJ FUNKCJĘ, a potem przycisk UTWÓRZ. W tym przykładzie nie wybraliśmy żadnej konfiguracji kanału alertów, ale możesz to zrobić.

Spowoduje to rozpoczęcie procesu tworzenia funkcji w Cloud Functions w tle. Może to potrwać kilka minut, więc zachowaj cierpliwość.

1b07702ea5ac5bdb.png

Po wdrożeniu funkcji w Cloud Functions usługa Cloud Monitoring rozpocznie wywoływanie monitora syntetycznego.

Na początku zobaczysz, że nie ma żadnych wywołań, jak pokazano poniżej:

dac473269a289a3b.png

Gdy pojawią się konkretne uruchomienia, będziesz mieć wgląd w różne wykonania. Poniższy ekran pokazuje, że testy zakończyły się powodzeniem:

dc2d7dd98277fbcc.png

Jeśli klikniesz nazwę monitora syntetycznego (np. s1), zobaczysz różne wykonania, jak pokazano poniżej:

8369a02b413d12cc.png

7. Gratulacje!

Gratulacje – udało Ci się wdrożyć przykładowy interfejs API w Google Cloud Run i napisać testy monitorowania syntetycznego, aby sprawdzić działanie usługi. W trakcie tego procesu używasz Gemini do generowania kodu pakietu testów.

8. Dokumentacja