Gemini'ı kullanarak hizmetleriniz için Sentetik İzleme Testleri yazma

1. Giriş

Bu codelab'de, mevcut hizmetleriniz için Sentetik İzleme Testleri yazmak amacıyla Yazmama yardım et özelliğinden yararlanacağız.

Yapacağınız işlemler

  • Google Cloud Run'a bir API dağıtacaksınız. Bu API, test edeceğimiz hizmetimizin temelini oluşturacak.
  • Ardından, Cloud Monitoring'in özelliklerinden biri olan Sentetik Monitör yazacaksınız.
  • Sentetik Monitör'ü yazmak için Yazmama Yardım Et özelliğini kullanacaksınız.

Öğrenecekleriniz...

  • Sentetik İzleme nedir.
  • Temel hizmet işlevini doğrulayacak test durumları yazmak için Gemini'ın Sentetik İzleme'deki Yazmama Yardım Et özelliğini kullanma.

Gerekenler

  • Chrome web tarayıcısı
  • Gmail hesabı
  • Faturalandırmanın etkin olduğu bir Cloud projesi
  • Cloud projeniz için Gemini Code Assist etkinleştirildi

Bu laboratuvar, yeni başlayanlar da dahil olmak üzere her seviyeden geliştiriciye yöneliktir. Örnek uygulama Python dilinde olsa da, neler olduğunu anlamak için Python programlamasına aşina olmanız gerekmez.

2. Kurulum

Artık Google Cloud projemizde Cloud için Gemini'ı etkinleştireceğiz. Aşağıda verilen adımları uygulayın:

  1. https://console.cloud.google.com adresini ziyaret edip bu laboratuvarda çalışmayı planladığınız Google Cloud projesini seçtiğinizden emin olun. Sağ üstte gördüğünüz Gemini'ı aç simgesini tıklayın.

28f084ec1e159938.png

  1. Cloud için Gemini sohbet penceresi, konsolun sağ tarafında açılır. Aşağıda gösterildiği gibi Etkinleştir düğmesini tıklayın. Etkinleştir düğmesini görmüyorsanız bunun yerine bir Chat arayüzü gösteriliyorsa büyük olasılıkla söz konusu projede Cloud için Gemini'ı etkinleştirmişsinizdir. Doğrudan sonraki adıma geçebilirsiniz.

e8df9adc4ea43a37.png

  1. Etkinleştirildikten sonra Cloud için Gemini'ı birkaç sorgu sorarak test edebilirsiniz. Birkaç örnek sorgu gösteriliyor ancak aşağıdaki sorguyu What is Synthetic Monitoring? deneyebilirsiniz

9859ea86a8310cb.png

Cloud için Gemini, sorunuzun yanıtını verecek. Google Cloud'da Sentetik Monitör yazma konusunda sunulan referans belgelerinin listesine göz atın.

Cloud için Gemini sohbet penceresini kapatmak için sağ üst köşedeki f68286b2b2ea5c0a.png simgesini tıklayabilirsiniz.

3. Google Cloud Run'da örnek bir Inventory API dağıtma

Testleri yazmaya başlamadan önce, test edebileceğimiz örnek bir API'ye ihtiyacımız olacak. Bunun için Google Cloud Run'da dağıtacağımız basit bir envanter API'si yazacağız.

Tümüyle yönetilen Code OSS tabanlı bir geliştirme ortamı olan Cloud Shell IDE'yi kullanacağız. Ortam, Google Cloud hizmetleriyle çalışmayı verimli hale getiren Cloud Code IDE Uzantısı ile birlikte gelir. Aşağıda verilen adımları uygulayın:

  1. ide.cloud.google.com adresini ziyaret edin. IDE'nin görünmesi biraz zaman alabilir, bu yüzden lütfen sabırlı olun.
  2. Gösterilen durum çubuğunda Cloud Code - Oturum aç düğmesini tıklayın. Talimatlara göre eklentiyi yetkilendirin. Durum çubuğunda "Cloud Code - proje yok" ifadesini görüyorsanız bunu seçin ve ardından, üzerinde çalışmayı planladığınız projeler listesinden ilgili Google Cloud projesini seçin.

6f5ce865fc7a3ef5.png

  1. Gösterildiği gibi sağ alt köşedeki Gemini düğmesini tıklayın ve doğru Google Cloud projesi için son bir kez daha seçim yapın. Cloud AI Companion API'yi etkinleştirmeniz istenirse lütfen bunu yapın ve devam edin.
  2. Google Cloud projenizi seçtikten sonra, durum çubuğundaki Cloud Code durum mesajında bunu gördüğünüzden ve sağdaki durum çubuğunda Code Assist'in etkin olduğundan emin olun:

709e6c8248ac7d88.png

  1. Aşağıdaki durum çubuğunda Google Cloud projesinin adını tıklayın.

f151759c156c124e.png

  1. Bir seçenek listesi görünür. Aşağıdaki listeden New Application'ı (Yeni Uygulama) tıklayın.

91ea9836f38b7f74.png

  1. Cloud Run uygulamasını seçin.
  2. Python (Flask): Cloud Run uygulama şablonunu seçin.
  3. Yeni uygulamayı tercih ettiğiniz konuma kaydedin.
  4. Uygulamanızın oluşturulduğunu onaylayan bir bildirim alırsınız ve uygulamanız, aşağıda gösterildiği gibi yüklenmiş olarak yeni bir pencere açılır. Bir README.md dosyası açılır. Bu görünümü şimdilik kapatabilirsiniz.

ed250f23b0e4fee8.png

  1. Gezgin'den app.py dosyasını ziyaret edip aşağıda gösterilen içerikle değiştirin:
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. Envanter API'sini Cloud Run'a dağıtma zamanı geldi. Sol üstteki menü simgesini kullanarak Cloud Shell IDE'den yeni bir Terminal oturumu başlatmamız gerekiyor. Menü simgesini ve ardından aşağıda gösterildiği gibi Terminal → Yeni Terminal'i tıklayın:

289173c68f1addb5.png

  1. Terminal oturumunda aşağıdaki komutu verin:
gcloud run deploy --source .
  1. Yukarıdaki komut, dağıtılacak bir region hakkında soru soracaktır. Lütfen us-central1 öğesini seçin. unauthenticated invocations izni istenecek. y diyerek buna izin verin.
  2. Hizmet başarıyla dağıtıldıktan sonra bir Hizmet URL'si sağlar. Aşağıya dikkat edin.

4. Inventory API'yi test etme

Artık tarayıcıyı başlatıp aşağıdaki uç noktalara giderek Inventory API'yi test edebilirsiniz:

SERVICE_URL/inventory

Bu işlemin, hizmetteki örnek verilere göre 3 envanter öğesi döndürmesi gerekir. Örnek yanıt aşağıda verilmiştir:

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

Artık aşağıdaki URL aracılığıyla belirli bir envanter öğesini alabiliriz. Bu işlemin id değeri 1 olan envanter öğesini döndürür.

SERVICE_URL/inventory/1

Yanıt aşağıdaki gibi olmalıdır:

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

Son olarak, mevcut olmayan bir envanter öğesini almayı deneyebiliriz.

SERVICE_URL/inventory/200

id değeri 200 olan envanter öğesi olmadığından bu işlem size bir hata mesajı döndürür. Yanıt, aşağıdakine benzer olmalıdır:

{
  "error": "Item not found"
}

Artık Gemini'ın yardımıyla Cloud Monitoring'de Sentetik İzleme Testlerimizi yazmaya hazırız.

5. Google Cloud'da Sentetik İzleme

Belgelerde belirtildiği gibi, Sentetik monitörler, neyi test edeceğinizi ve bir dizi testi tanımlamanıza olanak tanır. Örneğin, uygulamanızın giriş sayfasını, e-ticaret mağazanızın ödeme sürecini veya uygulamanızın üçüncü taraf hizmetlere yaptığı API çağrılarını test edebilirsiniz.

Sentetik bir monitör oluşturduğunuzda Cloud Run'da derlenmiş bir 2. nesil Cloud Functions işlevi dağıtırsınız. İşleviniz Node.js'de yazılmalı ve açık kaynak Synthetics SDK çerçevesini temel almalıdır. Cloud Monitoring, bu çerçeveyi dağıtır ve yönetir.

Cloud Monitoring, aşağıdaki sentetik monitör türlerini destekler:

Cloud Monitoring, bu sentetik monitörleri çalıştırırken çok fazla iş halleder. Şunlardan sorumludur:

  • Cloud Functions işlevinizin periyodik olarak yürütülmesi.
  • Her yürütmenin sonuçlarını toplamak ve saklamak:
  • Hata mesajı, hata türü ve kod satırı gibi başarı ve başarısızlık bilgileri
  • Yürütme süresi
  • Günlükler
  • Metrikler

Gemini'dan ve özellikle testlerin ilk kodunu sağlayacak Help Me Write özelliğinden yararlanacağız. Böylece bu kodu kullanarak test ederken ve ek özellikler geliştirebiliriz. Hadi başlayalım.

6. Inventory API Test Durumları için Sentetik Monitörümüzü yazma

Şimdi Sentetik Monitörümüzü yazmak için Cloud Console'a gidiyoruz.

Cloud Console'da Synthetic Monitoring sayfasını ziyaret edin. Bu işlem, sayfayı aşağıda gösterildiği gibi açar:

96bfce88f55442f3.png

Yukarıdaki sayfada SYNTHETIC MONITOR OLUŞTUR bağlantısını tıklayın. Aşağıdaki gibi bir yapılandırma formu açılır:

af4dde3e9e0a5a16.png

s1 adını sağladık, ancak başka bir ad seçebilirsiniz. Yukarıdaki ekranda KODMA YARDIMCI OL düğmesine dikkat edin. Bu düğmeyi tıklayın.

Bunun sonucunda, Inventory API'nin düzgün çalıştığından emin olmak için yürütmek istediğiniz test durumlarını açıklayan istemi sağlamanız gereken bir pop-up açılır.

a13e78db15b37dd3.png

İstem düzenleme kutusunda, aşağıdakine benzer bir istem kullanı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". 

3 test durumu sağladığımızı ve SERVICE_URL değerini hizmetinizin gerçek Cloud Run Hizmeti adıyla değiştirmeniz gerektiğini unutmayın.

OLUŞTUR'u tıkladığınızda Gemini, Test Paketi kodunu ve package.json dosyasını da aşağıda gösterildiği gibi oluşturur. Sizin için oluşturulan kod, aşağıda gördüğünüz koddan farklı olabilir. package.json dosyasındaki koda ve bağımlılık dosyalarına göz atın.

d19340c357f620bd.png

INSERT INTO CLOUD FUNCTION'ı tıklayın. Bu işlemin ardından, gerekli değerlerin doldurulduğu bir Cloud Functions işlevi oluşturma formu açılır.

d70e50624a09149a.png

İŞLEVİ UYGULA'yı ve ardından OLUŞTUR düğmesini tıklayın. Bu örnekte herhangi bir Uyarı Kanalı yapılandırması seçmedik ancak bunu seçebilirsiniz.

Bu işlem, Google Cloud Functions işlevini arka planda oluşturma sürecini başlatır. Bu işlem birkaç dakika sürebilir, bu yüzden sabırlı olun.

1b07702ea5ac5bdb.png

Cloud Functions işlevi başarıyla dağıtıldıktan sonra Cloud Monitoring sizin için Sentetik Monitör'ü çağırma görevine başlar.

Başlangıçta, aşağıda gösterildiği gibi herhangi bir çağrı olmadığını görürsünüz:

dac473269a289a3b.png

Belirli çalıştırmalar olduğunda çeşitli yürütmeleri görebilirsiniz. Aşağıdaki ekranda testlerin geçildiği gösterilmektedir:

dc2d7dd98277fbcc.png

Sentetik Monitör adını (ör. s1) tıklarsanız aşağıda gösterildiği gibi çeşitli yürütme işlemleri gösterilir:

8369a02b413d12cc.png

7. Tebrikler!

Tebrikler, Google Cloud Run'a başarıyla örnek bir API dağıttınız ve hizmetin işlevlerini doğrulamak için Synthetic Monitoring testleri yazdınız. Bu süreçte, Test Paketi'nin kodunu oluşturmak için Gemini'ı kullandınız.

8. Referans belgeler