Atest ابزار خط فرمان است که به کاربران امکان میدهد آزمایشهای Android را بهصورت محلی بسازند، نصب کنند، و اجرا کنند، و بدین ترتیب اجرای مجدد آزمایشها را بدون نیاز به آشنایی با گزینههای خط فرمان Trade Federation test harness بهطور چشمگیری تسریع میکند. این صفحه نحوه استفاده از Atest برای اجرای آزمایشهای Android را توضیح میدهد.
برای کسب اطلاعات کلی درباره نوشتن آزمون برای Android، به آزمایش پلاتفرم Android مراجعه کنید.
برای اطلاعات درباره ساختار کلی Atest، به راهنمای توسعهدهنده Atest مراجعه کنید.
برای کسب اطلاعات درباره اجرای آزمایشها در فایلهای TEST_MAPPING ازطریق Atest، به اجرای آزمایشها در فایلهای TEST_MAPPING مراجعه کنید.
برای افزودن ویژگی به Atest، گردش کار توسعهدهنده Atest را دنبال کنید.
راهاندازی محیط
برای راهاندازی محیط Atest، دستورالعملهای راهاندازی محیط، انتخاب هدف، و ساختن کد را دنبال کنید.
استفاده پایه
فرمانهای Atest بهصورت زیر است:
atest test-to-run [optional-arguments]
متغیرهای مستقل اختیاری
جدول زیر رایجترین آرگومانهای مورد استفاده را فهرست میکند. فهرست کامل ازطریق atest --help دردسترس است.
| گزینه | گزینه طولانی | شرح |
|---|---|---|
-b |
--build |
هدفهای آزمایشی را میسازد. (پیشفرض) |
-i |
--install |
عناصر آزمایشی (فایلهای APK) را در دستگاه نصب میکند. (پیشفرض) |
-t |
--test |
آزمایشها را اجرا میکند. (پیشفرض) |
-s |
--serial |
آزمایشها را در دستگاه مشخصشده اجرا میکند. هر بار فقط یک دستگاه را میتوان آزمایش کرد. |
-d |
--disable-teardown |
خراب کردن و پاکسازی آزمایش را غیرفعال میکند. |
|
--dry-run |
بدون اینکه واقعاً آزمایشی بسازید، نصب کنید، یا اجرا کنید، Atest را اجرا کنید. |
-m |
--rebuild-module-info |
بازسازی فایل module-info.json را اجباری میکند. |
-w |
--wait-for-debugger |
قبلاز اجرا، منتظر میماند تا اشکالزدا تمام شود. |
-v |
--verbose |
گزارش سطح اشکالزدایی را نمایش میدهد. |
|
--iterations |
آزمایشها را تا رسیدن به حداکثر تکرار اجرا میکند. (پیشفرض ۱۰) |
|
--rerun-until-failure [COUNT=10] |
همه آزمایشها را تا زمانی که خطایی رخ دهد یا به حداکثر تکرار برسد، دوباره اجرا میکند. (۱۰ بهطور پیشفرض) |
|
--retry-any-failure [COUNT=10] |
آزمایشهای ناموفق را تا زمانی که موفق شوند یا به حداکثر تکرار برسند، دوباره اجرا میکند. (پیشفرض ۱۰ است) |
|
--start-avd |
بهطور خودکار AVD ایجاد میکند و آزمایشها را در دستگاه مجازی اجرا میکند. |
|
--acloud-create |
بااستفاده از فرمان acloud، یک AVD ایجاد میکند. |
|
--[CUSTOM_ARGS] |
استدلالهای سفارشی را برای اجراکنندگان آزمایش مشخص میکند. |
-a |
--all-abi |
آزمایشها را برای همه معماریهای دستگاه دردسترس اجرا میکند. |
|
--host |
آزمایش را بهطور کامل در میزبان بدون دستگاه اجرا میکند. توجه: اجرای آزمایش میزبان که به دستگاهی با --host
نیاز دارد با خطا مواجه خواهد شد. |
|
--history |
نتایج آزمایش را بهترتیب زمانی نشان میدهد. |
|
--latest-result |
آخرین نتیجه آزمایش را چاپ میکند. |
برای اطلاعات بیشتر درباره -b، -i، و -t، بخش
مشخص کردن مراحل: ساختن، نصب کردن، یا اجرا کردن را ببینید.
مشخص کردن آزمونها
برای اجرای آزمایشها، یک یا چند آزمایش را بااستفاده از یکی از شناسههای زیر مشخص کنید:
- نام مدول
- واحد:کلاس
- نام کلاس
- آزمایش یکپارچهسازی Tradefed
- مسیر فایل
- نام بسته
ارجاعهای متعدد به آزمایشها را با فاصله از هم جدا کنید، مثل این:
atest test-identifier-1 test-identifier-2
نام مدول
برای اجرای کل واحد آزمون، از نام واحد آن استفاده کنید. نام را همانطور که در متغیرهای
LOCAL_MODULE یا LOCAL_PACKAGE_NAME در فایل
Android.mk یا Android.bp آن آزمایش نشان داده میشود وارد کنید.
نمونهها:
atest FrameworksServicesTestsatest CtsVideoTestCases
Module:Class
برای اجرای یک کلاس در یک ماژول، از Module:Class استفاده کنید. واحد همان است که در نام واحد توضیح داده شده است. Class نام کلاس آزمایشی در فایل .java است و میتواند نام کلاس کاملاً واجدشرایط یا نام پایه باشد.
نمونهها:
atest CtsVideoTestCases:VideoEncoderDecoderTestatest FrameworksServicesTests:ScreenDecorWindowTestsatest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
نام کلاس
برای اجرای یک کلاس بدون ذکر صریح نام واحد، از نام کلاس استفاده کنید.
نمونهها:
atest ScreenDecorWindowTestsatest VideoEncoderDecoderTest
آزمایش یکپارچهسازی Tradefed
برای اجرای آزمایشهایی که مستقیماً در TradeFed ادغام شدهاند (غیرماژولها)، نام را همانگونه که در برونداد فرمان tradefed.sh list configs ظاهر میشود وارد کنید. برای مثال:
برای اجرای
reboot.xml آزمایش:
atest example/reboot
برای اجرای
native-benchmark.xml آزمایش:
atest native-benchmark
مسیر فایل
Atest از اجرای هر دو نوع آزمون واحد و آزمون یکپارچهسازی با وارد کردن مسیر فایل یا دایرکتوری آزمون آنها درصورت لزوم پشتیبانی میکند. همچنین از اجرای یک کلاس واحد با مشخص کردن مسیر فایل Java کلاس پشتیبانی میکند. از هر دو مسیر نسبی و مطلق پشتیبانی میشود.
اجرای واحد
مثالهای زیر دو روش برای اجرای مدول CtsVideoTestCases بااستفاده از مسیر فایل را نشان میدهد.
اجرا از Android repo-root:
atest cts/tests/video
اجرا از Android repo-root/cts/tests/video:
atest .
اجرای کلاس آزمایشی
مثال زیر نحوه اجرای کلاسی خاص را در
CtsVideoTestCases واحد بااستفاده از مسیر فایل نشان میدهد.
از Android repo-root:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
اجرای آزمایش ادغام
مثال زیر نشان میدهد که چگونه بااستفاده از مسیر فایل، آزمون یکپارچهسازی را از Android repo-root اجرا کنید:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
نام بسته
Atest از جستجوی آزمایشها براساس نام بسته پشتیبانی میکند.
نمونهها:
atest com.android.server.wm
atest com.android.uibench.janktests
مراحل را مشخص کنید: ساختن، نصب کردن، یا اجرا کردن
از گزینههای -b، -i، و -t برای مشخص کردن مراحل اجرا استفاده کنید. اگر
گزینهای را مشخص نکنید، همه مراحل اجرا میشوند.
- فقط ساختن هدفها:
atest -b test-to-run - فقط اجرای آزمایشها:
atest -t test-to-run - نصب apk و اجرای آزمایشها:
atest -it test-to-run - ساختن و اجرا کردن، اما نصب نکردن:
atest -bt test-to-run
Atest میتواند آزمایش را مجبور کند از مرحله پاکسازی یا برچیدن رد شود. بسیاری از آزمایشها، مانند
CTS، دستگاه را پساز اجرای آزمایش پاکسازی میکنند، بنابراین تلاش برای اجرای مجدد آزمایش
با -t بدون پارامتر --disable-teardown ناموفق خواهد بود. از -d قبلاز
-t برای رد کردن مرحله پاکسازی آزمایش و آزمایش تکرارشونده استفاده کنید.
atest -d test-to-runatest -t test-to-run
اجرای روشهای خاص
Atest از اجرای روشهای خاص در کلاس آزمایش پشتیبانی میکند. اگرچه کل ماژول باید ساخته شود، این کار زمان موردنیاز برای اجرای آزمایشها را کاهش میدهد. برای اجرای روشهای خاص، کلاس را بااستفاده از هریک از روشهای پشتیبانیشده برای شناسایی کلاس (Module:Class، مسیر فایل، و غیره) شناسایی کنید و نام روش را اضافه کنید:
atest reference-to-class#method1
هنگام مشخص کردن چند روش، آنها را با کاما از هم جدا کنید:
atest reference-to-class#method1,method2,method3
نمونهها:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecorsatest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
دو مثال زیر روشهای ترجیحی برای اجرای یک روش واحد را نشان میدهد،
testFlagChange. این مثالها نسبتبه استفاده صرف از نام کلاس ترجیح داده میشوند
زیرا مشخص کردن واحد یا مکان فایل Java به Atest امکان میدهد
آزمایش را خیلی سریعتر پیدا کند.
استفاده از Module:Class:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
از Android repo-root:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
چندین روش را میتوان از کلاسها و واحدهای مختلف اجرا کرد:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
اجرای چند کلاس
برای اجرای چند کلاس، آنها را با فاصله از هم جدا کنید، درست مانند اجرای چند آزمایش. Atest کلاسها را بهطور کارآمد میسازد و اجرا میکند، بنابراین مشخص کردن زیرمجموعهای از کلاسها در یک ماژول، عملکرد را نسبت به اجرای کل ماژول بهبود میبخشد.
برای اجرای دو کلاس در یک واحد:
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
برای اجرای دو کلاس در دو واحد مختلف:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
اجرای دودوییهای GTest
Atest میتواند باینریهای GTest را اجرا کند. از -a برای اجرای این آزمایشها برای همه معماریهای دستگاه دردسترس استفاده کنید، که در این مثال armeabi-v7a (ARM ۳۲ بیتی) و arm64-v8a (ARM ۶۴ بیتی) است.
آزمایش ورودی نمونه:
atest -a libinput_tests inputflinger_tests
برای انتخاب یک باینری GTest خاص برای اجرا، از دونقطه (:) برای مشخص کردن نام آزمایش و از علامت پوند (#) برای مشخص کردن یک روش فردی استفاده کنید.
برای مثال، برای تعریف آزمون زیر:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
برای مشخص کردن کل آزمایش، دستور زیر را اجرا کنید:
atest inputflinger_tests:InputDispatcherTest
یا بااستفاده از موارد زیر، آزمایش فردی انجام دهید:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
اجرای آزمایشها در TEST_MAPPING
Atest میتواند آزمایشها را در فایلهای TEST_MAPPING اجرا کند.
اجرای ضمنی آزمایشهای پیشارسال
اجرای آزمایشهای پیشاز ارسال در TEST_MAPPING فایل در دایرکتوریهای کنونی و والد:
atest
اجرای آزمایشهای پیشارسال در TEST_MAPPING فایل در /path/to/project و
دایرکتوریهای والد آن:
atest --test-mapping /path/to/project
اجرای گروه آزمایش مشخصشده
گروههای آزمایشی دردسترس عبارتاند از: presubmit(پیشفرض)، postsubmit،
mainline-presubmit، و all.
اجرای آزمایشهای پساز ارسال در فایلهای TEST_MAPPING در دایرکتوریهای کنونی و اصلی:
atest :postsubmit
اجرای آزمایشها از همه گروهها در فایلهای TEST_MAPPING:
atest :all
اجرای آزمایشهای پساز ارسال در فایلهای TEST_MAPPING در /path/to/project و دایرکتوریهای والد آن:
atest --test-mapping /path/to/project:postsubmit
اجرای آزمایشهای اصلی در فایلهای TEST_MAPPING در /path/to/project و دایرکتوریهای والد آن:
atest --test-mapping /path/to/project:mainline-presubmit
اجرای آزمایشها در زیرشاخهها
بهطور پیشفرض، Atest فقط آزمایشها را در فایلهای TEST_MAPPING به بالا (از
دایرکتوری فعلی یا دایرکتوری ارائهشده به دایرکتوریهای والد آن) جستجو میکند. اگر میخواهید
آزمایشها را در فایلهای TEST_MAPPING در زیرشاخهها اجرا کنید، از --include-subdirs
استفاده کنید تا Atest را مجبور کنید آن آزمایشها را نیز اضافه کند:
atest --include-subdirs /path/to/projectاجرای آزمایشها در تکرار
با ارسال آرگومان --iterations، آزمایشها را در تکرار اجرا کنید. چه آزمایش موفق شود چه ناموفق، Atest آزمایش را تا رسیدن به حداکثر تکرار تکرار خواهد کرد.
نمونهها:
بهطور پیشفرض، Atest ۱۰ بار تکرار میشود. تعداد تکرارها باید عدد صحیح مثبت باشد.
atest test-to-run --iterationsatest test-to-run --iterations 5
رویکردهای زیر شناسایی آزمایشهای ناپایدار را آسانتر میکنند:
رویکرد ۱: همه آزمایشها را تا زمانی که خطایی رخ دهد یا به حداکثر تکرار برسد اجرا کنید.
- وقتی خطایی رخ میدهد یا تکرار به دور دهم (بهطور پیشفرض) میرسد متوقف میشود.
atest test-to-run --rerun-until-failure - وقتی خطایی رخ دهد یا تکرار به دور صدم برسد، متوقف میشود.
atest test-to-run --rerun-until-failure 100
رویکرد ۲: فقط آزمایشهای ناموفق را تا زمانی که موفق شوند یا به حداکثر تکرار برسند اجرا کنید.
- فرض کنید
test-to-runچندین مورد آزمایشی دارد و یکی از آزمایشها ناموفق است. فقط آزمایش ناموفق را ۱۰ بار (بهطور پیشفرض) یا تا زمانی که آزمایش موفق شود اجرا کنید.atest test-to-run --retry-any-failure - اجرای آزمایش ناموفق را وقتیکه قبول شد یا به دور صدم رسید متوقف کنید.
atest test-to-run --retry-any-failure 100
اجرای آزمایشها در AVD
Atest میتواند آزمایشها را روی AVD جدیداً ایجادشده اجرا کند. acloud create را اجرا کنید تا
یک AVD ایجاد کنید و مصنوعات را بسازید، سپس از مثالهای زیر برای اجرای آزمایشهای خود استفاده کنید.
یک AVD را راهاندازی کنید و آزمایشها را روی آن اجرا کنید:
acloud create --local-instance --local-image && atest test-to-run
شروع AVD بهعنوان بخشی از اجرای آزمایشی:
atest test-to-run --acloud-create "--local-instance --local-image"
برای اطلاعات بیشتر، acloud create --help را اجرا کنید.
گذراندن گزینهها به واحد
Atest میتواند گزینهها را به ماژولهای آزمایشی منتقل کند. برای افزودن گزینههای خط فرمان TradeFed به اجرای آزمایشی، از ساختار زیر استفاده کنید و مطمئن شوید که آرگومانهای سفارشی شما از قالب گزینه خط فرمان Tradefed پیروی میکنند.
atest test-to-run -- [CUSTOM_ARGS]
گزینههای واحد آزمایشی را به آمادهسازهای هدف یا اجراکنندگان آزمایشی که در فایل پیکربندی آزمایشی تعریف شدهاند ارسال کنید:
atest test-to-run -- --module-arg module-name:option-name:option-valueatest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
گزینههای انتقال به نوع یا کلاس دونده:
atest test-to-run -- --test-arg test-class:option-name:option-valueatest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
برای اطلاعات بیشتر درباره گزینههای فقط آزمایشی، به گذراندن گزینهها به واحدها مراجعه کنید.