اجرای آزمایش‌ها (Atest)

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 FrameworksServicesTests
atest CtsVideoTestCases

Module:Class

برای اجرای یک کلاس در یک ماژول، از Module:Class استفاده کنید. واحد همان است که در نام واحد توضیح داده شده است. Class نام کلاس آزمایشی در فایل .java است و می‌تواند نام کلاس کاملاً واجدشرایط یا نام پایه باشد.

نمونه‌ها:

atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests

نام کلاس

برای اجرای یک کلاس بدون ذکر صریح نام واحد، از نام کلاس استفاده کنید.

نمونه‌ها:

atest ScreenDecorWindowTests
atest 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-run
atest -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#testMultipleDecors
atest 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 --iterations
atest 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-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

گزینه‌های انتقال به نوع یا کلاس دونده:

atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

برای اطلاعات بیشتر درباره گزینه‌های فقط آزمایشی، به گذراندن گزینه‌ها به واحدها مراجعه کنید.