كتابة اختبار يحركه المضيف في الاتحاد التجاري

توضح هذه الصفحة كيفية كتابة اختبار جهاز بنمط 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: إعداد الجهاز وتنظيفه لكل فئة

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؟

في ملف تكوين Tradefed XML، يتم تشغيل الاختبارات التي يحركها المضيف من خلال مشغل HostTest .

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