1. Einführung
In diesem Lab verwenden Sie Gemini Code Assist, ein KI-gestütztes Tool in Google Cloud, um einer vorhandenen Python-Webanwendung Tests hinzuzufügen und bei den Tests aufgetretene Fehler in dieser Anwendung zu finden und zu beheben. Anschließend verwenden Sie Code Assist, um Tests für neue Funktionen zu erstellen und Code zu generieren, um diese Tests zu bestehen und die App zu erweitern.
Aufgaben
- Sie verwenden den Cloud Shell-Editor, um Code für eine vorhandene Webanwendung herunterzuladen.
- Sie verwenden den Gemini Code Assist-Chat im Cloud Shell-Editor, um allgemeine Fragen zu Google Cloud zu stellen.
- Sie verwenden Gemini Code Assist Inline-Codeunterstützung im Cloud Shell-Editor, um Tests für die Anwendung zu generieren, die Tests auszuführen, Fehler zu finden und zu beheben und dann die Funktionalität der Anwendung zu erweitern.
Lerninhalte
- Gemini Code Assist für verschiedene Entwickleraufgaben wie Testgenerierung und Codegenerierung verwenden.
- Gemini Code Assist verwenden, um mehr über Google Cloud zu erfahren
Du brauchst...
- Chrome-Webbrowser
- Ein Gmail-Konto
- Ein Cloud-Projekt mit aktivierter Abrechnung
- Gemini Code Assist ist für Ihr Cloud-Projekt aktiviert
Dieses Lab richtet sich an Entwickler aller Stufen, auch Anfänger. Die Beispielanwendung ist zwar in der Sprache Python geschrieben, aber Sie müssen nicht mit der Python-Programmierung vertraut sein, um die Situation zu verstehen. Wir konzentrieren uns darauf, uns mit den Funktionen von Gemini Code Assist für Entwickler vertraut zu machen.
2. Einrichtung
Für dieses Lab sollten Sie bereits ein Cloud-Projekt mit aktivierter Abrechnung haben. Wir aktivieren jetzt die Gemini API in unserem Google Cloud-Projekt. Gehen Sie dazu so vor:
- Rufen Sie https://console.cloud.google.com auf und vergewissern Sie sich, dass Sie das Google Cloud-Projekt ausgewählt haben, mit dem Sie für dieses Lab arbeiten möchten. Klicken Sie oben rechts auf das Gemini-Symbol.
- Das Fenster von Gemini für die Cloud Console wird auf der rechten Seite der Console geöffnet. Klicken Sie auf die Schaltfläche Aktivieren, wenn diese unten angezeigt wird. Wenn die Schaltfläche Aktivieren nicht angezeigt wird, sondern stattdessen eine Chat-Oberfläche angezeigt wird, haben Sie Gemini für Cloud bereits für das Projekt aktiviert und können direkt mit dem nächsten Schritt fortfahren.
- Nach der Aktivierung kannst du Gemini ausprobieren, indem du ein oder zwei Abfragen stellst. Es werden einige Beispielabfragen angezeigt, aber Sie können beispielsweise etwas wie Was ist Cloud Run? ausprobieren.
Code Assist antwortet mit einer Antwort auf Ihre Frage. Klicken Sie rechts oben auf das -Symbol, um das Chatfenster von Code Assist zu schließen.
Gemini im Cloud Shell-Editor aktivieren
Gemini Code Assist ist in verschiedenen beliebten IDEs verfügbar und funktioniert ähnlich. In diesem Codelab verwenden Sie den Google Cloud Shell-Editor, der vollständig in Ihrem Webbrowser ausgeführt wird. Sie müssen Gemini im Cloud Shell-Editor aktivieren und konfigurieren. Gehen Sie dazu so vor:
- Starten Sie Cloud Shell über das unten angezeigte Symbol. Es kann ein bis zwei Minuten dauern, bis die Cloud Shell-Instanz gestartet ist.
- Klicken Sie gegebenenfalls auf die Schaltfläche Editor oder Editor öffnen und warten Sie, bis der Cloud Shell-Editor angezeigt wird. Wenn die Schaltfläche Neuen Editor testen angezeigt wird, klicken Sie darauf.
- Klicken Sie wie dargestellt in der unteren Statusleiste auf die Schaltfläche Cloud Code – Sign in (Cloud Code – Anmelden). Autorisieren Sie das Plug-in wie angegeben. Wenn in der Statusleiste Cloud Code - no project angezeigt wird, wählen Sie diese Option aus und wählen Sie dann das gewünschte Google Cloud-Projekt aus der Liste der Projekte aus, mit denen Sie arbeiten möchten.
- Wenn Sie das Gemini-Symbol in der Statusleiste rechts unten nicht sehen, müssen Sie es in Cloud Code aktivieren. Prüfen Sie zuerst, ob Gemini (früher Duet AI für Entwickler) in der IDE aktiviert ist. Rufen Sie dazu Cloud Code-Erweiterung → Einstellungen auf und geben Sie den Text Duet-KI: Aktivieren ein, wie unten gezeigt. Das Kästchen muss angeklickt sein. Aktualisieren Sie Ihre IDE. Dadurch wird Gemini in Cloud Code aktiviert und die Gemini-Statusleiste wird in Ihrer IDE angezeigt.
- Klicken Sie rechts unten auf die Schaltfläche Gemini und wählen Sie das richtige Google Cloud-Projekt aus, für das wir die Cloud AI Companion API aktiviert hatten.
- Nachdem Sie Ihr Google Cloud-Projekt ausgewählt haben, prüfen Sie, ob die Cloud Code-Statusmeldung in der Statusleiste zu sehen ist und ob Gemini auf der rechten Seite aktiviert ist (siehe unten):
Gemini Code Assist kann jetzt verwendet werden.
3. Anwendung herunterladen und untersuchen
Führen Sie im Terminalfenster den Befehl aus, um das Repository mit dem Startcode zu klonen, und wechseln Sie dann in das neue Verzeichnis. Wenn das Terminalfenster nicht mehr geöffnet ist, klicken Sie auf die Schaltfläche Terminal oder Terminal öffnen, um es wiederherzustellen:
git clone https://github.com/GoogleCloudPlatform/testing-with-duet-ai-codelab.git
cd testing-with-duet-ai-codelab
Öffnen Sie main.py im Editor und dann das Fenster Gemini Chat, indem Sie links im Editor auf das Gemini Chat-Symbol klicken. Dieses Gemini Chat-Fenster befindet sich in der IDE und der Code in der IDE steht als Kontext für Diskussionen zur Verfügung. Geben Sie die Aufforderung Erklären ein und sehen Sie sich die Antwort an:
Du kannst in diesem Chatfenster scrollen, um die gesamte Antwort zu sehen. Die Erklärung besagt, dass wir dieses Programm lokal mit dem Befehl python3 main.py
im Terminalfenster ausführen können.
4. Lokal ausführen
Wechseln Sie gegebenenfalls zum Repository-Verzeichnis mit cd ~/testing-with-duet-ai-codelab
und geben Sie im Terminalfenster den Befehl python3 main.py
ein:
Klicken Sie auf den Link http://127.0.0.1:8080, um eine neue Browser-Registerkarte für die Startseite der Anwendung zu öffnen:
Die Anwendung wird „lokal“ ausgeführt. Der Cloud Shell-Editor hat hier einiges bewirkt. Die Anwendung wird in Cloud Shell ausgeführt, nicht auf Ihrem eigenen Computer. Wenn Sie auf den Link geklickt haben, wurde ein Tab mit der eigentlichen lokalen Adresse http://127.0.0.1:8080 geöffnet, sondern zu einem Proxyserver, der von Cloud Shell speziell für diesen Zweck eingerichtet wurde. Der Effekt ist der gleiche, als würden Sie ihn tatsächlich lokal ausführen.
Jetzt ausprobieren Geben Sie 25 ein und klicken Sie auf Konvertieren!
Richtig, 25 steht für XXV in römischen Ziffern. Sie müssen den Vorgang hier beenden.
Sieh dir vielleicht noch ein paar Zahlen an. 25 hat funktioniert, was ist mit 24?
Vielleicht waren wir ein bisschen übereilt und haben geglaubt, dass alles in Ordnung war. Ist XXIIII die richtige Umrechnung von 24? Sollte es nicht XXIV sein?
Es könnte sein, dass XXIIII recht ist, aber das ist normalerweise nicht das, was die Leute erwarten. Da dies jedoch nicht wirklich falsch ist (beachten Sie, dass auf vielen Uhren die 4 als römische Ziffer IIII angezeigt wird), bleibt dieses Problem für eine zukünftige Verbesserung erhalten.
Wie wäre es, wenn Sie negative Zahlen ausprobieren? Null? Es ist nicht möglich, diese Zahlen als römische Ziffern darzustellen. Anscheinend gibt es keine Rückmeldung an den Nutzer, was wie ein Fehler aussieht, der behoben werden muss.
Mithilfe von Tests lassen sich Fehler finden und beseitigen. Gemini Code Assist kann uns dabei helfen, Tests zu erstellen und zu verwenden.
5. Hinzufügen von Tests
Kehre zum Gemini Chat-Fenster zurück und stelle eine Frage
How can I test the number_to_roman function?
Lesen Sie sich die Antwort durch, in der auch das unittest- und das pytest-Modul erläutert werden sollten.
Vielleicht möchten Sie, dass Gemini Code Assist diese Tests für Sie erstellt. Öffnen Sie im Editor calendar.py, in der sich der Conversion-Code befindet. Kehren Sie zum Gemini Chat-Fenster zurück und fragen Sie noch einmal nach.
How can I test the number_to_roman function?
Die Antwort ist jetzt spezifischer, einschließlich eines unittest-Moduls, das Sie kopieren oder in eine neue Datei einfügen können:
import unittest
import calendar
class NumberToRomanTest(unittest.TestCase):
def test_convert_1(self):
self.assertEqual(calendar.number_to_roman(1), "I")
def test_convert_4(self):
self.assertEqual(calendar.number_to_roman(4), "IV")
def test_convert_9(self):
self.assertEqual(calendar.number_to_roman(9), "IX")
def test_convert_40(self):
self.assertEqual(calendar.number_to_roman(40), "XL")
def test_convert_90(self):
self.assertEqual(calendar.number_to_roman(90), "XC")
def test_convert_400(self):
self.assertEqual(calendar.number_to_roman(400), "CD")
def test_convert_900(self):
self.assertEqual(calendar.number_to_roman(900), "CM")
def test_convert_1990(self):
self.assertEqual(calendar.number_to_roman(1990), "MCMXC")
def test_convert_2023(self):
self.assertEqual(calendar.number_to_roman(2023), "MMXXIII")
Möglicherweise unterscheidet sich der Code aus dem obigen Beispiel. Die zugrunde liegenden Modelle von Gemini Code Assist werden von Zeit zu Zeit aktualisiert, sodass die Antworten nicht immer die gleichen sind. Wenn Sie einen anderen Code sehen, können Sie jetzt auswählen, ob Sie mit den Beispielen aus diesem Codelab fortfahren möchten. Kopieren Sie dazu den hier gezeigten Code oder probieren Sie die alternative Antwort von Gemini Code Assist aus. Wenn Sie Zeit haben, können Sie sogar beide Wege ausprobieren. Gemini Code Assist ist ein Programmierassistent, den Sie nach Belieben verwenden können.
Klicken Sie entweder rechts oben im Gemini Chat-Fenster auf den Doppelpfeil, um eine neue Datei mit dem Einheitentestcode zu erstellen, oder verwenden Sie die IDE, um eine neue Datei zu erstellen und den in diesem Lab gezeigten Code einzufügen. Drücken Sie in diesem Fenster Strg+S oder CMD+S, um es zu speichern, und rufen Sie die gespeicherte Datei calendar-unittest.py auf.
Kehren Sie zum Terminal zurück und drücken Sie Strg+C, um den zuvor ausgeführten Webserver zu beenden und eine Shell-Eingabeaufforderung zu erhalten. Geben Sie den Befehl
python3 calendar-unittest.py
um die neuen Tests auszuführen.
Es gibt keine Ausgabe. Das war nicht das, was wir erwartet hatten. Ist alles stumm vorüber? Das möchten Sie mit Sicherheit wissen. Sehen Sie sich die Antwort von Gemini Code Assist an, die den Testcode enthielt. Unter dem Code finden Sie weitere Informationen zum Ausführen des Testlaufs:
Versuchen Sie, den empfohlenen Befehl auszuführen:
python -m unittest discover
Wenn auf Ihrem Computer für den Befehl python3
kein Alias auf python
gesetzt wird, kann ein Problem auftreten. Führen Sie in diesem Fall Folgendes aus:
python3 -m unittest discover
Der Befehl wird ausgeführt, gibt aber Ran 0 tests in 0.000s
zurück. Das Modul enthält mehrere Tests. Was ist passiert?
Das ist das letzte Wort im Befehl: discover
. Woher kommt es? Offensichtlich hat Gemini Code Assist erwartet, dass der Testcode in einer Datei mit dem Namen discover
oder discover.py
gespeichert wird, hat aber nicht angegeben, dass du das tun solltest. Da Sie die Datei tatsächlich in calendar-unittest.py
gespeichert haben, versuchen Sie, den folgenden Befehl auszuführen:
python3 -m unittest calendar-unittest
Jetzt sehen Sie eine große Ausgabe, die in etwa so aussieht:
$ python3 -m unittest calendar-unittest
.F.FFFFFF
======================================================================
FAIL: test_convert_1990 (calendar-unittest.NumberToRomanTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/charles_engelke/testing-with-duet-ai-codelab/calendar-unittest.py", line 28, in test_convert_1990
self.assertEqual(calendar.number_to_roman(1990), "MCMXC")
AssertionError: 'MDCCCCLXXXX' != 'MCMXC'
- MDCCCCLXXXX
+ MCMXC
In der ersten Zeile wird für jeden bestandenen Test ein Zeitraum und für jeden nicht bestandenen Test ein F
angezeigt. Die meisten Tests schlagen fehl. Anschließend werden die fehlgeschlagenen Tests einzeln aufgeführt, wobei die erwartete und die tatsächliche Ausgabe angezeigt werden. Es ist etwas unklar, in welcher Reihenfolge diese Tests durchgeführt wurden. Die Prüfung erfolgte in alphabetischer Reihenfolge nach Testname, nicht der Reihenfolge, in der die Tests in der Datei angezeigt wurden. Daher wurde zuerst test_convert_1
ausgeführt, dann test_convert_1990
, dann test_convert_2023
und so weiter. Es wurden nur die Testläufe für 1
und 2023
bestanden.
Als du diesen Code zum ersten Mal ausprobiert hast, ist dir aufgefallen, dass 24
in XXIIII
konvertiert wurde. Das ist zwar nicht ganz falsch, aber nicht das gängige Format, in dem IIII
in IV
konvertiert wird. Alle fehlgeschlagenen Tests bezieht sich auf ähnliche Fälle. Als dieses Problem zum ersten Mal festgestellt wurde, sagte das Labor: „Da es nicht wirklich falsch ist (beachten Sie, dass viele Uhren 4
als römische Ziffern IIII
zeigen), lassen Sie dieses Problem für eine zukünftige Verbesserung übrig.“
Sie könnten die Testläufe so ändern, dass sie das Ergebnis „nicht wirklich falsch“ akzeptieren. beantwortet der Code oder akzeptiert, dass es Zeit für diese "zukünftige Verbesserung" ist. Ihr nächster Schritt besteht also darin, den Code mithilfe von Gemini Code Assist zu korrigieren, um die akzeptableren Antworten zu liefern, die die Tests erwarten.
6. Code optimieren
Denken Sie daran, dass Antworten wie XXIIII
für 24
anstelle des häufigeren XXIV
als „nicht wirklich falsch“ erachtet wurden. und wurden auf eine zukünftige
Verbesserung aufgeschoben. Diese Zukunft ist jetzt. Die „nicht ganz falsch“ sind Antworten immer noch lästig.
Die erste Regel für wiederholte Ziffern in römischen Ziffern lautet: Immer, wenn vier identische Ziffern hintereinander vorhanden sind, sollten diese durch eine der Ziffern gefolgt von der nächsthöheren Ziffer ersetzt werden. Daher sollte XXIIII
durch XXIV
ersetzt werden. Ebenso sollte XXXX
in XL
geändert werden und CCCC
zu CD
.
Bitten Sie Gemini Code Assist, den Wert der Variablen roman so zu ändern, bevor er von number_to_roman zurückgegeben wird:
If the final value of roman has IIII in it, that should be replaced by IV. Similarly XXXX should be replaced by XL, and CCCC should become CD. How can I make those changes?
Es empfiehlt sich, am Ende Code hinzuzufügen:
Kopieren Sie diese Zeilen, fügen Sie sie in den Editor ein und sehen Sie sich an, was passiert:
Gemini Code Assist hat weitere Zeilen für Fälle hinzugefügt, die nach dem ersten Satz von Ersetzungen entstehen können. Beispielsweise wird „19“ in XVIIII, dann in XVIV und schließlich in das richtige XIX konvertiert.
Wenn Gemini Code Assist nützliche Vorschläge gemacht hat, drücken Sie die Tabulatortaste, um die Empfehlungen zu akzeptieren, die Datei zu speichern und den Webserver noch einmal auszuführen. Andernfalls fügen Sie die in diesem Beispiel gezeigten Zeilen manuell hinzu und speichern Sie die Datei. Versuchen Sie es mit einer schwierigen Conversion: 1999:
Das ist richtig!
Führen Sie die Tests jetzt noch einmal aus. Sie haben alle bestanden!
Die Webanwendung scheint bereit für die Produktion zu sein.
7. In Cloud Run bereitstellen
Cloud Run führt für Sie eine Containeranwendung im Internet aus. Bei Anwendungen, die mit gängigen Frameworks wie Flash geschrieben wurden, erstellt der gcloud run deploy
-Befehl diesen Container sogar vor der Bereitstellung für Sie. Führen Sie diesen Befehl aus:
gcloud run deploy
Im Terminal. Wenn Sie nach dem Speicherort des Quellcodes gefragt werden, drücken Sie die Eingabetaste, um den richtigen Speicherort zu übernehmen. Wenn Sie nach einem Dienstnamen gefragt werden, drücken Sie die Eingabetaste, um den Vorschlag anzunehmen.
Der Befehl kann fehlschlagen, weil gcloud nicht ermitteln kann, welches Projekt verwendet werden soll. Führen Sie in diesem Fall folgenden Befehl aus:
gcloud config set core/project <project-id>
Dabei wird
durch die ID Ihres Projekts ersetzt, die mit dem Projektnamen identisch sein kann. Führen Sie dann den Befehl gcloud run deploy
noch einmal aus.
- Der Befehl teilt Ihnen mit, dass bestimmte APIs erforderlich und noch nicht aktiviert sind. Geben Sie „y“ ein, um sie für Sie zu aktivieren.
- Wenn Sie aufgefordert werden, eine Region auszuwählen, wählen Sie eine Region aus, die in Ihrer Nähe liegt. Die Eingabe der Nummer von
us-central1
ist eine sichere Wahl. - Wenn Sie dazu aufgefordert werden, geben Sie „Y“ ein, um fortzufahren.
- Sie sollten nicht authentifizierte Aufrufe dieses Cloud Run-Dienstes zulassen. Die von Cloud Run verwendete Authentifizierungsoption eignet sich für Programme, die den Dienst aufrufen. Da es sich um eine Website handelt, verwenden Sie keine Authentifizierung.
Google Cloud erstellt den Container, stellt ihn bereit, leitet Traffic an ihn weiter, legt Zugriffsrichtlinien fest und zeigt Ihnen dann den Link zur Startseite an:
Über diesen Link können Sie auf Ihre Anwendung zugreifen.
Gib eine Zahl ein und drücke die Eingabetaste.
Was?!
Es hat auf Ihrem Computer funktioniert! Warum ist das noch nicht zu Ende?
Finden Sie es heraus. Gemini Code Assist fragen
Why am I getting an internal server error on cloud run?
Anscheinend kann Gemini Code Assist die Protokolldatei lesen, die etwas Ähnliches sagt. Sehen wir uns an, wie Sie Gemini Code Assist ansehen können, um sich selbst zu protokollieren:
Machen Sie das. Achte auf Linien mit rotem !! Fehlerindikatoren wie unten dargestellt:
Darauf folgen viele Detailzeilen im Aufrufstack, aber dann ist da noch Folgendes:
In der Datei calendar.py sehen Sie direkt die Funktion number_to_roman. Und Sie wissen, dass es richtig ist, weil es auf Ihrem Computer funktioniert hat. Was könnte in Cloud Run anders sein?
Die Antwort ist schwierig. In Python3 ist ein Standardmodul namens calendar enthalten, ebenso wie die Datei calendar.py, in der die Funktion number_to_roman definiert ist. Als Python auf Ihrem lokalen Computer nach einem Modul namens calendar gesucht hat, wurde zuerst Ihr Anwendungsverzeichnis durchsucht. Offensichtlich hat Python in Cloud Run zuerst nach Standardmodulen gesucht, sie importiert und keine number_to_roman-Funktion gefunden.
Solche Unterschiede in Umgebungen sind immer möglich. Glücklicherweise trägt eine Anwendung in Containern ihre Umgebung, sodass Sie bei jeder Ausführung dasselbe Verhalten erwarten können. Wenn Sie dieselbe Containeranwendung lokal wie Cloud Run ausgeführt hätten, hätten Sie das gleiche Problem gehabt.
Problem beheben Sie müssen den Namen des Moduls für Ihren lokalen Kalender so ändern, dass er kein Standardmodulname ist. Benennen Sie die Datei calendar.py in my_calendar.py um. Ändern Sie dann die Zeilen import calendar
in main.py und calendar-unittest.py in import my_calendar
. Ändern Sie schließlich die Zeile
roman = calendar.number_to_roman(number)
zu
roman = my_calendar.number_to_roman(number)
Probieren Sie es lokal aus, führen Sie die Tests aus und stellen Sie die Anwendung noch einmal bereit:
gcloud run deploy
Und jetzt funktioniert es:
Sie können diese URL teilen, sodass jeder, der ein Tool zur Umwandlung von römischen Zahlen benötigt, Ihr verwenden kann.
8. Optional: Passen Sie die Darstellung an.
Ihre Anwendung läuft problemlos und jeder im Web kann darauf zugreifen. Aber es sieht ein bisschen nüchtern aus. Bevor Sie es allen erwähnen, können Sie Gemini Code Assist bitten, die Darstellung zu verbessern?
Öffnen Sie die Datei templates/index.html
. Fragen Sie im Gemini-Chatfenster:
Make this index.html file use material design.
Die Antwort besteht darin, Ergänzungen zur aktuellen Datei hinzuzufügen. Das Ergebnis sieht in etwa so aus:
<!DOCTYPE html>
<html>
<head>
<title>Roman Numerals</title>
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
</head>
<body>
<h1 class="mdl-typography--title">Roman Numerals</h1>
<form action="/convert" method="post">
<div class="mdl-textfield mdl-js-textfield">
<input class="mdl-textfield__input" type="text" id="number" name="number" required />
<label class="mdl-textfield__label" for="number">Enter a number:</label>
</div>
<button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
Convert!
</button>
</form>
</body>
</html>
Verwenden Sie das Symbol, um den vorgeschlagenen Code zu kopieren und den vorhandenen Inhalt von index.html einzufügen. Führen Sie im Terminal python3 main.py
aus und klicken Sie auf den Link, um ein Vorschaufenster zu öffnen. Die Seite ist jetzt etwas weniger einfach:
Sie können dies bei Bedarf mit der Datei convert.html wiederholen.
Gemini Code Assist kennt sich mit CSS aus und Sie können damit die Anwendungsseiten auf verschiedene Arten gestalten. Dies ist erst der Anfang.
Da Sie diese Anwendung freigeben möchten, vergessen Sie nicht, sie noch einmal in Cloud Run bereitzustellen:
gcloud run deploy
Sie können die URL an Nutzer weitergeben, die in römische Ziffern umwandeln müssen.
9. Glückwunsch!
Herzlichen Glückwunsch – Sie haben mit Gemini Code Assist erfolgreich gearbeitet, um einer Anwendung Tests hinzuzufügen, Fehler darin zu beheben und erweiterte Funktionen hinzuzufügen.
Wenn Sie die von Ihnen erstellte Anwendung nicht mehr benötigen, können Sie sie aus dem Dashboard der Cloud Console löschen, um zukünftige Kosten zu vermeiden.