اجرای آزمایش‌ها با چند دستگاه

این صفحه به شما کمک می‌کند درطول آزمایش از «مهار آزمون فدراسیون تجارت» با چند دستگاه استفاده کنید.ابتدا باید با استفاده عادی که در مثال سرتاسری توضیح داده شده است آشنا شوید.

درصورت استفاده از چند دستگاه، چه چیزی متفاوت است؟

هنگام پیکربندی و اجرای آزمایش‌های چنددستگاهی در 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> مشخص می‌شود به محدوده دستگاه محدود شود.

همه قوانین دیگر مربوط به پیکربندی تک‌دستگاهی در اینجا نیز اعمال می‌شود. برای جزئیات بیشتر، مثال «سلام دنیا» در زیر را ببینید.

به‌روزرسانی خط فرمان

هنگام مشخص کردن گزینه‌ها در خط فرمان 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 سعی می‌کند دستگاه بعدی را اختصاص دهد. اگر اختصاص دادن همه دستگاه‌ها ممکن نباشد، همه آن‌ها آزاد خواهند شد و وقتی همه دستگاه‌ها مطابقت داده شدند، فرمان دوباره امتحان خواهد شد.

TF چگونه دستگاه‌ها را آماده می‌کند؟

مرحله آماده‌سازی برای چند دستگاه عمدتاً مشابه آماده‌سازی برای تک‌دستگاه است. هر دستگاه با فراخوانی <target_preparer> به‌ترتیب ظاهر شدن در <device> آماده می‌شود.

همچنین می‌توانید از <multi_target_preparer> مشخص‌شده در ریشه پیکربندی استفاده کنید که مراحل آماده‌سازی نیازمند چند دستگاه، مثل جفت‌سازی دستگاه‌ها، را فعال می‌کند. پس‌از مرحله target_preparer اجرا می‌شود.

جایگزین آن <pre_multi_target_preparer> است که قبل‌از مرحله target_preparer اجرا می‌شود.

  • از <pre_multi_target_preparer> باید برای راه‌اندازی‌ای استفاده شود که باید قبل‌از راه‌اندازی دستگاه شخصی انجام شود.
  • از <multi_target_preparer> باید برای راه‌اندازی‌هایی استفاده شود که باید پس‌از راه‌اندازی دستگاه‌های فردی انجام شود.

برای مثال:

دستگاه ۱ را فلش کن (آماده‌کننده هدف) دستگاه ۲ را فلش کن (آماده‌کننده هدف) بلوتوث هر دو دستگاه را متصل کن (آماده‌کننده چند هدف)

نوشتن آزمون چنددستگاهی

هنگام نوشتن آزمایش تک‌دستگاهی معمولی، رابط IDeviceTest را پیاده‌سازی می‌کنید.

برای اینکه آزمایش‌ها دستگاه‌های تحت آزمایش را دریافت کنند، می‌توانید IMultiDeviceTest یا IInvocationContextReceiver را پیاده‌سازی کنید.

‫IMultiDeviceTest نقشه مستقیمی از دستگاه به IBuildInfo آن ارائه می‌دهد، درحالی‌که IInvocationContextReceiver بعداً زمینه کامل (دستگاه، IBuildInfo، و فراداده) را ارائه می‌دهد.

سپس می‌توانید از میاناهای برنامه‌سازی کاربردی معمول ITestDevice که TF برای نوشتن آزمایش دراختیار قرار می‌دهد استفاده کنید.

هنوز هیچ میانای برنامه‌سازی کاربردی‌ای برای انجام عملیات از یک دستگاه به دستگاه دیگر وجود ندارد، مانند device1.sync(device2). اگر فکر می‌کنید مورد استفاده قانع‌کننده‌ای دارید که باید پشتیبانی شود، دلیل خود را به فهرست android-platform ارسال کنید.

مثال سلام دنیا برای چند دستگاه

پیکربندی نمونه‌ای شبیه به «سلام دنیا» اضافه کردیم: 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 نامیده‌ایم؛ درصورت امکان، نام توصیفی‌تری بسته به نوع دستگاهی که واقعاً انتظار دارید تنظیم شود، به آن بدهید.