إعدادات الاختبار المعقّدة

قد تتطلّب بعض وحدات الاختبار خطوات إعداد وإزالة مخصّصة لا يمكن تنفيذها ضمن حالة الاختبار نفسها. قد تشمل الأمثلة النموذجية ما يلي:

  • تثبيت حِزم APK أخرى (بالإضافة إلى حزمة APK الاختبارية)
  • إرسال بعض الملفات إلى الجهاز
  • تنفيذ الأوامر (مثل adb shell pm ...)

في السابق، كانت فِرق المكوّنات تلجأ عادةً إلى كتابة اختبار من جهة المضيف لتنفيذ هذه المهام، الأمر الذي يتطلّب فهمًا لإطار عمل Trade Federation، وعادةً ما يزيد من تعقيد وحدة الاختبار .

استندنا إلى مجموعة اختبار التوافق (CTS) وقدّمنا مفهوم إعداد وحدة الاختبار لتنفيذ هذه المهام، ويمكن إنجاز قائمة المهام الشائعة المذكورة أعلاه ببضع أسطر فقط من الإعداد. للحصول على أقصى قدر من المرونة، يمكنك حتى تنفيذ أداة إعداد الأهداف الخاصة بك، كما هو محدّد في ITargetPreparer أو ITargetCleaner، وإعدادها لاستخدامها في إعدادات وحدة الاختبار الخاصة بك.

إعدادات وحدة الاختبار هي ملف XML مطلوب تتم إضافته إلى مجلد مصدر الوحدة ذي المستوى الأعلى، ويُطلق عليه اسم AndroidTest.xml. يتّبع ملف XML تنسيق ملف الإعدادات الذي تستخدمه أداة أتمتة الاختبار Trade Federation. في الوقت الحالي، العلامات الرئيسية التي تتم معالجتها من خلال إعدادات وحدة الاختبار هي العلامتان "target_preparer" و"test".

معدّو النماذج المستهدَفون

يحدّد العلامة "target_preparer"، كما يوحي الاسم، أداة إعداد الهدف (راجِع ITargetPreparer) التي توفّر طريقة إعداد يتم استدعاؤها قبل تنفيذ وحدة الاختبار لأغراض الاختبار. وإذا كانت الفئة المشار إليها في العلامة "target_preparer" تنفّذ أيضًا ITargetCleaner، سيتم استدعاء طريقة الإيقاف بعد انتهاء وحدة الاختبار.

لاستخدام إعدادات الوحدة الشائعة المضمّنة، أضِف ملفًا جديدًا باسم AndroidTest.xml في المجلد ذي المستوى الأعلى لوحدة الاختبار، واملأه بالمحتوى التالي:

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

على سبيل المثال، يمكننا إضافة علامات الخيارات التالية (في التعليق "إدراج" أعلاه):

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

ستعمل الخيارات على إعداد حزمة الاختبار لتنفيذ ما يلي:

  1. قبل استدعاء وحدة الاختبار، نفِّذ أمر shell التالي "settings put secure accessibility_enabled 1" على الجهاز
  2. بعد انتهاء وحدة الاختبار، نفِّذ أمر shell التالي: settings put secure accessibility_enabled 0

في هذا المثال تحديدًا، يتم تفعيل/إيقاف ميزة تسهيل الاستخدام قبل/بعد تنفيذ وحدة الاختبار، على التوالي. بعد عرض مثال بسيط، من الضروري تقديم المزيد من التفاصيل حول كيفية استخدام العلامة "option". كما هو موضّح أعلاه، يمكن أن تحتوي العلامة على سمتَين: الاسم والقيمة. يجب أن تشير سمة الاسم إلى أحد الخيارات التي يقدّمها المحضّر.

يعتمد الغرض الدقيق من حقل القيمة على طريقة تحديد المحضِّر للخيار: يمكن أن يكون سلسلة أو رقمًا أو قيمة منطقية أو حتى مسار ملف. في ما يلي ملخّص لأكثر ثلاثة أنواع شيوعًا من أدوات إعداد الاستهداف:

  • اسم الفئة: PushFilePreparer

    • short name: push-file
    • الدالة: تنقل ملفات عشوائية ضمن مجلد حالات الاختبار إلى الوجهة على الجهاز
    • ملاحظات:
      • يمكن لهذا المحضِّر نقل البيانات من مجلد إلى آخر أو من ملف إلى آخر، أي أنّه لا يمكنك نقل ملف ضمن مجلد على الجهاز، بل عليك تحديد اسم ملف الوجهة ضمن هذا المجلد أيضًا.
    • options:
      • push-file: هي push-spec تحدّد الملف المحلي الذي سيتم نقله إلى المسار المحدّد على الجهاز. يمكن تكرارها. في حال ضبط ملفات متعددة ليتم إرسالها إلى مسار بعيد نفسه، سيتم إرسال أحدث ملف.
      • push: (deprecated) هي push-spec، ويتم تنسيقها على النحو التالي: ‎'/path/to/srcfile.txt->/path/to/destfile.txt'‎ أو ‎'/path/to/srcfile.txt->/path/to/destdir/'‎. يمكن تكرارها. قد يكون هذا المسار نسبيًا بالنسبة إلى دليل وحدة الاختبار أو دليل الإخراج نفسه.
      • post-push: أمر يتم تنفيذه على الجهاز (باستخدام adb shell <your command>) بعد محاولة تنفيذ جميع عمليات الدفع. حالة الاستخدام الشائعة هي استخدام chmod للأذونات
  • اسم الفئة: InstallApkSetup

    • الاسم القصير:install-apk
    • الوظيفة: تنقل ملفات APK عشوائية إلى الوجهة على الجهاز
    • الخيارات:
      • test-file-name: اسم حزمة APK المطلوب تثبيتها على الجهاز.
      • install-arg: وسيطات إضافية سيتم تمريرها إلى الأمر pm install، بما في ذلك الشرطة البادئة، مثل "-d". قد يتم تكرارها
  • اسم الفئة: RunCommandTargetPreparer

    • الاسم المختصر: run-command
    • الدالة: تنفّذ أوامر shell عشوائية قبل أو بعد تنفيذ وحدة الاختبار
    • الخيارات:
      • run-command:أمر adb shell لتنفيذه. قد يتم تكرارها
      • teardown-command:أمر adb shell لتنفيذه خلال مرحلة الإيقاف. قد يتم تكرارها

فئة الاختبار

فئة الاختبار هي فئة Trade Federation التي سيتم استخدامها لتنفيذ الاختبار.

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

في ما يلي ثلاث فئات اختبار شائعة:

  • اسم الفئة: GTest

    • الاسم المختصر: gtest
    • الدالة: اختبار يشغّل حزمة اختبار أصلية على جهاز معيّن.
    • الخيارات:
      • native-test-device-path:مسار الاختبارات الأصلية على الجهاز.
  • اسم الفئة: InstrumentationTest

    • الاسم المختصر: أداة القياس
    • الوظيفة: اختبار يشغّل حزمة اختبار أدوات على جهاز معيّن
    • الخيارات:
      • package:اسم حزمة بيان تطبيق اختبار Android المطلوب تنفيذه.
      • class:تمثّل هذه السمة اسم فئة الاختبار المطلوب تنفيذه.
      • method:اسم طريقة الاختبار التي سيتم تنفيذها.
  • اسم الفئة: AndroidJUnitTest

    • الوظيفة: اختبار ينفّذ حزمة اختبار أدوات على جهاز معيّن باستخدام android.support.test.runner.AndroidJUnitRunner وهذه هي الطريقة الرئيسية لتنفيذ اختبار أدوات.