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

تساعدك هذه الصفحة في استخدام 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. -->>

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

يفترض هذا المستند أنّك على دراية بإعدادات اختبارات 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.

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

يبحث 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 التي أتاحتها TF لكتابة الاختبارات.

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