این سند نحوه اجرای آزمایش ها را مستقیماً از خط فرمان توضیح می دهد. این سند فرض میکند که شما قبلاً میدانید چگونه یک برنامه اندروید بسازید و آزمایشهایی را برای برنامه خود بنویسید. برای کسب اطلاعات بیشتر در مورد نحوه ساخت آزمایشها برای برنامه خود، به آزمایش برنامهها در Android مراجعه کنید.
وقتی برنامه خود را با استفاده از سیستم ساخت Gradle میسازید، افزونه Android Gradle به شما امکان میدهد با استفاده از خط فرمان آزمایشهایی را از پروژه Gradle خود اجرا کنید. برای کنترل دقیقتر، میتوانید آزمایشهای خود را از طریق پوسته Android Debug Bridge (adb) اجرا کنید. این می تواند هنگام اجرای تست ها در یک محیط یکپارچه سازی مداوم مفید باشد.
برای یادگیری نحوه اجرای تستهای خودکار خودکار از خط فرمان با استفاده از دستگاههای مجازی که Gradle برای شما مدیریت میکند، به مقیاس کردن تستهای خود با دستگاههای مدیریتشده Gradle مراجعه کنید.
تست ها را با Gradle اجرا کنید
پلاگین Android Gradle به شما امکان می دهد با استفاده از خط فرمان آزمایش هایی را از پروژه Gradle خود اجرا کنید.
جدول زیر نحوه اجرای تست های خود را با Gradle خلاصه می کند:
نوع آزمون واحد | دستور اجرا | محل نتیجه تست |
---|---|---|
تست واحد محلی | وظیفه test را اجرا کنید:
| فایل های نتیجه تست HTML:path_to_your_project / module_name /build/reports/tests/ . فایل های نتیجه تست XML: |
تست واحد ابزار دقیق | وظیفه connectedAndroidTest را اجرا کنید:
| فایل های نتیجه تست HTML:path_to_your_project / module_name /build/reports/androidTests/connected/ directory. فایل های نتیجه تست XML: |
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
:
- برنامه اصلی و بسته آزمایشی خود را بسازید یا بازسازی کنید.
- بسته آزمایشی خود و فایل های بسته اندروید برنامه اصلی (فایل های APK) را روی دستگاه یا شبیه ساز Android فعلی خود نصب کنید .
در خط فرمان وارد کنید:
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
را اجرا کنید. برخی از پرچم های مهم در جدول زیر توضیح داده شده اند:
پرچم | ارزش | توضیحات |
---|---|---|
-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
جدول زیر جفتهای کلید-مقدار را فهرست میکند که میتوانید با اجرای آزمایشی خود استفاده کنید:
کلید | ارزش | توضیحات |
---|---|---|
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 نیاز دارد که می توانید با هدف |
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 پیدا کنید.