نوشتن آزمایش میزبان‌محور در Trade Federation

این صفحه نحوه نوشتن آزمایش دستگاه به سبک JUnit4 را که توسط میزبان هدایت می‌شود شرح می‌دهد. این یعنی طرف میزبان مهار، کنش‌هایی را دربرابر دستگاه راه‌اندازی خواهد کرد.

توجه داشته باشید که آزمایش‌های «سمت میزبان» و آزمایش‌های «میزبان‌محور» را کمی متفاوت درنظر می‌گیریم:

  • آزمایش میزبان‌محور: آزمایشی است که روی میزبان اجرا می‌شود و با یک یا چند دستگاه تعامل دارد. سیستم تحت آزمایش (SUT) در خود میزبان نیست، بلکه از میزبان آزمایش می‌شود.
  • آزمایش سمت میزبان: آزمایشی است که صرفاً روی میزبان اجرا می‌شود و چیزی را فقط روی میزبان آزمایش می‌کند، برای مثال آزمون‌های واحد.

چرا آزمون میزبان‌محور را به‌جای آزمون ابزار دقیق ایجاد کنیم؟

برخی‌از آزمایش‌ها ممکن است از شما بخواهند که بر وضعیت کلی دستگاه تأثیر بگذارید، مثلاً فرمان بازراه‌اندازی صادر کنید. در مورد آزمایش ابزارگری، بازراه‌اندازی باعث ازکارافتادن ابزارگری می‌شود، آزمایش نمی‌تواند ادامه یابد، و هیچ نتیجه‌ای دردسترس نخواهد بود.

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

آزمایش میزبان‌محور می‌تواند این موارد استفاده را مدیریت کند و امکان آزمایش پیشرفته دستگاه را با سناریوهای بیشتر فراهم کند. اگر در این وضعیت هستید، نوشتن یک آزمایش میزبان‌محور منطقی‌ترین کار است.

آزمایش‌های میزبان‌محور چگونه در TF نوشته می‌شوند؟

در اینجا نمونه‌ای آورده شده است:

@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
    @Before
    public void setUp() throws Exception {
       // Some setup
    }

    @Test
    public void testCheckWeHaveDevice() throws Exception {
        Assert.assertNotNull(getDevice());
    }
}

آزمایش‌های میزبان‌محور در Trade Federation توسط DeviceJUnit4ClassRunner اجراکننده آزمایش JUnit4 اجرا می‌شوند. ساختار کلی کلاس آزمایش همانند آزمایش JUnit4 معمولی است:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume، Assert

گسترش دادن BaseHostJunit4Test روشی برای به‌ارث بردن میانای برنامه‌سازی کاربردی ابزارهای آزمایشی مفید است، ازجمله:

  • ‫installPackage: امکان نصب APK در دستگاه هدف را فراهم می‌کند.
  • installPackageAsUser: اجازه می‌دهد APK به‌عنوان کاربر در دستگاه هدف نصب شود.
  • uninstallPackage: اجازه می‌دهد فایل APK حذف نصب شود.
  • isPackageInstalled: بررسی می‌کند که بسته نصب شده است یا نه.
  • hasDeviceFeature: بررسی کنید که آیا دستگاه از ویژگی پشتیبانی می‌کند یا نه. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): بااستفاده از DeviceTestRunOptions، آزمون ابزار دقیق را دربرابر دستگاه هدف اجرا کنید تا همه گزینه‌های ممکن را مدیریت کنید.

همچنین دسترسی به شیء دستگاه Tradefed را فراهم کنید:

  • getDevice(): شیء دستگاه TF را برای دستکاری دستگاه برمی‌گرداند.
  • ‫getBuild(): شیء TF اطلاعات ساخت را برای دریافت اطلاعات درباره ساخت برمی‌گرداند.
  • ‫getAbi(): «میان واسط کاربردی نرم‌افزار» (ABI) را که آزمایش دربرابر آن اجرا می‌شود برمی‌گرداند.

پشتیبانی Tradefed: آماده‌سازی و پاک‌سازی دستگاه به‌ازای هر کلاس

JUnit4 @BeforeClass و @AfterClass فقط برای روش‌های ایستا قابل‌اجرا هستند، که استفاده از گرداننده #getDevice() را برای انجام برخی راه‌اندازی‌ها یا پاک‌سازی‌های یک‌باره، مختص دستگاه، و برای هر کلاس غیرممکن می‌کند. برای حل این مشکل، از حاشیه‌نویسی Tradefed استفاده کنید.

  • @BeforeClassWithInfo: Runs before @BeforeClass annotations
  • ‫@AfterClassWithInfo: پس‌از یادداشت‌های @AfterClass اجرا می‌شود
   @BeforeClassWithInfo
   public static void beforeClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

   @AfterClassWithInfo
   public static void afterClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

‫TestInformation به شما امکان می‌دهد از دستگاه استفاده کنید و دارایی‌هایی را ذخیره کنید که می‌توانند در حوزه ایستا یا غیرایستا استفاده شوند. ‫BaseHostJUnit4Test از دریافت TestInformation در محدوده غیرایستا ازطریق #getTestInformation() پشتیبانی می‌کند.

اگر BaseHostJUnit4Test را گسترش نمی‌دهید، می‌توانید ITestInformationReceiver را پیاده‌سازی کنید تا شیء TestInformation را دریافت کنید.

چگونه آزمایشی میزبان‌محور را در Tradefed پیکربندی کنیم؟

در فایل پیکربندی Tradefed XML، آزمایش‌های میزبان‌محور ازطریق HostTest اجراکننده اجرا می‌شوند.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>