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