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