اختبارات قياس حالة التطبيق

اقرأ أولاً مقالة اختبار تطبيقك على developer.android.com. يُرجى العِلم أنّ هناك بعض الاختلافات في كيفية استخدام اختبارات الأدوات في اختبار المنصة.

باختصار، يقدّم اختبار الأدوات بيئة تنفيذ اختبار خاصة يتم تشغيلها من خلال الأمر am instrument، حيث تتم إعادة تشغيل عملية التطبيق المستهدفة وإعدادها باستخدام سياق التطبيق الأساسي، ويتم بدء سلسلة مهام الأدوات داخل الجهاز الافتراضي لعملية التطبيق. يبدأ رمز الاختبار التنفيذ في سلسلة الأدوات هذه ويتم تزويده بمثيل Instrumentation يتيح الوصول إلى سياق التطبيق وواجهات برمجة التطبيقات للتلاعب بعملية التطبيق التي يتم اختبارها.

المفاهيم الرئيسية

  • يجب الإعلان عن أداة قياس في حزمة تطبيق باستخدام علامة <instrumentation> مدمجة ضمن علامة <manifest> في بيان حزمة التطبيق.
  • قد يحتوي بيان حزمة التطبيق من الناحية الفنية على عدّة علامات <instrumentation>، على الرغم من أنّه لا يتم استخدامه بشكل شائع بهذه الطريقة.
  • يجب أن يحتوي كل <instrumentation> على ما يلي:
    • سمة android:name: يجب أن تكون اسمًا لفئة فرعية من Instrumentation المضمّنة في تطبيق الاختبار، والذي يكون عادةً أداة تشغيل الاختبار المستخدَمة، على سبيل المثال: android.support.test.runner.AndroidJUnitRunner
    • يجب تحديد سمة android:targetPackage. يجب ضبط قيمته على حزمة التطبيق التي يتم اختبارها.

ملخّص الخطوات

  1. في ما يلي الوجهات الشائعة للاختبارات الصارمة ضد خدمات إطار العمل:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    إذا كنت بصدد إضافة وحدة أدوات جديدة تمامًا لمكوّنك، اطّلِع على

  2. اتّباع الاصطلاح الحالي في حال إضافة اختبارات إلى أحد المواقع المذكورة أعلاه إذا كنت بصدد إعداد وحدة اختبار جديدة، يُرجى اتّباع خطوات AndroidManifest.xml وAndroid.mk في أحد المواقع الجغرافية المذكورة أعلاه.

  3. يمكنك الاطّلاع على frameworks/base/core/tests/coretests/ للاطّلاع على مثال. يُرجى العلم أنّ هذه الأسطر تُثبِّت تطبيقات إضافية:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. لا تنسَ وضع علامة على الاختبار على أنّه @SmallTest أو @MediumTest أو @LargeTest.

  5. أنشئ وحدة الاختبار باستخدام m، على سبيل المثال:

    m FrameworksCoreTests
    
  6. إجراء الاختبارات:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. في حال عدم استخدام Tradefed، يمكنك تثبيت الاختبارات وتشغيلها يدويًا:

    1. ثبِّت حزمة APK التي تم إنشاؤها:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. يمكنك إجراء الاختبارات باستخدام خيارات مختلفة:

      1. جميع الاختبارات في حزمة APK

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. جميع الاختبارات ضمن حزمة Java معيّنة

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. جميع الاختبارات ضمن فئة معيّنة

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. طريقة اختبار معيّنة

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

يمكن أن يُجري اختبارك تأكيدًا صريحًا على النجاح أو التوقّف باستخدام واجهات برمجة التطبيقات JUnit. بالإضافة إلى ذلك، سيؤدي أي استثناءات لم يتمّ رصدها إلى حدوث تعذُّر وظيفي أيضًا.

لعرض مقاييس الأداء، يمكن لرمز الاختبار استدعاء Instrumentation#sendStatus لإرسال قائمة بأزواج المفتاح/القيمة. من المهم ملاحظة ما يلي:

  1. يمكن أن تكون المقاييس عددًا صحيحًا أو عددًا عشريًا.
  2. سيتم تجاهل أي قيم غير رقمية.
  3. يمكن أن يكون حِزمة APK الاختبارية إما اختبارات وظيفية أو اختبارات مقاييس، ولكن لا يمكن حاليًا دمج كليهما.