این صفحه به شما کمک میکند از مهار تست فدراسیون تجارت با چندین دستگاه در طول آزمایش استفاده کنید. ابتدا باید با استفاده عادی همانطور که در مثال سرتاسر توضیح داده شده است آشنا شوید.
چه چیزی با چندین دستگاه متفاوت است؟
هنگام پیکربندی و اجرای تست های چند دستگاهی در 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 سعی می کند دستگاه بعدی را اختصاص دهد. اگر امکان تخصیص همه دستگاهها وجود نداشته باشد، همه آنها آزاد میشوند و زمانی که همه دستگاهها مطابقت دارند، دستور دوباره امتحان میشود.
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 و ابرداده) را در اختیار شما قرار می دهد.
سپس میتوانید از APIهای معمول ITestDevice که TF برای نوشتن آزمایشی در اختیار میگذارد، استفاده کنید.
هنوز هیچ API برای انجام عملیات از یک دستگاه به دستگاه دیگر وجود ندارد، مانند device1.sync(device2)
. اگر فکر میکنید که مورد استفاده قانعکنندهای برای پشتیبانی دارید، استدلال خود را به لیست پلتفرم اندروید ارسال کنید.
نمونه چند دستگاه 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
فراخوانی کردیم. اگر ممکن است بسته به نوع دستگاهی که واقعاً انتظار دارید تنظیم شود، باید نام توصیفی تری بدهید.