توضّح هذه الصفحة كيفية كتابة اختبار جهاز على غرار 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 بواسطة أداة تشغيل اختبار JUnit4 DeviceJUnit4ClassRunner . يكون الهيكل العام لفئة الاختبار هو نفسه اختبار 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) التي يتم إجراء الاختبار وفقًا لها.
الدعم المتبادل: إعداد الجهاز وتنظيفه حسب الفئة
لا يمكن تطبيق JUnit4 @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 .
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>