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

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

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