قد تتطلّب بعض وحدات الاختبار خطوات إعداد وإزالة مخصّصة لا يمكن تنفيذها ضمن حالة الاختبار نفسها. في ما يلي أمثلة نموذجية:
- تثبيت حِزم APK أخرى (بالإضافة إلى حزمة APK الخاصة بالاختبار)
- نقل بعض الملفات إلى الجهاز
- تنفيذ الأوامر (مثل adb shell pm ...)
في السابق، كانت فِرق المكوّنات تلجأ عادةً إلى كتابة اختبار على جانب المضيف لتنفيذ هذه المهام، ما يتطلّب فهمًا لإطار عمل Trade Federation ويزيد عادةً من تعقيد وحدة الاختبار .
استنادًا إلى حزمة اختبار التوافق مع Android، قدّمنا مفهوم إعداد وحدة الاختبار لدعم هذه المهام، ويمكن إنجاز قائمة المهام الشائعة أعلاه ببضعة أسطر فقط من الإعداد. لتحقيق أقصى قدر من المرونة، يمكنك حتى تنفيذ أداة إعداد الهدف الخاصة بك، كما هو محدّد في 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>
على سبيل المثال، يمكننا إضافة علامتَي الخيار التاليتَين (عند التعليق "insert" أعلاه):
<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>
ستضبط الخيارات إطار عمل الاختبار على ما يلي:
- تنفيذ أمر shell "settings put secure accessibility_enabled 1" على الجهاز قبل استدعاء وحدة الاختبار
- تنفيذ أمر shell "settings put secure accessibility_enabled 0" بعد انتهاء وحدة الاختبار
في هذا المثال تحديدًا، يتم تفعيل ميزة تسهيل الاستخدام أو إيقافها قبل تنفيذ وحدة الاختبار أو بعده، على التوالي. بعد عرض مثال بسيط، من الضروري تغطية المزيد من التفاصيل حول كيفية استخدام العلامة "option". كما هو موضّح أعلاه، يمكن أن تحتوي العلامة على سمتَين: name وvalue. يجب أن تشير السمة name إلى أحد الخيارات التي توفّرها أداة الإعداد.
يعتمد الغرض الدقيق من حقل value على كيفية تحديد أداة الإعداد للخيار: يمكن أن يكون سلسلة أو رقمًا أو قيمة منطقية أو حتى مسار ملف. في ما يلي ملخّص لأدوات إعداد الهدف الثلاث الشائعة:
اسم الفئة: PushFilePreparer
- الاسم المختصر: push-file
- الوظيفة: نقل ملفات عشوائية ضمن مجلد حالة الاختبار إلى الوجهة على الجهاز
- ملاحظات:
- يمكن لأداة الإعداد هذه نقل الملفات من مجلد إلى مجلد أو من ملف إلى ملف، ما يعني أنّه لا يمكنك نقل ملف ضمن مجلد على الجهاز: يجب تحديد اسم ملف الوجهة ضمن هذا المجلد أيضًا.
- الخيارات:
- push-file: مواصفات النقل، تحدّد الملف المحلي للمسار الذي يجب نقله إليه على الجهاز. يمكن تكرار هذه السمة. إذا تم ضبط ملفات متعدّدة ليتم نقلها إلى المسار البعيد نفسه، سيتم نقل أحدث ملف.
- push: (تم إيقاف هذه السمة) مواصفات النقل، بتنسيق
'
/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
- الاسم المختصر: instrumentation
- الوظيفة: اختبار ينفّذ حزمة اختبار حالة التطبيق على جهاز معيّن
- الخيارات:
- package: اسم حزمة بيان تطبيق اختبار Android الذي سيتم تنفيذه
- class: اسم فئة الاختبار التي سيتم تنفيذها
- method: اسم طريقة الاختبار التي سيتم تنفيذها.
اسم الفئة: AndroidJUnitTest
- الوظيفة: اختبار ينفّذ حزمة اختبار لقياس حالة التطبيق على جهاز معيّن باستخدام android.support.test.runner.AndroidJUnitRunner هذه هي الطريقة الرئيسية لتنفيذ اختبار لقياس حالة التطبيق.