يُرجى أولاً قراءة مقالة اختبار تطبيقك على الموقع الإلكتروني developer.android.com. يُرجى العِلم أنّ هناك بعض الاختلافات في كيفية استخدام اختبارات الأدوات في اختبار المنصة.
باختصار، يوفّر اختبار الأدوات بيئة خاصة لتنفيذ الاختبار يتم تشغيلها من خلال الأمر am instrument، حيث تتم إعادة تشغيل عملية التطبيق المستهدَف وتهيئتها باستخدام سياق التطبيق الأساسي، ويتم تشغيل سلسلة تعليمات الأدوات داخل الجهاز الظاهري لعملية التطبيق. يبدأ رمز الاختبار التنفيذ على سلسلة تعليمات الأدوات هذه ويتم تزويده بمثيل Instrumentation يوفّر إمكانية الوصول إلى سياق التطبيق وواجهات برمجة التطبيقات لمعالجة عملية التطبيق قيد الاختبار.
المفاهيم الرئيسية
- يجب الإعلان عن أداة في حزمة تطبيق، باستخدام علامة
<instrumentation>المتداخلة ضمن علامة<manifest>لملف بيان حزمة التطبيق. - قد يحتوي ملف بيان حزمة التطبيق من الناحية الفنية على علامات
<instrumentation>متعددة، على الرغم من أنّه لا يتم استخدامها عادةً بهذه الطريقة. - يجب أن تحتوي كل علامة
<instrumentation>على ما يلي:- السمة
android:name: يجب أن يكون اسم فئة فرعية منInstrumentationمضمّنة في تطبيق الاختبار، وهي عادةً أداة تشغيل الاختبار قيد الاستخدام، مثلاً:android.support.test.runner.AndroidJUnitRunner - يجب تحديد السمة
android:targetPackage. يجب ضبط قيمتها على حزمة التطبيق قيد الاختبار.
- السمة
ملخّص الخطوات
في ما يلي الوجهات الشائعة للاختبارات المحكمة على خدمات إطار العمل:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestestsإذا كنت تضيف وحدة أدوات جديدة تمامًا للمكوّن، يُرجى الاطّلاع على
يُرجى اتّباع الاصطلاح الحالي إذا كنت تضيف اختبارات إلى أحد المواقع أعلاه. إذا كنت تُعدّ وحدة اختبار جديدة، يُرجى اتّباع عملية إعداد
AndroidManifest.xmlوAndroid.mkفي أحد المواقع أعلاه.يمكنك الاطّلاع على frameworks/base/core/tests/coretests/ للحصول على مثال. يُرجى العِلم أنّ هذه الأسطر تثبِّت تطبيقات إضافية:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />يُرجى وضع علامة
@SmallTestأو@MediumTestأو@LargeTestعلى الاختباريمكنك إنشاء وحدة الاختبار باستخدام m، مثلاً:
m FrameworksCoreTestsيمكنك تشغيل الاختبارات:
أبسط حل هو استخدام Atest على النحو التالي:
atest FrameworksCoreTestsبالنسبة إلى الاختبارات الأكثر تعقيدًا، يمكنك استخدام أداة اختبار Trade Federation:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTestsإذا كنت لا تستخدم Tradefed، يمكنك تثبيت الاختبارات وتشغيلها يدويًا:
- يمكنك تثبيت ملف APK الذي تم إنشاؤه:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apkيمكنك تشغيل الاختبارات باستخدام خيارات متنوعة:
جميع الاختبارات في ملف APK
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerجميع الاختبارات ضمن حزمة Java معيّنة
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerجميع الاختبارات ضمن فئة معيّنة
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerطريقة اختبار معيّنة
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
يمكن أن يؤكد الاختبار بشكل صريح على النجاح أو الفشل باستخدام واجهات برمجة تطبيقات JUnit، بالإضافة إلى ذلك، ستؤدي أي استثناءات غير معالَجة إلى حدوث فشل وظيفي.
لإرسال مقاييس الأداء، يمكن أن يستدعي رمز الاختبار
Instrumentation#sendStatus
لإرسال قائمة بأزواج المفتاح/القيمة. من المهم الانتباه إلى ما يلي:
- يمكن أن تكون المقاييس أعدادًا صحيحة أو أعدادًا عشرية
- سيتم تجاهل أي قيم غير عددية
- يمكن أن يكون ملف APK للاختبار إما اختبارات وظيفية أو اختبارات مقاييس، ولكن لا يمكن حاليًا الجمع بينهما