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

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

ما هي الاختلافات عند استخدام أجهزة متعددة؟

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

يكون أي إعداد حالي لجهاز واحد صالحًا لوضع الأجهزة المتعددة.

<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>

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

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

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

كيف يختار برنامج "الاختبار الموثوق به" الأجهزة؟

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

كيف تُعِدّ "مجموعة اختبارات التطبيقات" الأجهزة؟

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

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

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

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

على سبيل المثال:

flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)

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

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

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

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

بعد ذلك، ستتمكّن من استخدام واجهات برمجة التطبيقات المعتادة ITestDevice التي أتاحتها "منصة الاختبار" لكتابة الاختبارات.

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

مثال على تطبيق "Hello World" للأجهزة المتعددة

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

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

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

بعد إنشاء Tradefed، يمكنك استخدام الأمر التالي في واجهة TF:

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، ولكن عليك إعطاء اسم أكثر وصفًا إذا أمكن حسب نوع الجهاز الذي تتوقّع ضبطه.