یک آزمون میزبان محور در 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 راهی برای به ارث بردن API ابزارهای آزمایشی مفید مانند:

  • 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 فقط برای متدهای استاتیک قابل استفاده هستند، که استفاده از handler #getDevice() را برای انجام تنظیمات یا پاکسازی مخصوص دستگاه، یک بار، برای هر کلاس غیرممکن می‌کند. برای حل این مشکل، از حاشیه نویسی Tradefed استفاده کنید.

  • @BeforeClassWithInfo: قبل از حاشیه‌نویسی‌های @BeforeClass اجرا می‌شود
  • @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 پیکربندی کنیم؟

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

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