این صفحه به شما کمک میکند تا در طول آزمایش از هارنس تست فدراسیون تجارت با چندین دستگاه استفاده کنید. ابتدا باید با نحوه استفاده عادی، همانطور که در مثال سر تا سر توضیح داده شده است، آشنا شوید.
چه تفاوتی با چندین دستگاه وجود دارد؟
هنگام پیکربندی و اجرای تستهای چند دستگاهی در Trade Federation، چندین چیز متفاوت است، به ویژه:
هرگونه پیکربندی تک دستگاهی موجود برای حالت چند دستگاهی معتبر است.
<! -- انجام کار: جملهی بالا را با اضافه کردن مثالی از مورد استفادهی تک دستگاهی در رابطه با حالت چند دستگاهی در جملهی دوم، روشنتر کنید. -->>
پیکربندی چند دستگاهی
این سند فرض میکند که شما از قبل با پیکربندی معمول تست 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>باید برای تنظیماتی که باید پس از تنظیمات تک تک دستگاهها انجام شود، استفاده شود.
برای مثال:
دستگاه فلش ۱ (target_preparer) دستگاه فلش ۲ (target_preparer) اتصال بلوتوث هر دو دستگاه (multi_target_preparer)
نوشتن تست چند دستگاهی
هنگام نوشتن یک تست تک دستگاهی معمولی، رابط IDeviceTest را پیادهسازی میکنید.
برای اینکه تستها دستگاههای تحت تست را دریافت کنند، میتوانید IMultiDeviceTest یا IInvocationContextReceiver را پیادهسازی کنید.
IMultiDeviceTest نقشه مستقیمی از دستگاه را به IBuildInfo آن ارائه میدهد در حالی که IInvocationContextReceiver بعداً متن کامل (دستگاه، IBuildInfo و فراداده) را در اختیار شما قرار میدهد.
سپس میتوانید از APIهای معمول ITestDevice که TF برای نوشتن تست در اختیار شما قرار داده است، استفاده کنید.
هنوز هیچ API برای انجام عملیات از یک دستگاه به دستگاه دیگر، مانند device1.sync(device2) وجود ندارد. اگر فکر میکنید مورد استفاده قانعکنندهای برای پشتیبانی دارید، استدلال خود را به لیست پلتفرمهای اندروید ارسال کنید.
مثال سلام دنیا برای چند دستگاه
ما یک پیکربندی نمونه شبیه به 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 نامگذاری کردیم؛ شما باید در صورت امکان، بسته به نوع دستگاهی که واقعاً انتظار تنظیم آن را دارید، نام توصیفیتری بدهید.