اقرأ أولاً مقالة اختبار تطبيقك على 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 الاختبارية إما اختبارات وظيفية أو اختبارات مقاييس، ولكن لا يمكن حاليًا دمج كليهما.