از خط فرمان تست کنید

این سند نحوه اجرای آزمایش ها را مستقیماً از خط فرمان توضیح می دهد. این سند فرض می‌کند که شما قبلاً می‌دانید چگونه یک برنامه اندروید بسازید و آزمایش‌هایی را برای برنامه خود بنویسید. برای کسب اطلاعات بیشتر در مورد نحوه ساخت آزمایش‌ها برای برنامه خود، به آزمایش برنامه‌ها در Android مراجعه کنید.

وقتی برنامه خود را با استفاده از سیستم ساخت Gradle می‌سازید، افزونه Android Gradle به شما امکان می‌دهد با استفاده از خط فرمان آزمایش‌هایی را از پروژه Gradle خود اجرا کنید. برای کنترل دقیق‌تر، می‌توانید آزمایش‌های خود را از طریق پوسته Android Debug Bridge (adb) اجرا کنید. این می تواند هنگام اجرای تست ها در یک محیط یکپارچه سازی مداوم مفید باشد.

برای یادگیری نحوه اجرای تست‌های خودکار خودکار از خط فرمان با استفاده از دستگاه‌های مجازی که Gradle برای شما مدیریت می‌کند، به مقیاس کردن تست‌های خود با دستگاه‌های مدیریت‌شده Gradle مراجعه کنید.

تست ها را با Gradle اجرا کنید

پلاگین Android Gradle به شما امکان می دهد با استفاده از خط فرمان آزمایش هایی را از پروژه Gradle خود اجرا کنید.

جدول زیر نحوه اجرای تست های خود را با Gradle خلاصه می کند:

جدول 1. روش های مختلف برای اجرای آزمون های خود با Gradle

نوع آزمون واحد دستور اجرا محل نتیجه تست
تست واحد محلی وظیفه test را اجرا کنید:

./gradlew test
فایل های نتیجه تست HTML:
path_to_your_project / module_name /build/reports/tests/ .

فایل های نتیجه تست XML:
path_to_your_project / module_name /build/test-results/ directory.

تست واحد ابزار دقیق وظیفه connectedAndroidTest را اجرا کنید:

./gradlew connectedAndroidTest
فایل های نتیجه تست HTML:
path_to_your_project / module_name /build/reports/androidTests/connected/ directory.

فایل های نتیجه تست XML:
path_to_your_project / module_name /build/outputs/androidTest-results/connected/ directory.

Gradle از اختصارات نام وظیفه پشتیبانی می کند. به عنوان مثال، می توانید با وارد کردن دستور زیر، وظیفه connectedAndroidTest را شروع کنید:

./gradlew cAT

همچنین می توانید انتخاب کنید که check وظایف Gradle و 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. بسته آزمایشی خود و فایل های بسته اندروید برنامه اصلی (فایل های APK) را روی دستگاه یا شبیه ساز Android فعلی خود نصب کنید .
  3. در خط فرمان وارد کنید:

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

    جایی که <test_package_name> نام بسته Android برنامه آزمایشی شما است و <runner_class> نام کلاس اجراکننده آزمایشی Android است که استفاده می‌کنید. نام بسته Android مقدار ویژگی بسته عنصر مانیفست در فایل مانیفست بسته آزمایشی شما ( AndroidManifest.xml ) است.

    کلاس اجرای تست اندروید معمولاً AndroidJUnitRunner است:

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

نتایج آزمایش شما در STDOUT ظاهر می شود.

پرچم های ساز am

برای یافتن لیستی از همه پرچم‌ها برای استفاده با دستور am instrument ، adb shell am help را اجرا کنید. برخی از پرچم های مهم در جدول زیر توضیح داده شده اند:

جدول 2. پرچم های am instrument

پرچم ارزش توضیحات
-w (هیچ کدام) am instrument تا قبل از پایان دادن به خود، صبر کند تا ابزار دقیق خاتمه یابد. این پوسته را تا پایان تست ها باز نگه می دارد. این پرچم برای دیدن نتایج آزمایشات شما لازم است.
-r (هیچ کدام) نتایج را در فرمت خام خروجی می دهد. زمانی که می‌خواهید اندازه‌گیری‌های عملکرد را جمع‌آوری کنید، از این پرچم استفاده کنید تا به‌عنوان نتایج آزمایش قالب‌بندی نشود. این پرچم برای استفاده با بخش flag -e perf true (مستند شده در گزینه‌های ابزار am ) طراحی شده است.
-e <test_options> گزینه های تست را به عنوان جفت کلید-مقدار ارائه می دهد. ابزار am instrument اینها را با استفاده از متد onCreate() به کلاس ابزار دقیق مشخص شده ارسال می کند. شما می توانید چندین رخداد -e <test_options> را مشخص کنید. کلیدها و مقادیر در قسمت گزینه های ابزار am توضیح داده شده است. شما فقط می توانید از این جفت های کلید-مقدار با AndroidJUnitRunner یا با InstrumentationTestRunner و زیر کلاس های آن استفاده کنید. استفاده از آنها با هر کلاس دیگری هیچ تاثیری ندارد.
--no-hidden-api-checks (هیچ کدام) محدودیت های استفاده از API های پنهان را غیرفعال می کند. برای اطلاعات بیشتر در مورد اینکه API های پنهان چیست و چگونه می تواند بر برنامه شما تأثیر بگذارد، محدودیت ها در رابط های غیر SDK را بخوانید.

گزینه های ابزار am

ابزار 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> نام بسته جاوا کاملاً واجد شرایط برای یکی از بسته‌های موجود در برنامه آزمایشی. هر کلاس مورد آزمایشی که از این نام بسته استفاده می کند، اجرا می شود. توجه داشته باشید که این یک نام بسته اندرویدی نیست. یک بسته آزمایشی یک نام بسته اندرویدی دارد اما ممکن است چندین بسته جاوا در آن باشد.
class <class_name> نام کلاس جاوا کاملاً واجد شرایط برای یکی از کلاس‌های مورد آزمایشی. فقط این کلاس تست مورد اجرا می شود.
<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 را در دستگاه لغو می‌کند. این مقدار را به عنوان مسیر و نام فایل در فرمت یونیکس مشخص کنید. نام فایل پیش فرض در ورودی کلید emma توضیح داده شده است.

هنگام استفاده از پرچم -e ، به موارد زیر توجه داشته باشید:

  • am instrument onCreate(Bundle) را با Bundle حاوی جفت‌های کلید-مقدار فراخوانی می‌کند.
  • کلید package بر کلید class اولویت دارد. اگر بسته ای را مشخص کنید و سپس به طور جداگانه یک کلاس را در آن بسته مشخص کنید، اندروید تمام تست های بسته را اجرا می کند و کلید کلاس را نادیده می گیرد.
  • کلید 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 ، وارد کنید:

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 API پیدا کنید.