تست ها را با چندین دستگاه اجرا کنید

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

چه تفاوتی با چندین دستگاه دارد؟

هنگام پیکربندی و اجرای تست های چند دستگاهی در 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 فراخوانی کردیم. اگر ممکن است بسته به نوع دستگاهی که واقعاً انتظار دارید تنظیم شود، باید نام توصیفی تری بدهید.