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

يُرجى أولاً قراءة مقالة اختبار تطبيقك على الموقع الإلكتروني 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. يمكنك تشغيل الاختبارات:

    • أبسط حل هو استخدام Atest على النحو التالي:

      atest FrameworksCoreTests
      
    • بالنسبة إلى الاختبارات الأكثر تعقيدًا، يمكنك استخدام أداة اختبار Trade Federation:

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