تصف هذه الصفحة كيفية كتابة اختبار جهاز على نمط 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());
}
}
يتم إجراء الاختبارات التي يعتمد عليها المضيف في الاتحاد التجاري بواسطة عداء اختبار 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: إعداد الجهاز وتنظيفه لكل فئة
@BeforeClass
و @AfterClass
قابلة للتطبيق فقط على الطرق الثابتة ، مما يجعل من المستحيل استخدام معالج #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 runner.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>