الاختبار من سطر الأوامر

يصف هذا المستند كيفية إجراء الاختبارات مباشرةً من سطر الأوامر. هذا النمط أنك تعرف بالفعل كيفية إنشاء تطبيق Android كتابة اختبارات لتطبيقك. لمزيد من المعلومات حول كيفية إنشاء اختبارات يُرجى الاطّلاع على اختبار التطبيقات على Android.

عند إنشاء تطبيقك باستخدام نظام إصدار Gradle، فإن Android Gradle المكوّن الإضافي يسمح لك بإجراء اختبارات من خلال أداة Gradle مشروعك باستخدام سطر الأوامر. للحصول على مزيد من التحكم الدقيق، يمكنك اختيار إجراء اختباراتك من خلال Android Debug Bridge (adb). يمكن أن يكون ذلك مفيدًا عند إجراء الاختبارات في التكامل المستمر.

للتعرف على كيفية تشغيل اختبارات الأدوات الآلية من سطر الأوامر باستخدام الأجهزة الافتراضية التي تديرها Gradle نيابةً عنك، راجِع توسيع نطاق اختباراتك باستخدام Gradle الأجهزة المُدارة:

إجراء الاختبارات باستخدام Gradle

يتيح لك المكوّن الإضافي لنظام Gradle المتوافق مع Android إجراء اختبارات من مشروع Gradle باستخدام سطر الأوامر.

يلخّص الجدول التالي كيفية إجراء اختباراتك باستخدام Gradle:

الجدول 1. الطرق المختلفة لإجراء اختباراتك باستخدام قاعدة مخروطية

نوع اختبار الوحدة الأمر الذي سيتم تنفيذه موقع نتيجة الاختبار
اختبار الوحدة المحلية نفِّذ مهمة test:

./gradlew test
ملفات نتائج اختبار HTML:
path_to_your_project/module_name/build/reports/tests/ الدليل.

ملفات نتائج اختبار XML:
path_to_your_project/module_name/build/test-results/ الدليل.

اختبار وحدة قياس محسوب نفِّذ مهمة connectedAndroidTest:

./gradlew connectedAndroidTest
ملفات نتائج اختبار HTML:
path_to_your_project/module_name/build/reports/androidTests/connected/ الدليل.

ملفات نتائج اختبار XML:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ الدليل.

يدعم Gradle اختصارات اسم المهمة. على سبيل المثال، يمكنك بدء مهمة connectedAndroidTest من خلال إدخال الأمر التالي:

./gradlew cAT

ويمكنك أيضًا اختيار تشغيل مهمتَي Gradle check وconnectedCheck. هذه إجراء اختبارات محلية أو آلية، على التوالي، تضمين عمليات التحقق الأخرى التي تمت إضافتها بواسطة مكونات Gradle الإضافية الأخرى.

إجراء الاختبارات على وحدة معيّنة

تُجري المَهمتان test وconnectedAndroidTest اختبارات على كل وحدة في مشروعك. يمكنك إجراء اختبارات على وحدة معيّنة من خلال بادئة للمهمة test أو connectedAndroidTest باسم الوحدة نقطتين (:). على سبيل المثال، يقوم الأمر التالي بتشغيل اختبارات قياس حالة وحدة mylibrary:

./gradlew mylibrary:connectedAndroidTest

إجراء اختبارات على صيغة الإصدار

تُجري المهام test وconnectedAndroidTest اختبارات على كل مهمة. إنشاء صيغة في مشروعك يمكنك استهداف صيغة إصدار محددة باستخدام البنية التالية:

  • لاختبارات الوحدة المحلية:
    ./gradlew testVariantNameUnitTest
  • بالنسبة إلى اختبارات قياس حالة التطبيق:
    ./gradlew connectedVariantNameAndroidTest

تنفيذ طرق اختبار أو صفوف محدّدة

عند إجراء اختبارات وحدة محلية، تتيح لك Gradle استهداف اختبارات محدّدة باستخدام العلامة --tests. على سبيل المثال، يقوم الأمر التالي بتشغيل يتم إجراء sampleTestMethod اختبارات لصيغة الإصدار المحدّدة. لمزيد من المعلومات حول باستخدام العلامة --tests، فاقرأ وثائق Gradle على فلترة الاختبار:


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

إجراء الاختبارات باستخدام adb

عند إجراء اختبارات من سطر الأوامر باستخدام Android Debug Bridge (adb)، هناك المزيد من الخيارات اختيار الاختبارات التي سيتم إجراؤها أكثر من أي طريقة أخرى. يمكنك تحديد خيار طرق الاختبار أو فلترة الاختبارات وفقًا لتعليق توضيحي مخصّص أو تحديد الاختبار الخيارات. ونظرًا لأن إجراء الاختبار يتم التحكم فيه بالكامل من خلال سطر الأوامر، يمكنك تخصيص الاختبار باستخدام البرامج النصية أوامر بعدة طرق.

لإجراء اختبار من سطر الأوامر، يمكنك تشغيل adb shell لبدء سطر أوامر. على جهازك أو المحاكي. وفي داخل تلك الواجهة، يمكنك التفاعل مع مدير النشاط باستخدام الأمر am واستخدام الأمر الفرعي instrument لتنفيذ اختباراتك.

كاختصار، يمكنك بدء واجهة adb واستدعاء am instrument وتحديد علامات سطر الأوامر كلها في سطر إدخال واحد. يتم فتح واجهة الأوامر على الجهاز أو وتُجري اختباراتك وتُنتج المخرجات، ثم تعود إلى سطر الأوامر على جهاز الكمبيوتر.

لإجراء اختبار باستخدام am instrument:

  1. إنشاء تطبيقك الرئيسي أو إعادة إنشائه حزمة الاختبار.
  2. تثبيت حزمة الاختبار والحزمة الرئيسية ملفات حزمة Android (ملفات APK) للتطبيقات على جهاز Android الحالي أو المحاكي.
  3. في سطر الأوامر، أدخِل:

    adb shell am instrument -w <test_package_name>/<runner_class>
    

    حيث يكون <test_package_name> هو اسم حزمة Android للاختبار تطبيق Android، و<runner_class> هو اسم فئة عدّاء اختبار Android التي تستخدمها. اسم حزمة Android هو قيمة حزمة عنصر البيان سمة الحزمة في ملف بيان حزمة الاختبار (AndroidManifest.xml).

    عادةً ما تكون فئة عدّاء اختبار Android AndroidJUnitRunner:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
    

ستظهر نتائج اختبارك في STDOUT.

علامات الآلات الموسيقية

للعثور على قائمة بجميع العلامات التي يمكن استخدامها مع الأمر am instrument، تشغيل adb shell am help. يتم توضيح بعض العلامات المهمة في الجدول التالي:

الجدول 2. مهمة am instrument العلامة

إبلاغ القيمة الوصف
-w (لا شيء) يجبر am instrument على الانتظار حتى الأدوات قبل الإنهاء. وهذا يحافظ على مفتوحة حتى تنتهي الاختبارات. هذه العلامة مطلوبة اطّلِع على نتائج اختباراتك.
-r (لا شيء) تكون النتائج بتنسيق أولي. استخدِم هذه العلامة إذا أردت جمع قياسات الأداء بحيث لا يتم تنسيقها نتائج الاختبار. تم تصميم هذه العلامة للاستخدام مع العلم -e perf true (موثّق في خيارات الأدوات).
-e <test_options> توفر خيارات اختبار كأزواج المفتاح/القيمة. تشير رسالة الأشكال البيانية تمرر أداة am instrument هذه الأذونات إلى العنصر المحدد لفئة الأداة باستخدام onCreate() . يمكنك تحديد مواضع ورود متعددة -e <test_options> المفاتيح والقيم هي كما هو موضح في خيارات الآلة. يمكنك فقط استخدام أزواج المفتاح/القيمة هذه مع AndroidJUnitRunner أو باستخدام InstrumentationTestRunner وفئاتها الفرعية. ولا يكون لاستخدامهما مع أي فئة أخرى أي تأثير.
--no-hidden-api-checks (لا شيء) لإيقاف القيود المفروضة على استخدام واجهات برمجة التطبيقات المخفية. لمزيد من المعلومات، للحصول على معلومات حول ماهية واجهات برمجة التطبيقات المخفية وكيفية تأثيرها في تطبيق، قراءة القيود المفروضة على الواجهات غير المستندة إلى حزمة تطوير البرامج (SDK):

خيارات الآلات الموسيقية

تضبط أداة "am instrument" خيارات الاختبار على AndroidJUnitRunner أو InstrumentationTestRunner في شكل أزواج مفاتيح/قيم، باستخدام علامة -e، وعلى النحو التالي:

-e <key> <value>

تقبل بعض المفاتيح قيمًا متعددة. يمكنك تحديد قيم متعددة في قائمة مفصولة بفواصل. على سبيل المثال، هذا الاستدعاء يوفّر AndroidJUnitRunner قيمًا متعددة للمفتاح package:

adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunner

يسرد الجدول التالي أزواج المفتاح/القيمة التي يمكنك استخدامها مع برنامج تشغيل الاختبار:

الجدول 3. -e لوضع علامة على أزواج المفتاح/القيمة لاستخدامها مع عدّاء الاختبار

المفتاح القيمة الوصف
package <Java_package_name> اسم حزمة Java المؤهلة بالكامل لأحد الحزم في تطبيق الاختبار. أي فئة حالة اختبار تستخدم هذا اسم الحزمة المنفذة. لاحظ أن هذا ليس اسم حزمة Android تتضمن حزمة الاختبار واحدة اسم حزمة Android ولكن قد يحتوي على عدة حزم Java.
class <class_name> اسم فئة Java المؤهلة بالكامل لإحدى حالات الاختبار الصفوف. ولا يتم تنفيذ سوى فئة حالة الاختبار هذه.
<class_name>#method name تمثّل هذه السمة اسم فئة حالة اختبارية مؤهلة بالكامل وإحدى طرقها. فقط يتم تنفيذ هذه الطريقة. ملاحظة علامة التجزئة (#) بين الفئة الاسم واسم الطريقة.
func true تشغيل جميع صفوف الاختبار التي تشمل InstrumentationTestCase
unit true تشغيل جميع صفوف الاختبار التي لا تضم أيًّا مما يلي InstrumentationTestCase أو PerformanceTestCase
size [small | medium | large] لتشغيل طريقة اختبار حاصلة على تعليقات توضيحية حسب الحجم التعليقات التوضيحية هي @SmallTest و@MediumTest و @LargeTest
perf true تشغيل جميع صفوف الاختبار التي تنفّذ PerformanceTestCase عند استخدام هذا الخيار، حدِّد العلامة -r am instrument بحيث يتم الاحتفاظ بالمخرجات بتنسيق أولي ولم تتم إعادة تنسيقها كنتائج اختبار.
debug true يتم إجراء الاختبارات في وضع تصحيح الأخطاء.
log true يحمّل جميع الاختبارات المحدّدة ويسجّلها ولكن لا يُجريها. الاختبار تظهر المعلومات في STDOUT. استخدِم هذا العنوان لإثبات الملكية مجموعات من عوامل التصفية الأخرى ومواصفات الاختبار.
emma true تجري تحليل تغطية رمز EMMA ويكتب الإخراج إلى /data/<app_package>/coverage.ec على الجهاز. إلى لإلغاء مكان الملف، استخدِم المفتاح coverageFile. كما هو موضح في الإدخال التالي.

ملاحظة: يتطلب هذا الخيار توفّر وسيلة لإدارة الخدمات الجوّالة للمؤسسات (EMMA). إصدار التطبيق الاختباري، والذي يمكنك إنشاؤه باستخدام هدف واحد (coverage).

coverageFile <filename> لإلغاء الموقع التلقائي لملف تغطية EMMA على الخاص بك. يمكنك تحديد هذه القيمة كمسار واسم ملف بتنسيق UNIX. يتم وصف اسم الملف الافتراضي في إدخال ملف المفتاح emma.

عند استخدام علامة -e، يجب الانتباه لما يلي:

  • استدعاء am instrument onCreate(Bundle) مع Bundle تحتوي على قيمة المفتاح أزواج.
  • يكون للمفتاح package الأولوية على المفتاح class. إذا حددت ثم تحديد فئة ضمن تلك الحزمة بشكل منفصل، فإن Android ويجري جميع الاختبارات في الحزمة ويتجاهل مفتاح الفئة.
  • لا يمكن استخدام المفتاح func أو المفتاح unit إلا بشكل تبادلي.

أمثلة على استخدام هذه الكلمة في جملة

تقدِّم الأقسام التالية أمثلة على استخدام am instrument لإجراء الاختبارات. وتستند إلى البنية التالية:

  • تحمل حزمة الاختبار اسم حزمة Android com.android.demo.app.tests.
  • فئتان لاختبار الأدوات:
    • TestClass1، الذي يحتوي على طريقة الاختبار testMethod1
    • TestClass2، الذي يحتوي على طريقتَي الاختبار testMethod2 وtestMethod3
  • عداء الاختبار هو AndroidJUnitRunner

تشغيل حزمة الاختبار بأكملها

لتشغيل جميع الفصول الدراسية في حزمة الاختبار، أدخل:

adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

إجراء جميع الاختبارات في صف حالة اختبارية

لإجراء كل الاختبارات في الصف TestClass1، أدخِل:

adb shell am instrument -w  \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

اختَر مجموعة فرعية من الاختبارات

لإجراء كل الاختبارات في الفئة TestClass1 والطريقة testMethod3 في TestClass2، Enter:

adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

يمكنك العثور على المزيد من حالات الاستخدام في AndroidJUnitRunner مرجع واجهة برمجة التطبيقات.