كتابة اختبارات مراقبة اصطناعية لخدماتك باستخدام Gemini

1. مقدمة

في هذا الدرس التطبيقي حول الترميز، سنتعرّف على كيفية استخدام ميزة ساعدني في الكتابة لإنشاء اختبارات المراقبة الاصطناعية لخدماتك الحالية.

المهام التي ستنفذها...

  • ستنشر واجهة برمجة تطبيقات على Google Cloud Run، وستكون هذه الواجهة أساسًا للخدمة التي سنختبرها.
  • بعد ذلك، ستكتب Synthetic Monitor، وهي إحدى ميزات Cloud Monitoring.
  • ستستخدم ميزة "ساعدني في الكتابة" لكتابة Synthetic Monitor.

ما ستتعلمه...

  • ما هي ميزة "المراقبة الاصطناعية"؟
  • كيفية استخدام ميزة "ساعدني في الكتابة" من Gemini في Synthetic Monitoring لإنشاء حالات اختبار تتحقّق من وظائف الخدمة الأساسية

المتطلبات...

  • متصفّح الويب Chrome
  • حساب Gmail
  • مشروع على السحابة الإلكترونية تم تفعيل الفوترة فيه
  • تفعيل Gemini Code Assist لمشروعك على Google Cloud

هذا المختبر مخصّص للمطوّرين من جميع المستويات، بما في ذلك المبتدئين. على الرغم من أنّ التطبيق النموذجي مكتوب بلغة Python، ليس عليك أن تكون على دراية ببرمجة Python لفهم ما يحدث.

2. الإعداد

سنفعّل الآن "Gemini في Cloud" في مشروعنا على Google Cloud. يُرجى اتّباع الخطوات التالية:

  1. انتقِل إلى https://console.cloud.google.com وتأكَّد من أنّك اخترت مشروع Google Cloud الذي تخطّط لاستخدامه في هذا المختبر. انقر على رمز "فتح Gemini" الذي يظهر في أعلى يسار الصفحة.

28f084ec1e159938.png

  1. ستفتح نافذة محادثة "Gemini في Cloud" على الجانب الأيسر من وحدة التحكّم. انقر على الزر "تفعيل" كما هو موضّح أدناه. إذا لم يظهر لك الزر تفعيل وظهرت بدلاً منه واجهة Chat، من المحتمل أنّك فعّلت Gemini for Cloud للمشروع ويمكنك الانتقال مباشرةً إلى الخطوة التالية.

e8df9adc4ea43a37.png

  1. بعد تفعيلها، يمكنك تجربة "Gemini في السحابة" من خلال طرح استفسار أو استفسارين. يتم عرض بعض نماذج طلبات البحث، ولكن يمكنك تجربة طلب البحث التالي What is Synthetic Monitoring?

9859ea86a8310cb.png

سيردّ "Gemini في Cloud" بالإجابة عن سؤالك. اطّلِع على قائمة المستندات المرجعية المتوفّرة حول كيفية كتابة عمليات التحقّق الاصطناعية في Google Cloud.

يمكنك النقر على رمز f68286b2b2ea5c0a.png في أعلى يسار الصفحة لإغلاق نافذة محادثة "Gemini في Cloud".

3- نشر عيّنة من Inventory API على Google Cloud Run

قبل البدء في كتابة الاختبارات، سنحتاج إلى نموذج لواجهة برمجة التطبيقات يمكننا إجراء الاختبارات عليه. لهذا الغرض، سنكتب واجهة برمجة تطبيقات بسيطة للمستودع سننشرها على Google Cloud Run.

سنستخدم بيئة تطوير متكاملة (IDE) في Cloud Shell، وهي بيئة تطوير مُدارة بالكامل تستند إلى Code OSS. تتضمّن البيئة إضافة Cloud Code IDE التي تسهّل العمل مع خدمات Google Cloud. يُرجى اتّباع الخطوات التالية:

  1. انتقِل إلى ide.cloud.google.com. قد يستغرق ظهور بيئة التطوير المتكاملة بعض الوقت، لذا يُرجى الانتظار.
  2. انقر على الزر رمز السحابة الإلكترونية - تسجيل الدخول في شريط الحالة أسفل الصفحة كما هو موضّح. امنح المصادقة للمكوّن الإضافي حسب التعليمات. إذا ظهرت لك الرسالة "Cloud Code - no project" في شريط الحالة، اختَرها ثم اختَر مشروع Google Cloud المحدّد من قائمة المشاريع التي تخطّط للعمل عليها.

6f5ce865fc7a3ef5.png

  1. انقر على زر Gemini في أسفل يسار الصفحة كما هو موضّح، واختَر مشروع على السحابة الإلكترونية الصحيح لآخر مرة. إذا طُلب منك تفعيل Cloud AI Companion API، يُرجى إجراء ذلك والمتابعة.
  2. بعد اختيار مشروعك على Google Cloud، تأكَّد من إمكانية رؤيته في رسالة حالة Cloud Code في شريط الحالة، ومن تفعيل Code Assist على يسار شريط الحالة كما هو موضّح أدناه:

709e6c8248ac7d88.png

  1. انقر على اسم مشروع Google Cloud في شريط الحالة أدناه.

f151759c156c124e.png

  1. ستظهر قائمة بالخيارات. انقر على تطبيق جديد من القائمة أدناه.

91ea9836f38b7f74.png

  1. اختَر تطبيق Cloud Run.
  2. اختَر نموذج تطبيق Python (Flask): Cloud Run.
  3. احفظ التطبيق الجديد في المكان المفضّل لديك.
  4. يؤكّد إشعار أنّه تم إنشاء تطبيقك، ويتم فتح نافذة جديدة مع تحميل تطبيقك كما هو موضّح أدناه. يتم فتح ملف README.md. يمكنك إغلاق طريقة العرض هذه الآن.

ed250f23b0e4fee8.png

  1. من "المستكشف"، انتقِل إلى الملف app.py واستبدِله بالمحتوى الموضّح أدناه:
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. حان الوقت لنشر واجهة برمجة التطبيقات الخاصة بالمستودع على Cloud Run. سنحتاج إلى بدء جلسة "وحدة طرفية" جديدة من بيئة التطوير المتكاملة في Cloud Shell من خلال رمز القائمة في أعلى يمين الشاشة. انقر على رمز القائمة، ثمّ على Terminal → New Terminal كما هو موضّح أدناه:

289173c68f1addb5.png

  1. في جلسة "الوحدة الطرفية"، أدخِل الأمر التالي:
gcloud run deploy --source .
  1. سيطلب منك الأمر أعلاه تحديد region لنشره، يُرجى اختيار us-central1. سيطلب منك السماح لتطبيق unauthenticated invocations بالوصول إلى بياناتك، يُرجى الموافقة على ذلك من خلال قول y.
  2. بعد نشر الخدمة بنجاح، سيتم توفير عنوان URL للخدمة. دوِّن ذلك.

4. تجربة Inventory API

يمكنك الآن تجربة Inventory API من خلال تشغيل المتصفّح والانتقال إلى نقاط النهاية التالية:

SERVICE_URL/inventory

من المفترض أن يعرض لك ذلك 3 عناصر من المستودع وفقًا لبيانات النموذج في الخدمة. في ما يلي نموذج الرد:

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

يمكننا الآن استرداد سلعة مستودع معيّنة من خلال عنوان URL أدناه. من المفترض أن يعرض لك هذا الإجراء سلعة المستودع التي تحمل القيمة 1 في الحقل id.

SERVICE_URL/inventory/1

يجب أن تكون الاستجابة مشابهة لما يلي:

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

أخيرًا، يمكننا محاولة استرداد سلعة غير متوفّرة في المستودع.

SERVICE_URL/inventory/200

من المفترض أن يعرض لك ذلك رسالة خطأ لأنّه لا تتوفّر سلعة في المستودع بقيمة id تبلغ 200. يجب أن يكون الردّ مشابهًا لما يلي:

{
  "error": "Item not found"
}

نحن الآن مستعدون لكتابة اختبارات المراقبة الاصطناعية في Cloud Monitoring بمساعدة Gemini.

5- Synthetic Monitoring في Google Cloud

كما توضّح المستندات، تتيح لك عمليات المراقبة الاصطناعية تحديد ما ستختبره وتسلسل الاختبارات. على سبيل المثال، يمكنك اختبار صفحة تسجيل الدخول إلى تطبيقك أو عملية الدفع في متجر التجارة الإلكترونية أو طلبات البيانات من واجهة برمجة التطبيقات التي يرسلها تطبيقك إلى الخدمات الخارجية.

عند إنشاء أداة مراقبة اصطناعية، يمكنك نشر دالة Cloud من الجيل الثاني المستندة إلى Cloud Run. يجب كتابة الدالة في Node.js والاعتماد على إطار عمل Synthetics SDK مفتوح المصدر. توزّع خدمة Cloud Monitoring إطار العمل هذا وتديره.

تتيح Cloud Monitoring الأنواع التالية من عمليات المراقبة الاصطناعية:

تتولّى خدمة Cloud Monitoring الكثير من العمل الشاق أثناء تنفيذ عمليات المراقبة الاصطناعية هذه. وهي مسؤولة عن:

  • التنفيذ الدوري لدالة Cloud
  • جمع نتائج كل عملية تنفيذ وتخزينها:
  • معلومات النجاح والفشل، مثل رسالة الخطأ ونوع الخطأ وسطر الرمز
  • وقت التنفيذ
  • السجلّات
  • المقاييس

سنستعين بـ Gemini، وتحديدًا بميزة Help Me Write التي ستزوّدنا بالرمز الأولي للاختبارات، لنتمكّن من استخدامه في الاختبارات وإنشاء ميزات إضافية استنادًا إليه. لنبدأ.

6. كتابة Synthetic Monitor لحالات اختبار Inventory API

سننتقل الآن إلى Cloud Console لكتابة Synthetic Monitor.

انتقِل إلى صفحة المراقبة الاصطناعية في Cloud Console. سيؤدي ذلك إلى فتح الصفحة كما هو موضّح أدناه:

96bfce88f55442f3.png

انقر على الرابط إنشاء شاشة مراقبة اصطناعية في الصفحة أعلاه. سيؤدي ذلك إلى ظهور نموذج إعدادات كما هو موضّح أدناه:

af4dde3e9e0a5a16.png

لقد قدّمنا اسمًا s1، ولكن يمكنك اختيار أي اسم آخر. لاحظوا زر ساعدني في البرمجة في الشاشة أعلاه. انقر على ذلك.

سيؤدي ذلك إلى ظهور نافذة منبثقة حيث عليك تقديم الطلب الذي يصف حالات الاختبار التي تريد تنفيذها للتأكّد من أنّ Inventory API يعمل بشكل جيد.

a13e78db15b37dd3.png

في مربّع تعديل الطلب، استخدِم طلبًا مشابهًا للطلب أدناه:

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 حالات اختبار، وعليك استبدال قيمة SERVICE_URL باسم خدمة Cloud Run الفعلي لخدمتك.

بعد النقر على إنشاء، سينشئ Gemini رمز "مجموعة الاختبار" وملف package.json أيضًا كما هو موضّح أدناه. قد يختلف الرمز الذي تم إنشاؤه لك عن الرمز الذي يظهر أدناه. ألقِ نظرة على الرمز وملفات التبعية في الملف package.json.

d19340c357f620bd.png

انقر على INSERT INTO CLOUD FUNCTION. سيؤدي ذلك إلى ظهور نموذج إنشاء Cloud Functions مع ملء القيم اللازمة نيابةً عنك.

d70e50624a09149a.png

انقر على تطبيق الدالة، ثم على الزر إنشاء. لم نحدّد أي إعدادات "قناة التنبيه" في هذا المثال، ولكن يمكنك اختيار ذلك.

سيؤدي ذلك إلى بدء عملية إنشاء "دالة Google Cloud" في الخلفية. قد تستغرق هذه العملية بضع دقائق، لذا يُرجى الانتظار.

1b07702ea5ac5bdb.png

بعد نشر Cloud Function بنجاح، ستبدأ خدمة Cloud Monitoring في تنفيذ مهمة استدعاء Synthetic Monitor نيابةً عنك.

في البداية، ستلاحظ عدم توفّر أي عمليات استدعاء، كما هو موضّح أدناه:

dac473269a289a3b.png

بعد توفّر عمليات تشغيل محدّدة، ستتمكّن من الاطّلاع على عمليات التنفيذ المختلفة. توضّح الشاشة أدناه أنّ الاختبارات ناجحة:

dc2d7dd98277fbcc.png

إذا نقرت على اسم Synthetic Monitor (مثل s1)، سيتم عرض عمليات التنفيذ المختلفة كما هو موضّح أدناه:

8369a02b413d12cc.png

7. تهانينا!

تهانينا، لقد نشرت بنجاح نموذجًا لواجهة برمجة تطبيقات على Google Cloud Run وكتبت اختبارات "المراقبة الاصطناعية" للتحقّق من صحة وظائف الخدمة. خلال هذه العملية، استخدمت Gemini للمساعدة في إنشاء الرمز البرمجي لمجموعة الاختبارات.

8. المستندات المرجعية