إجراء الاختبارات على عدة أجهزة

تساعدك هذه الصفحة في استخدام حزمة اختبار Trade Federation مع أجهزة متعددة أثناء الاختبار.عليك أولاً التعرّف على الاستخدام العادي كما هو موضّح في مثال الاختبار الشامل.

ما الفرق بين الأجهزة المتعددة؟

هناك عدة اختلافات عند إعداد اختبارات الأجهزة المتعددة وتنفيذها في Trade Federation، على وجه الخصوص:

تكون أي إعدادات حالية على جهاز واحد صالحة للاستخدام في وضع "الأجهزة المتعددة".

<! -- TODO: توضيح الجملة أعلاه مباشرةً من خلال إضافة مثال على حالة استخدام جهاز واحد في الجملة الثانية لأنّها تتعلّق بالوضع المتعدّد الأجهزة -->>

إعداد أجهزة متعددة

يفترض هذا المستند أنّك على دراية بإعدادات اختبار TF النموذجية. في ما يلي شكل الإعداد النموذجي للاختبار باستخدام جهازَين:

<configuration description="A simple multi-devices example in Tradefed">

    <device name="device1">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <option name="log-level" value="verbose" />
    <test class="com.android.tradefed.HelloWorldMultiDevices" />

    <logger class="com.android.tradefed.log.FileLogger" />
    <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

</configuration>

يجب ذكر عدة نقاط حول البنية:

  • من المتوقّع أن يتم عرض <device> لكل جهاز مطلوب.
  • يجب تضمين <build_provider> و<target_preparer> و<device_recovery> و<device_requirements> و<device_options>، إن أمكن، داخل علامة <device>، وإلا سيتم طرح استثناء.
  • سمة name لعنصر <device> إلزامية ويجب أن تكون فريدة بين جميع الأجهزة المتوفّرة في الإعداد. ويُستخدَم للإشارة إلى الجهاز المحدّد المرتبط به. يتيح ذلك لاختبارك استهداف جهاز معيّن.
  • يمكن أن يكون لـ <option> نطاق شامل عندما يكون في جذر الإعدادات أو أن يكون محدودًا بنطاق الجهاز عند تحديده داخل علامة <device>.

لا تزال جميع القواعد الأخرى السارية على إعداد جهاز واحد سارية هنا. اطّلِع على مثال Hello World أدناه لمزيد من التفاصيل.

تعديل سطر الأوامر

عند تحديد الخيارات في سطر أوامر TF، يمكن أيضًا تحديد نطاق جهاز باستخدام {<device name>} حيث يكون <device name> هو الاسم المحدَّد في إعدادات XML.

في المثال أعلاه، تم السماح بالخيارات التالية:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

يمكنك استهداف عنصر واحد فقط من عناصر build_provider على الجهاز باستخدام اسم الجهاز، على سبيل المثال:

--{device2}device-setup:disable

في هذا المثال، يتخطّى device2 عملية إعداد الجهاز بينما لا يفعل device1 ذلك.

كيف يختار فريق TF الأجهزة؟

تبحث "مجموعة التجارة" عن جهاز يتطابق مع device_requirements (عادةً ما يكون نوع الجهاز أو المنتج أو غير ذلك) بترتيب ظهور الجهاز في الإعدادات. في كل مرة يتم فيها تخصيص جهاز، يحاول فريق TF تخصيص الجهاز التالي. إذا لم يكن من الممكن تخصيص جميع الأجهزة، سيتم إخلاء جميع الأجهزة وإعادة تنفيذ الأمر عند مطابقة جميع الأجهزة.

كيف يُعدّ فريق الدعم الفني الأجهزة؟

تكون خطوة الإعداد للأجهزة المتعددة متطابقة إلى حدٍ كبير مع خطوة الإعداد للأجهزة الفردية. يتم تحضير كل جهاز من خلال استدعاء <target_preparer> بترتيب ظهوره داخل <device>.

يمكنك أيضًا استخدام <multi_target_preparer> المحدّد في جذر الإعدادات الذي يُمكّن خطوات الإعداد التي تتطلّب أجهزة متعددة، مثل إقران الأجهزة. يتم تشغيلها بعد الخطوة target_preparer.

يمكنك استخدام الإجراء البديل <pre_multi_target_preparer> الذي يتم تنفيذه قبل الخطوة target_preparer.

  • يجب استخدام <pre_multi_target_preparer> لإجراء عملية الإعداد التي يجب إجراؤها قبل إعداد الجهاز الفردي.
  • يجب استخدام <multi_target_preparer> للإعداد الذي يجب إجراؤه بعد عمليات إعداد الأجهزة الفردية.

مثلاً:

فلاش الجهاز 1 (target_preparer) فلاش الجهاز 2 (target_preparer) بلوتوث ربط كلا الجهازَين (multi_target_preparer)

كتابة اختبار على أجهزة متعددة

عند كتابة اختبار عادي على جهاز واحد، يمكنك تنفيذ واجهة IDeviceTest.

لإجراء الاختبارات على الأجهزة التي يتم اختبارها، يمكنك تنفيذ إما IMultiDeviceTest أو IInvocationContextReceiver.

يمنحك IMultiDeviceTest خريطة مباشرة للجهاز إلى IBuildInfo، بينما يمنحك IInvocationContextReceiver السياق الكامل لاحقًا (الجهاز، IBuildInfo والبيانات الوصفية).

ستتمكّن بعد ذلك من استخدام واجهات برمجة التطبيقات المعتادة لـ ITestDevice التي يوفّرها فريق التطوير لكتابة الاختبارات.

لا تتوفّر حتى الآن واجهات برمجة تطبيقات لإجراء عمليات من جهاز إلى آخر، مثل device1.sync(device2). إذا كنت تعتقد أنّ لديك حالة استخدام مقنعة تتطلب التوفّر، يُرجى إرسال وجهة نظرك إلى قائمة android-platform.

مثال على استخدام أجهزة متعدّدة في "مرحبًا بالعالم"

أضفنا مثالاً على الإعدادات يشبه Hello World: multi-devices.xml يتوفر أيضًا مثال على تنفيذ multi_target_preparer HelloWorldMultiTargetPreparer يوضّح كيفية تلقّي قائمة بالأجهزة وإصداراتها.

في ما يلي مثال كامل يتضمن ما يلي:

  • تخصيص جهازَين
  • الوصول إلى كلا الجهازَين من خلال multi_target_preparer
  • إجراء اختبار يستخدم الجهازَين

بعد إنشاء Tradefed، يمكنك استخدام الأمر التالي في shell:

run example/multi-devices

من المفترض أن تظهر لك بعض النتائج التي تتضمّن ما يلي:

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'

يجب أن يكون جهازان متصلَين لتنفيذ ما سبق. يمكن التحقّق من ذلك من خلال: adb devices

عندما تكون عملية الاستدعاء قيد التقدّم، يمكنك مراقبتها مثل الأجهزة الفردية باستخدام list i وlist d:

tf >list i
Command Id  Exec Time  Device                          State
1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
tf >list d
Serial            State      Product   Variant   Build   Battery
00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
LP5A390056        Allocated  shamu     shamu     NRD90I  100

من المفترض أن تتمكّن من الاطّلاع على الأجهزة المشارِكة في كل طلب، بالإضافة إلى جميع الأجهزة المتاحة وحالتها.

يُرجى العِلم أنّنا في هذا المثال أطلقنا على الجهازَين في الإعدادات اسمَي device1 وdevice2، وعليك اختيار اسم أكثر وصفًا إن أمكن، استنادًا إلى نوع الجهاز الذي تتوقّع ضبطه.