مقدمه ای بر تست با Gemini Code Assist

۱. مقدمه

در این آزمایشگاه، شما از Gemini Code Assist، یک همکار مبتنی بر هوش مصنوعی در Google Cloud، برای اضافه کردن تست به یک برنامه وب پایتون موجود و یافتن و رفع خطاهای موجود در آن برنامه که توسط تست‌ها آشکار شده‌اند، استفاده خواهید کرد. سپس از Code Assist برای ایجاد تست‌هایی برای قابلیت‌های جدید و تولید کد برای عبور از آن تست‌ها و گسترش برنامه استفاده خواهید کرد.

کاری که انجام خواهی داد...

  • شما از ویرایشگر Cloud Shell برای دانلود کد برای یک برنامه وب موجود استفاده خواهید کرد.
  • شما از چت کمکی کد Gemini در ویرایشگر Cloud Shell برای پرسیدن سوالات عمومی در مورد Google Cloud استفاده خواهید کرد.
  • شما از ابزار کمک کدنویسی درون‌خطی Gemini Code Assist در ویرایشگر Cloud Shell برای تولید تست برای برنامه، اجرای تست‌ها، یافتن و رفع خطاها و سپس گسترش قابلیت‌های برنامه استفاده خواهید کرد.

آنچه یاد خواهید گرفت...

  • نحوه استفاده از Gemini Code Assist برای چندین کار توسعه‌دهنده مانند تولید تست و تولید کد.
  • نحوه استفاده از Gemini Code Assist برای یادگیری در مورد Google Cloud.

آنچه نیاز خواهید داشت...

  • مرورگر وب کروم
  • یک حساب جیمیل
  • یک پروژه ابری با قابلیت پرداخت صورتحساب
  • Gemini Code Assist برای پروژه ابری شما فعال شده است

این آزمایشگاه برای توسعه‌دهندگان در تمام سطوح، از جمله مبتدیان، در نظر گرفته شده است. اگرچه برنامه نمونه به زبان پایتون است، اما برای درک آنچه اتفاق می‌افتد نیازی به آشنایی با برنامه‌نویسی پایتون ندارید. تمرکز ما بر آشنایی با قابلیت‌های Gemini Code Assist برای توسعه‌دهندگان خواهد بود.

۲. راه‌اندازی

شما باید از قبل یک پروژه ابری با قابلیت پرداخت صورتحساب برای استفاده در این آزمایش داشته باشید. اکنون API Gemini را در پروژه ابری گوگل خود فعال خواهیم کرد. مراحل زیر را دنبال کنید:

  1. به آدرس https://console.cloud.google.com مراجعه کنید و مطمئن شوید که پروژه ابری گوگل (Google Cloud Project) مورد نظر خود را برای این آزمایشگاه انتخاب کرده‌اید. روی آیکون Gemini که در بالا سمت راست می‌بینید کلیک کنید.

بنر جمینی.png

  1. پنجره کنسول Gemini for Cloud در سمت راست کنسول باز می‌شود. در صورت نمایش در زیر، روی دکمه فعال‌سازی کلیک کنید. اگر دکمه فعال‌سازی را نمی‌بینید و به جای آن رابط چت را مشاهده می‌کنید، شما قبلاً Gemini for Cloud را برای پروژه فعال کرده‌اید و می‌توانید مستقیماً به مرحله بعدی بروید.

GeminiApiEnable.png

  1. پس از فعال شدن، می‌توانید با پرسیدن یک یا دو سوال، Gemini را امتحان کنید. چند سوال نمونه نشان داده می‌شود، اما می‌توانید چیزی شبیه به «Cloud Run چیست؟» را امتحان کنید.

پنجره چت جمینی.png

دستیار کد به سوال شما پاسخ خواهد داد. می‌توانید روی آن کلیک کنید f68286b2b2ea5c0a.png برای بستن پنجره چت Code Assist، روی نماد در گوشه بالا سمت راست کلیک کنید.

فعال کردن Gemini در ویرایشگر Cloud Shell

دستیار کد Gemini در چندین IDE محبوب موجود است و به طور مشابه رفتار می‌کند. شما در این آزمایشگاه کد از ویرایشگر پوسته ابری گوگل (Google Cloud Shell Editor ) استفاده خواهید کرد که به طور کامل در مرورگر وب شما اجرا می‌شود. شما باید Gemini را در ویرایشگر پوسته ابری فعال و پیکربندی کنید و مراحل آن در زیر آمده است:

  1. Cloud Shell را از طریق آیکون نشان داده شده در زیر اجرا کنید. ممکن است یک یا دو دقیقه طول بکشد تا نمونه Cloud Shell راه‌اندازی شود.

72dc3df7b007fcde.png

  1. روی دکمه ویرایشگر یا باز کردن ویرایشگر (بسته به مورد) کلیک کنید و منتظر بمانید تا ویرایشگر Cloud Shell ظاهر شود. اگر دکمه «ویرایشگر جدید را امتحان کنید» را مشاهده کردید، روی آن کلیک کنید.

ویرایشگر پوسته ابری.png

  1. همانطور که نشان داده شده است، روی دکمه Cloud Code - Sign in در نوار وضعیت پایین کلیک کنید. افزونه را طبق دستورالعمل تأیید کنید. اگر عبارت "Cloud Code - بدون پروژه" را در نوار وضعیت مشاهده کردید، آن را انتخاب کنید و سپس پروژه خاص Google Cloud را از لیست پروژه‌هایی که قصد دارید با آنها کار کنید، انتخاب کنید.

CloudCodeSignIn.png

  1. اگر نماد Gemini را در نوار وضعیت در پایین سمت راست نمی‌بینید، باید آن را در Cloud Code فعال کنید. قبل از انجام این کار، با رفتن به Cloud Code Extension → Settings و سپس وارد کردن متن Duet AI: Enable مطابق شکل زیر، مطمئن شوید که Gemini (که قبلاً با نام Duet AI برای توسعه‌دهندگان شناخته می‌شد) در IDE فعال شده است. مطمئن شوید که کادر انتخاب انتخاب شده است. باید IDE خود را مجدداً بارگذاری کنید. این کار Gemini را در Cloud Code فعال می‌کند و نوار وضعیت Gemini در IDE شما ظاهر می‌شود.

EnableDuetAiSetting.png

  1. همانطور که نشان داده شده است، روی دکمه Gemini در گوشه پایین سمت راست کلیک کنید و پروژه Google Cloud صحیح را که برای آن Cloud AI Companion API را فعال کرده‌ایم، انتخاب کنید.

GeminiSelectGoogleCloudProject.png

  1. پس از انتخاب پروژه گوگل کلود خود، مطمئن شوید که می‌توانید آن را در پیام وضعیت Cloud Code در نوار وضعیت مشاهده کنید و همچنین Gemini را در سمت راست، در نوار وضعیت، مطابق شکل زیر فعال کرده باشید:

نوار وضعیت GeminiEnabled.png

دستیار کد Gemini آماده استفاده است!

۳. برنامه را دانلود و بررسی کنید

در پنجره ترمینال، دستور کپی کردن مخزن با کد اولیه را اجرا کنید و سپس به دایرکتوری جدید بروید (اگر پنجره ترمینال دیگر باز نیست، برای بازیابی آن روی دکمه ترمینال یا باز کردن ترمینال کلیک کنید):

git clone https://github.com/GoogleCloudPlatform/testing-with-duet-ai-codelab.git
cd testing-with-duet-ai-codelab

فایل main.py را در ویرایشگر باز کنید، سپس با کلیک روی آیکون چت Gemini در سمت چپ ویرایشگر، پنجره Gemini Chat را باز کنید. این پنجره Gemini Chat در IDE قرار دارد و کد موجود در IDE به عنوان زمینه‌ای برای بحث در دسترس است. عبارت را وارد کنید. این را توضیح دهید و پاسخ را مشاهده کنید:

GeminiChatتوضیح این.png

می‌توانید این پنجره چت را اسکرول کنید تا کل پاسخ را ببینید. توضیح می‌گوید که می‌توانیم این برنامه را به صورت محلی با دستور python3 main.py در پنجره ترمینال اجرا کنیم.

۴. اجرا به صورت محلی

در صورت نیاز با cd ~/testing-with-duet-ai-codelab به دایرکتوری مخزن بروید و دستور python3 main.py در پنجره ترمینال وارد کنید:

3bf558e9cea15375.png

برای باز کردن یک تب جدید در مرورگر و رفتن به صفحه اصلی برنامه، روی لینک http://127.0.0.1:8080 کلیک کنید:

fb06f382a4c03e4c.png

برنامه به صورت «محلی» اجرا می‌شود. در واقع، ویرایشگر Cloud Shell کمی جادو کرده است. برنامه در Cloud Shell اجرا می‌شود، نه روی رایانه شخصی شما. وقتی روی لینک کلیک کردید، یک تب به آدرس محلی واقعی http://127.0.0.1:8080 باز نشد، بلکه به یک سرور پروکسی که فقط برای این منظور توسط Cloud Shell تنظیم شده است، منتقل شد. نتیجه همان است که انگار واقعاً آن را به صورت محلی اجرا می‌کنید.

امتحانش کن. عدد ۲۵ را وارد کن و دکمه‌ی تبدیل را بزن!

e1b9d5832f6d0058.png

درست است، عدد ۲۵ در اعداد رومی معادل XXV است! دیگر باید کارتان تمام شده باشد.

شاید چند عدد دیگر را هم بررسی کنم. عدد ۲۵ درست بود، عدد ۲۴ چطور؟

۳۷۹۸۲e۳۸۵e۱۷baac.png

شاید کمی عجله کردیم که فکر کنیم همه چیز خوب است. آیا XXIIII تبدیل صحیح ۲۴ است؟ آیا نباید XXIV باشد؟

می‌توان استدلال کرد که XXIIII درست است، اما در واقع آن چیزی نیست که مردم معمولاً انتظار دارند. از آنجایی که واقعاً اشتباه نیست (توجه داشته باشید که بسیاری از ساعت‌ها عدد ۴ را به عنوان عدد رومی IIII نشان می‌دهند)، این مشکل را برای بهبودهای آینده کنار می‌گذاریم.

چطور است اعداد منفی را امتحان کنیم؟ صفر؟ هیچ راهی برای نمایش این اعداد با اعداد رومی وجود ندارد. هیچ چیزی به کاربر برگردانده نمی‌شود، که به نظر می‌رسد خطایی است که باید برطرف شود.

تست کردن می‌تواند به یافتن و حذف خطاها کمک کند، و Gemini Code Assist می‌تواند در نوشتن و استفاده از تست‌ها به ما کمک کند.

۵. اضافه کردن تست‌ها

به پنجره گفتگوی جمینی برگردید و بپرسید

How can I test the number_to_roman function?

پاسخ را به طور کامل بخوانید، که باید شامل بحث در مورد ماژول unittest و ماژول pytest باشد.

شاید دوست داشته باشید که Gemini Code Assist این تست‌ها را برای شما بنویسد. calendar.py را که کد تبدیل واقعی در آن قرار دارد، در ویرایشگر باز کنید، به پنجره گفتگوی Gemini برگردید و دوباره بپرسید

How can I test the number_to_roman function?

اکنون پاسخ دقیق‌تر است، حتی شامل یک ماژول unittest است که می‌توانید آن را کپی یا در یک فایل جدید تزریق کنید:

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

ممکن است کد متفاوتی از مثال بالا ببینید. مدل‌های زیربنایی Gemini Code Assist هر از گاهی به‌روزرسانی می‌شوند، بنابراین پاسخ‌ها همیشه یکسان نخواهند بود. اگر مجموعه کد متفاوتی می‌بینید، اکنون می‌توانید با کپی کردن کد نشان داده شده در اینجا، انتخاب کنید که آیا با نمونه‌های نشان داده شده در این آزمایشگاه کد ادامه دهید یا می‌توانید پاسخ جایگزینی را که Gemini Code Assist اکنون به شما می‌دهد، امتحان کنید. اگر وقت دارید، حتی می‌توانید هر دو مسیر را امتحان کنید. Gemini Code Assist یک دستیار کدنویسی است که می‌توانید از آن به دلخواه استفاده کنید.

یا روی فلش دو طرفه در گوشه سمت راست بالای پنجره Gemini Chat کلیک کنید تا یک فایل جدید حاوی کد تست واحد ایجاد شود، یا از IDE برای ایجاد یک فایل جدید استفاده کنید و کد نشان داده شده در این آزمایش را در آن قرار دهید. برای ذخیره آن، CTRL-S یا CMD-S را در آن پنجره فشار دهید و فایل ذخیره شده را calendar-unittest.py بنامید.

به ترمینال برگردید و CTRL-C را فشار دهید تا سرور وب که قبلاً در حال اجرا رها کرده بودید، متوقف شود و یک اعلان shell دریافت کنید. دستور را وارد کنید

python3 calendar-unittest.py

برای اجرای آزمایش‌های جدید.

هیچ خروجی وجود ندارد. این چیزی نبود که انتظار می‌رفت. آیا همه چیز بی‌سروصدا انجام شد؟ می‌خواهید مطمئن شوید که این را می‌دانید. به پاسخ Gemini Code Assist که شامل کد آزمایشی بود، نگاهی بیندازید. در زیر کد، اطلاعات بیشتری در مورد نحوه اجرای مورد آزمایشی وجود دارد:

اجرای-واحدتست.png

دستور پیشنهادی را اجرا کنید:

python -m unittest discover

اگر دستگاه شما دستور python3 را به python نامگذاری نکند، ممکن است با مشکل مواجه شوید، در این صورت دستور زیر را اجرا کنید:

python3 -m unittest discover

دستور اجرا می‌شود، اما Ran 0 tests in 0.000s برمی‌گرداند. ماژول چندین تست در خود دارد. چه اتفاقی می‌افتد؟

این آخرین کلمه در دستور discover است. این کلمه از کجا آمده است؟ ظاهراً Gemini Code Assist انتظار داشته که کد تست در فایلی به نام discover یا discover.py ذخیره شود، اما مشخص نکرده که شما باید این کار را انجام دهید. از آنجایی که شما در واقع فایل را در calendar-unittest.py ذخیره کرده‌اید، دستور زیر را اجرا کنید:

python3 -m unittest calendar-unittest

حالا خروجی‌های زیادی می‌بینید که با چیزی شبیه به این شروع می‌شوند:

$ 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

خط اول برای هر تست موفق یک نقطه و برای هر تست ناموفق یک F نشان می‌دهد. بیشتر تست‌ها ناموفق هستند! سپس تست‌های ناموفق را به صورت جداگانه فهرست می‌کند و خروجی مورد انتظار و خروجی واقعی را نشان می‌دهد. ترتیب اجرای این تست‌ها کمی نامشخص است. به ترتیب حروف الفبا بر اساس نام تست بود، نه ترتیب نمایش تست‌ها در فایل. بنابراین test_convert_1 ابتدا اجرا شد، سپس test_convert_1990 ، سپس test_convert_2023 و به همین ترتیب. موارد تست برای 1 و 2023 تنها مواردی هستند که موفق شده‌اند.

وقتی برای اولین بار این کد را امتحان کردید، متوجه شدید که 24 به XXIIII تبدیل می‌کند، که دقیقاً اشتباه نبود، اما شکل رایج تبدیل IIII به IV نبود. تمام آزمایش‌های ناموفق برای موارد مشابه بودند. وقتی این مشکل برای اولین بار مشاهده شد، آزمایشگاه گفت: «از آنجایی که واقعاً اشتباه نیست (توجه داشته باشید که بسیاری از ساعت‌ها 4 را به عنوان عدد رومی IIII نشان می‌دهند) این مشکل را برای بهبودهای آینده بگذارید.»

شما می‌توانید موارد آزمون را تغییر دهید تا انتظار داشته باشید و پاسخ‌های «نه چندان اشتباه » کد را بپذیرید، یا بپذیرید که زمان آن «بهبود آینده» فرا رسیده است. بنابراین گام بعدی شما این است که با کمک Gemini Code Assist، کد را اصلاح کنید تا پاسخ‌های قابل قبول‌تری را که تست‌ها انتظار دارند، ارائه دهد.

۶. بهبود کد

به یاد بیاورید که پاسخ‌هایی مانند XXIIII برای 24 ، به جای XXIV رایج‌تر، «نه چندان اشتباه» تلقی شدند و به آینده موکول شدند. آن آینده همین الان است. آن پاسخ‌های «نه چندان اشتباه» هنوز هم آزاردهنده هستند.

اولین قانون برای ارقام تکراری در اعداد رومی این است: هر زمان که چهار رقم یکسان در یک ردیف دارید، باید با یکی از ارقام و به دنبال آن رقم بالاتر بعدی جایگزین شوند. بنابراین XXIIII باید با XXIV جایگزین شود. به طور مشابه XXXX باید به XL تغییر یابد و CCCC باید به CD تبدیل شود.

از دستیار کد Gemini بپرسید که چگونه می‌توان مقدار متغیر roman را درست قبل از اینکه توسط number_to_roman برگردانده شود، به این روش تغییر داد:

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?

پیشنهاد این است که در انتها کدی اضافه کنید:

6437c3fa2c5fabd1.png

این خطوط را در ویرایشگر کپی/پیست یا تایپ کنید و سپس ببینید چه اتفاقی می‌افتد:

dcefa568cab82fb7.png

Gemini Code Assist خطوط بیشتری را برای مدیریت مواردی که ممکن است پس از انجام اولین مجموعه جایگزینی با آنها مواجه شوید، اضافه کرده است. به عنوان مثال، ۱۹ به XVIIII، سپس به XVIV و در نهایت به XIX صحیح تبدیل می‌شود.

اگر Gemini Code Assist پیشنهادهای ظاهراً مفیدی ارائه داد، برای پذیرش توصیه‌ها، کلید Tab را فشار دهید، فایل را ذخیره کنید و سرور وب را دوباره اجرا کنید. در غیر این صورت، خطوط نشان داده شده در مثال را به صورت دستی اضافه کنید و فایل را ذخیره کنید. یک تبدیل سخت را امتحان کنید: ۱۹۹۹:

a206999587fdc9.png

درست است!

حالا دوباره آزمون‌ها را تکرار کنید. همه آنها قبول می‌شوند!

به نظر می‌رسد که برنامه وب آماده‌ی پیاده‌سازی است.

۷. استقرار در Cloud Run

Cloud Run یک برنامه کانتینر شده را برای شما در اینترنت اجرا می‌کند. برای برنامه‌هایی که با استفاده از چارچوب‌های رایج مانند Flash نوشته شده‌اند، دستور gcloud run deploy حتی قبل از استقرار، آن کانتینر را برای شما می‌سازد. دستور زیر را اجرا کنید:

gcloud run deploy

در ترمینال. وقتی از شما محل کد منبع پرسیده شد، Enter را فشار دهید تا مکان صحیح پیشنهادی پذیرفته شود. به طور مشابه، وقتی از شما نام سرویس پرسیده شد، Enter را فشار دهید تا پیشنهاد پذیرفته شود.

ممکن است دستور به دلیل اینکه gcloud نمی‌تواند تشخیص دهد از کدام پروژه استفاده کند، با شکست مواجه شود. در این صورت، دستور زیر را اجرا کنید:

gcloud config set core/project <project-id>

کجا با شناسه پروژه شما جایگزین می‌شود، که ممکن است با نام آن یکسان باشد. سپس دستور gcloud run deploy دوباره اجرا کنید.

  • این دستور از شما می‌پرسد که APIهای خاصی مورد نیاز هستند و هنوز فعال نشده‌اند. برای فعال کردن آنها، y را وارد کنید.
  • وقتی از شما خواسته شد یک منطقه را انتخاب کنید، منطقه‌ای را که برایتان مناسب است انتخاب کنید. وارد کردن شماره مربوط به us-central1 یک انتخاب مطمئن است.
  • وقتی از شما خواسته شد، برای ادامه Y را وارد کنید.
  • شما باید امکان فراخوانی‌های احراز هویت نشده از این سرویس Cloud Run را فراهم کنید. گزینه احراز هویت مورد استفاده توسط Cloud Run برای استفاده توسط برنامه‌هایی که این سرویس را فراخوانی می‌کنند مناسب است. از آنجایی که این یک وب‌سایت است، شما از احراز هویت استفاده نخواهید کرد.

گوگل کلود کانتینر را می‌سازد، آن را مستقر می‌کند، ترافیک را به آن هدایت می‌کند و سیاست‌های دسترسی را تنظیم می‌کند و سپس لینک صفحه اصلی را به شما نشان می‌دهد:

94ba7d8d63a44afd.png

شما می‌توانید به آن لینک بروید و به برنامه خود دسترسی پیدا کنید.

a2e51666dfd33a9f.png

یک عدد وارد کنید و Enter را فشار دهید، و حالا!

5021535ac991a95c.png

چی!؟!

روی دستگاه شما کار کرد! چرا این کار تمام نمی‌شود؟

بفهمید. از دستیار کد Gemini بپرسید،

Why am I getting an internal server error on cloud run?

4b24321251d6eddf.png

ظاهراً، Gemini Code Assist می‌تواند فایل لاگ را بخواند، که چیزی مشابه را نشان می‌دهد. بیایید از Gemini Code Assist بپرسیم که چگونه می‌توانید خودتان لاگ‌ها را بررسی کنید:

92d1855be73ef1d.png

ادامه دهید و این کار را انجام دهید. به دنبال خطوطی با رنگ قرمز باشید!! که نشانگر خطا هستند، مانند زیر:

9bed4f9ed82de21c.png

به دنبال آن، جزئیات زیادی در مورد پشته فراخوانی (call stack) که به اینجا می‌رسد، آمده است، اما نکته بعدی این است:

47fc93be845f4e3f.png

وقتی به فایل calendar.py خود نگاه می‌کنید، تابع number_to_roman را همانجا می‌بینید! و می‌دانید که درست است زیرا روی دستگاه شما کار کرده است. در Cloud Run چه چیزی می‌تواند متفاوت باشد؟

پاسخ کمی پیچیده است. یک ماژول استاندارد به نام calendar در پایتون ۳ وجود دارد، درست مانند فایل calendar.py که تابع number_to_roman در آن تعریف شده است. در دستگاه محلی شما، وقتی پایتون به دنبال ماژولی به نام calendar می‌گشت، ابتدا دایرکتوری برنامه شما را جستجو می‌کرد. ظاهراً پایتون در Cloud Run ابتدا به دنبال ماژول‌های استاندارد می‌گشت، آن را وارد می‌کرد و تابع number_to_roman را پیدا نمی‌کرد.

این نوع تفاوت‌ها در محیط‌ها همیشه امکان‌پذیر است. خوشبختانه، وقتی یک برنامه کانتینری می‌شود، محیط خود را درون خود حمل می‌کند، بنابراین هر کجا که آن را اجرا کنید، می‌توانید انتظار رفتار مشابهی را داشته باشید. اگر همان برنامه کانتینری شده را که Cloud Run دارد، به صورت محلی اجرا می‌کردید، با همین مشکل مواجه می‌شدید.

این مشکل را حل کنید. شما باید نام ماژول تقویم محلی خود را به چیزی غیر از نام استاندارد ماژول تغییر دهید. نام فایل calendar.py را به my_calendar.py تغییر دهید، سپس خطوط import calendar در main.py و calendar-unittest.py را به import my_calendar تغییر دهید. در نهایت، خط زیر را تغییر دهید:

roman = calendar.number_to_roman(number)

به

roman = my_calendar.number_to_roman(number)

آن را به صورت محلی امتحان کنید، تست‌ها را اجرا کنید و سپس دوباره مستقر کنید:

gcloud run deploy

و حالا کار می‌کند:

ed288801c6825eb1.png

شما می‌توانید این URL را به اشتراک بگذارید، و هر کسی که به ابزار تبدیل اعداد رومی نیاز دارد می‌تواند از ابزار شما استفاده کند.

۸. اختیاری: کاری کنید که زیباتر به نظر برسد

برنامه شما به خوبی اجرا می‌شود و برای همه در وب قابل دسترسی است. اما کمی ظاهر ساده‌ای دارد. قبل از اینکه به همه در مورد آن بگویید، چرا از Gemini Code Assist نمی‌خواهید ظاهر آن را بهبود بخشد؟

فایل templates/index.html را باز کنید. در پنجره چت Gemini، بپرسید:

Make this index.html file use material design.

پاسخ این است که به فایل فعلی اضافه شود، که نتیجه آن چیزی شبیه به زیر خواهد بود:

<!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>

از آیکون برای کپی کردن کد پیشنهادی و چسباندن آن روی محتوای موجود در index.html استفاده کنید. در ترمینال، python3 main.py را اجرا کنید و روی لینک کلیک کنید تا یک پنجره پیش‌نمایش باز شود. اکنون صفحه کمی ساده‌تر شده است:

295643ec03fcaafc.png

در صورت تمایل می‌توانید این کار را با فایل convert.html تکرار کنید.

Gemini Code Assist اطلاعات زیادی در مورد CSS دارد و می‌توانید از آن برای استایل‌دهی به صفحات برنامه به روش‌های مختلف استفاده کنید. این فقط یک شروع است.

از آنجایی که می‌خواهید این برنامه را به اشتراک بگذارید، فراموش نکنید که آن را دوباره به Cloud Run منتقل کنید:

gcloud run deploy

می‌توانید URL را به افرادی که نیاز به تبدیل به اعداد رومی دارند، بدهید.

۹. تبریک می‌گویم!

تبریک می‌گوییم - شما با موفقیت با Gemini Code Assist برای اضافه کردن تست به یک برنامه، رفع خطاهای آن و افزودن قابلیت‌های پیشرفته کار کرده‌اید.

وقتی استفاده از برنامه‌ای که ساخته‌اید تمام شد، می‌توانید آن را از داشبورد کنسول ابری حذف کنید تا هرگونه هزینه احتمالی در آینده متوقف شود.

اسناد مرجع ...