این صفحه نحوه نوشتن یک تست دستگاه به سبک 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>