البنية الأساسية للاختبار الآلي

يتضمّن نظام التشغيل Android 9 بنية أساسية لمجموعة اختبارات المورّد (VTS) لإجراء اختبارات مبرمَجة لمجموعة اختبارات المورّد (VTS) أو مجموعة اختبارات التوافق (CTS) أو اختبارات أخرى على أجهزة الشركاء التي تعمل بصورة النظام العام (GSI) لنظام التشغيل AOSP. في السابق، كان إجراء هذه الاختبارات عملية يدوية للغاية، ولكن تم تصميم البنية الأساسية الجديدة لاختبار VTS بهدف إتاحة الاختبار الآلي عدة مرات في اليوم على أجهزة متعددة.

البنية

تستخدم البنية الأساسية لاختبار VTS الآلي البنية التالية:

بنية الاختبار الآلي

الشكل 1. بنية اختبار VTS المبرمَجة

عند بدء اختبار، تنفّذ البنية الأساسية لاختبار VTS المبرمَج المهام التالية:

  1. يتم جلب نتائج الإنشاء وموارد الاختبار من مواقع مختلفة:
    • إصدار Android للشركاء (PAB) بالنسبة إلى GSI وإطار عمل VTS وبعض الإصدارات الأخرى
    • نظام الملفات المحلي أو Google Cloud Storage أو نظام إنشاء آخر خاص بمورّد معيّن بالنسبة إلى الشركاء الذين لا يخزّنون الإصدارات في السحابة الإلكترونية من Google
  2. تثبِّت هذه الأداة عناصر الإصدار (من الجهاز) وGSI (من AOSP) على الأجهزة المتصلة.
  3. تُجري اختبارات VTS باستخدام TradeFed المحلية أو TradeFed في السحابة الإلكترونية.
  4. إرسال نتائج الاختبار إلى لوحة بيانات VTS

يتم تنسيق العملية من خلال وحدة التحكّم المضيفة (HC) في VTS، وهي جهاز في المختبر يوجّه سلوك جميع الأجهزة المتصلة الخاضعة للاختبار. تتولّى HC مهمة جلب أحدث الإصدارات وتثبيتها على الأجهزة وتشغيل الاختبارات (إما على الجهاز أو من خلال Commander). ويتواصل أيضًا مع أداة جدولة على السحابة الإلكترونية ويوجه الزيارات بين أداة الجدولة ونسخة TradeFed (أو بعض أدوات الاختبار الأخرى) التي تعمل على HC. للحصول على تفاصيل حول وحدة التحكّم بالمضيف، يُرجى الاطّلاع على بنية وحدة التحكّم بالمضيف.

موفّرو الموارد

تتطلّب الاختبارات الآلية موارد، مثل إصدارات النظام وملفات الاختبار وعناصر VTS. مع أنّه يمكن إنشاء هذه الحزم من المصدر، إلا أنّه من الأسهل إنشاؤها من أحدث إصدار بشكل منتظم ثم نشر العناصر لتنزيلها.

يمكن للشركاء الوصول إلى مراجع التشغيل الآلي باستخدام المواقع التالية:

  • إصدار Android للشركاء يتم منح إذن الوصول الآلي على أساس كل حساب.
  • نظام الملفات على الجهاز (أو ما شابه ذلك) بالنسبة إلى الشركاء الذين لا يستخدمون إصدار Android الخاص بالشركاء

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

إصدار Android للشركاء

في الإصدارات 8.1 والإصدارات الأقدم من Android، كان على شركاء Android الانتقال إلى الموقع الإلكتروني Partner Android Build (https://partner.android.com/build)، والانتقال إلى حساباتهم، واسترداد أحدث صور النظام من خلال واجهة المستخدم. لمساعدة الشركاء في تجنُّب هذه العملية البطيئة والشاقة، يتضمّن نظام التشغيل Android 9 إمكانية تنزيل هذه الموارد تلقائيًا من "منصة Android للموردين" عند تقديم بيانات الاعتماد المناسبة.

تحديد إذن الوصول

تستخدم إمكانية الوصول الآلي بروتوكول OAuth2 على Google APIs للوصول إلى الإجراءات عن بُعد المطلوبة. باستخدام الطريقة العادية لإنشاء بيانات اعتماد OAuth2، على الشريك إعداد زوج من معرّف العميل وسر العميل مع Google. عندما يشير PartnerAndroidBuildClient إلى هذا السر للمرة الأولى، سيفتح نافذة متصفّح ليتمكّن المستخدم من تسجيل الدخول إلى حسابه على Google، ما يؤدي إلى إنشاء بيانات اعتماد OAuth2 اللازمة للمتابعة. يتم تخزين بيانات الاعتماد (رمز الدخول المميز ورمز إعادة التحميل) محليًا، ما يعني أنّ الشركاء لن يحتاجوا إلى تسجيل الدخول سوى مرة واحدة.

طلب POST لعنوان URL

يؤدي النقر على رابط مرجع في "مساعد برمجة التطبيقات" إلى إرسال طلب POST يتضمّن البيانات اللازمة لهذا المرجع، بما في ذلك:

  • رقم تعريف الإصدار، هدف الإصدار
  • اسم المورد
  • فرع
  • اسم الإصدار المحتمل وما إذا كان الإصدار المحتمل هو إصدار داخلي

تتلقّى الطريقة downloadBuildArtifact طلب POST من buildsvc RPC، الذي يعرض عنوان URL يمكن استخدامه للوصول إلى المورد.

  • بالنسبة إلى موارد حزمة APK الخاصة بتطبيق Clockwork Companion، يكون عنوان URL قابلاً للقراءة ومستضافًا على PAB (وهو محمي بمصادقة ويمكن الوصول إليه باستخدام بيانات اعتماد OAuth2 المناسبة).
  • بالنسبة إلى الموارد الأخرى، يكون عنوان URL طويلاً وغير محمي من واجهة برمجة التطبيقات الداخلية لإصدار Android (التي تنتهي صلاحيتها بعد خمس دقائق).

الحصول على عنوان URL

لتجنُّب تزوير الطلبات من مواقع إلكترونية مختلفة، يتطلّب buildsvc RPC إرسال رمز XSRF مع المَعلمات الأخرى. وعلى الرغم من أنّ هذا الرمز المميّز يجعل العملية أكثر أمانًا، إلا أنّه يجعل الوصول آليًا أكثر صعوبة لأنّه أصبح مطلوبًا أيضًا للوصول (وهو متاح فقط في JavaScript لصفحة PAB).

لتجنُّب هذه المشكلة، يعيد نظام التشغيل Android 9 تصميم نظام تسمية عناوين URL لجميع الملفات (وليس ملفات APK فقط) لاستخدام أسماء عناوين URL يمكن توقّعها عند الوصول إلى قوائم العناصر وعناوين URL الخاصة بها. تستخدم "حزمة إنشاء التطبيقات" الآن تنسيقًا مناسبًا لعنوان URL يتيح للشركاء تنزيل الموارد، ويمكن لبرامج HC تنزيل ملفات APK هذه بسهولة، لأنّ تنسيق عنوان URL معروف، ويمكن لـ HC تجاوز مشاكل XSRF/ملفات تعريف الارتباط لأنّه لا يحتاج إلى buildsvc RPC.

نظام الملفات على الجهاز

عند توفير دليل يتضمّن قائمة (أو ملف zip) بالعناصر، يضبط موفّر الإصدار الصور ذات الصلة استنادًا إلى محتوى الدليل. يمكنك استخدام أداة gsutil لنسخ الملفات من Google Cloud Storage إلى دليل محلي.

الإصدارات التجريبية من Flash

بعد تنزيل أحدث صور الأجهزة إلى الجهاز المضيف، يجب نقل هذه الصور إلى الأجهزة. ويتم ذلك باستخدام الأوامر العادية adb وfastboot وعمليات Python الفرعية، استنادًا إلى مسارات الملفات المؤقتة التي يخزِّنها موفّرو الإصدارات.

الإجراءات المتاحة:

  • تثبيت صورة نظام عامة (GSI) فقط
  • عرض صور فردية من النظام الرئيسي (مثلاً fastboot flash boot boot.img)
  • تثبيت جميع الصور من النظام الرئيسي مثال:
    • fastboot flashall (باستخدام الأداة المضمّنة flashall)
    • fastboot flash (واحد تلو الآخر)

إجراء الاختبارات

في نظام التشغيل Android 9، لا تتوافق البنية الأساسية للاختبار المبرمَج في VTS إلا مع مفعِّل اختبار TradeFed، ولكن يمكن توسيع نطاقها لتتوافق مع مفعِّلات أخرى في المستقبل.

بعد إعداد الأجهزة، يمكنك تنفيذ الاختبارات باستخدام أحد الخيارات التالية:

  • عند استخدام TradeFed محليًا، استخدِم الأمر test في وحدة التحكّم المضيفة، والذي يأخذ اسم خطة اختبار VTS (مثل vts-selftest) ويُجري الاختبار.
  • عند استخدام TradeFed Cluster (المرتبط اختياريًا بـ MTT)، استخدِم الأمر lease في وحدة تحكّم المضيف، والذي يبحث عن عمليات تشغيل الاختبارات غير المكتملة.

في حال استخدام TradeFedCluster، يتم تشغيل TradeFed محليًا كمدير عن بُعد. إذا لم يكن الأمر كذلك، يتم استدعاء الاختبارات باستخدام العمليات الفرعية في Python.

نتائج التقارير

يتم تلقائيًا إرسال نتائج الاختبار إلى بعض مشاريع لوحة بيانات VTS من خلال VtsMultiDeviceTest.