يُرجى أولاً قراءة مقالة اختبار تطبيقك على developer.android.com. يُرجى العِلم أنّ هناك بعض الاختلافات في كيفية استخدام اختبارات الأدوات في اختبار المنصة.
باختصار، يوفّر اختبار قياس حالة التطبيق بيئة تنفيذ اختبارية خاصة، كما يتم إطلاقه من خلال الأمر am instrument
، حيث تتم إعادة تشغيل عملية التطبيق المستهدَفة وإعدادها باستخدام سياق التطبيق الأساسي، وتبدأ سلسلة تعليمات في عملية التطبيق داخل الجهاز الافتراضي (VM) الخاص بعملية التطبيق. يبدأ
رمز الاختبار التنفيذ في سلسلة الأدوات هذه ويتم تزويده
بمثيل 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 الاختبارية إما اختبارات وظيفية أو اختبارات مقاييس، ولكن لا يمكن حاليًا دمج كليهما.