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

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

ما هو الفرق مع أجهزة متعددة؟

تختلف عدة أشياء عند تكوين اختبارات الأجهزة المتعددة وتشغيلها في Trade Union، على وجه الخصوص:

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

<! -- 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 المعتادة التي وضعها TF تحت تصرفك لكتابة الاختبار.

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

أجهزة متعددة مثال مرحبا بالعالم

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

وهذا مثال كامل يتضمن:

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

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