AndroidJUnitRunner

کلاس AndroidJUnitRunner یک برنامه آزمایشی JUnit است که به شما امکان می‌دهد تست‌های JUnit 4 را بر روی دستگاه‌های Android، از جمله مواردی که از چارچوب‌های تست Espresso ، UI Automator و Compose استفاده می‌کنند، اجرا کنید.

دونده آزمایش بارگیری بسته آزمایشی شما و برنامه تحت آزمایش را در دستگاهی انجام می دهد، آزمایش های شما را اجرا می کند و نتایج آزمایش را گزارش می دهد.

این دونده آزمایشی از چندین کار آزمایشی رایج پشتیبانی می کند، از جمله موارد زیر:

تست های JUnit را بنویسید

قطعه کد زیر نشان می‌دهد که چگونه می‌توانید یک تست JUnit 4 را بنویسید تا تأیید کنید که عملیات changeText در کلاس ChangeTextBehavior به درستی کار می‌کند:

کاتلین

@RunWith(AndroidJUnit4::class)
@LargeTest // Optional runner annotation
class ChangeTextBehaviorTest {
 val stringToBeTyped = "Espresso"
 // ActivityTestRule accesses context through the runner
 @get:Rule
 val activityRule = ActivityTestRule(MainActivity::class.java)

 @Test fun changeText_sameActivity() {
 // Type text and then press the button.
 onView(withId(R.id.editTextUserInput))
 .perform(typeText(stringToBeTyped), closeSoftKeyboard())
 onView(withId(R.id.changeTextBt)).perform(click())

 // Check that the text was changed.
 onView(withId(R.id.textToBeChanged))
 .check(matches(withText(stringToBeTyped)))
 }
}

جاوا

@RunWith(AndroidJUnit4.class)
@LargeTest // Optional runner annotation
public class ChangeTextBehaviorTest {

    private static final String stringToBeTyped = "Espresso";

    @Rule
    public ActivityTestRule<MainActivity>; activityRule =
            new ActivityTestRule<>;(MainActivity.class);

    @Test
    public void changeText_sameActivity() {
        // Type text and then press the button.
        onView(withId(R.id.editTextUserInput))
                .perform(typeText(stringToBeTyped), closeSoftKeyboard());
        onView(withId(R.id.changeTextBt)).perform(click());

        // Check that the text was changed.
        onView(withId(R.id.textToBeChanged))
                .check(matches(withText(stringToBeTyped)));
    }
}

به متن برنامه دسترسی پیدا کنید

هنگامی که از AndroidJUnitRunner برای اجرای تست‌های خود استفاده می‌کنید، می‌توانید با فراخوانی متد استاتیک ApplicationProvider.getApplicationContext() به زمینه برنامه تحت آزمایش دسترسی پیدا کنید. اگر یک زیر کلاس سفارشی از Application در برنامه خود ایجاد کرده اید، این روش زمینه زیر کلاس سفارشی شما را برمی گرداند.

اگر پیاده‌کننده ابزار هستید، می‌توانید با استفاده از کلاس InstrumentationRegistry به API‌های تست سطح پایین دسترسی داشته باشید. این کلاس شامل شیء Instrumentation ، شیء Context برنامه هدف، شیء Context برنامه آزمایشی، و آرگومان های خط فرمان است که به تست شما ارسال می شود.

تست های فیلتر

در تست های JUnit 4.x خود، می توانید از حاشیه نویسی برای پیکربندی اجرای آزمایشی استفاده کنید. این ویژگی نیاز به افزودن دیگ بخار و کد شرطی را در تست های شما به حداقل می رساند. علاوه بر حاشیه نویسی های استاندارد پشتیبانی شده توسط JUnit 4، برنامه آزمایشی از حاشیه نویسی های خاص اندروید نیز پشتیبانی می کند، از جمله موارد زیر:

  • @RequiresDevice : مشخص می کند که آزمایش فقط بر روی دستگاه های فیزیکی اجرا شود، نه بر روی شبیه سازها.
  • @SdkSuppress : اجرای آزمایش را در سطح API Android پایین‌تر از سطح داده شده متوقف می‌کند. برای مثال، برای جلوگیری از اجرای آزمایش‌ها در تمام سطوح API کمتر از 23، از حاشیه‌نویسی @SDKSuppress(minSdkVersion=23) استفاده کنید.
  • @SmallTest ، @MediumTest ، و @LargeTest : طبقه‌بندی کنید که یک تست چقدر طول می‌کشد تا اجرا شود، و در نتیجه، چقدر می‌توانید آزمایش را اجرا کنید. با تنظیم ویژگی android.testInstrumentationRunnerArguments.size ، می‌توانید از این حاشیه‌نویسی برای فیلتر کردن آزمایش‌هایی که باید اجرا شوند استفاده کنید:
-Pandroid.testInstrumentationRunnerArguments.size=small

تست های شارد

اگر می‌خواهید اجرای آزمایش‌های خود را موازی کنید، آنها را در چندین سرور به اشتراک بگذارید تا سریع‌تر اجرا شوند، می‌توانید آنها را به گروه‌ها یا خرده‌هایی تقسیم کنید. اجرای آزمایشی از تقسیم یک مجموعه آزمایشی به چند قطعه پشتیبانی می‌کند، بنابراین می‌توانید به راحتی آزمایش‌های متعلق به همان قطعه را با هم به عنوان یک گروه اجرا کنید. هر خرده با یک عدد شاخص مشخص می شود. هنگام اجرای تست‌ها، از گزینه -e numShards برای تعیین تعداد خرده‌های جداگانه برای ایجاد و از گزینه -e shardIndex برای تعیین اینکه کدام قطعه باید اجرا شود استفاده کنید.

به عنوان مثال، برای تقسیم مجموعه آزمایشی به 10 قطعه و اجرای تنها تست های گروه بندی شده در قطعه دوم، از دستور adb زیر استفاده کنید:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

از Android Test Orchestrator استفاده کنید

Android Test Orchestrator به شما امکان می دهد هر یک از تست های برنامه خود را در فراخوانی خود از Instrumentation اجرا کنید. هنگام استفاده از AndroidJUnitRunner نسخه 1.0 یا بالاتر، به Android Test Orchestrator دسترسی دارید.

Android Test Orchestrator مزایای زیر را برای محیط تست شما ارائه می دهد:

  • حداقل حالت مشترک: هر آزمایش در نمونه Instrumentation خود اجرا می شود. بنابراین، اگر آزمایش‌های شما حالت برنامه را به اشتراک بگذارند، بیشتر آن حالت اشتراک‌گذاری شده پس از هر آزمایش از CPU یا حافظه دستگاه شما حذف می‌شود. برای حذف تمام حالت های مشترک از CPU و حافظه دستگاه خود پس از هر آزمایش، از پرچم clearPackageData استفاده کنید. برای مثال به بخش Enable from Gradle مراجعه کنید.
  • خرابی ها جدا می شوند: حتی اگر یک تست خراب شود، فقط نمونه خودش از Instrumentation را حذف می کند. این بدان معناست که سایر تست‌های مجموعه شما همچنان اجرا می‌شوند و نتایج کامل آزمون را ارائه می‌دهند.

این جداسازی منجر به افزایش احتمالی زمان اجرای آزمایش می‌شود، زیرا برنامه‌ساز تست Android پس از هر آزمایش، برنامه را مجدداً راه‌اندازی می‌کند.

هم Android Studio و هم Firebase Test Lab دارای Android Test Orchestrator از پیش نصب شده هستند، اگرچه باید این ویژگی را در Android Studio فعال کنید .

از Gradle فعال کنید

برای فعال کردن Android Test Orchestrator با استفاده از ابزار خط فرمان Gradle، این مراحل را کامل کنید:

  • مرحله 1 : فایل gradle را تغییر دهید. عبارات زیر را به فایل build.gradle پروژه خود اضافه کنید:
android {
 defaultConfig {
  ...
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

  // The following argument makes the Android Test Orchestrator run its
  // "pm clear" command after each test invocation. This command ensures
  // that the app's state is completely cleared between tests.
  testInstrumentationRunnerArguments clearPackageData: 'true'
 }

 testOptions {
  execution 'ANDROIDX_TEST_ORCHESTRATOR'
 }
}

dependencies {
 androidTestImplementation 'androidx.test:runner:1.1.0'
 androidTestUtil 'androidx.test:orchestrator:1.1.0'
}
  • مرحله 2 : Android Test Orchestrator را با اجرای دستور زیر اجرا کنید:
./gradlew connectedCheck

از Android Studio فعال کنید

برای فعال کردن Android Test Orchestrator در Android Studio، عبارات نشان داده شده در Enable from Gradle را به فایل build.gradle برنامه خود اضافه کنید.

فعال کردن از خط فرمان

برای استفاده از Android Test Orchestrator در خط فرمان، دستورات زیر را در پنجره ترمینال اجرا کنید:

DEVICE_API_LEVEL=$(adb shell getprop ro.build.version.sdk)

FORCE_QUERYABLE_OPTION=""
if [[ $DEVICE_API_LEVEL -ge 30 ]]; then
   FORCE_QUERYABLE_OPTION="--force-queryable"
fi

# uninstall old versions
adb uninstall androidx.test.services
adb uninstall androidx.test.orchestrator

# Install the test orchestrator.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/orchestrator/1.4.2/orchestrator-1.4.2.apk

# Install test services.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/services/test-services/1.4.2/test-services-1.4.2.apk

# Replace "com.example.test" with the name of the package containing your tests.
# Add "-e clearPackageData true" to clear your app's data in between runs.
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
 androidx.test.services.shellexecutor.ShellMain am instrument -w -e \
 targetInstrumentation com.example.test/androidx.test.runner.AndroidJUnitRunner \
 androidx.test.orchestrator/.AndroidTestOrchestrator'

همانطور که دستور دستور نشان می دهد، Android Test Orchestrator را نصب می کنید، سپس مستقیماً از آن استفاده می کنید.

adb shell pm list instrumentation

استفاده از زنجیره های ابزار مختلف

اگر از زنجیره ابزار دیگری برای آزمایش برنامه خود استفاده می کنید، همچنان می توانید با انجام مراحل زیر از Android Test Orchestrator استفاده کنید:

  1. بسته های لازم را در فایل ساخت اپلیکیشن خود قرار دهید.
  2. Android Test Orchestrator را از خط فرمان فعال کنید.

معماری

APK سرویس Orchestrator در فرآیندی جدا از APK آزمایشی و APK برنامه تحت آزمایش ذخیره می‌شود:

ارکستراتور به شما اجازه می دهد تا تست های JUnit را کنترل کنید
شکل 1 : ساختار APK Orchestration Test Android.

Android Test Orchestrator تست‌های JUnit را در ابتدای اجرای مجموعه آزمایشی شما جمع‌آوری می‌کند، اما سپس هر تست را به‌طور جداگانه، در نمونه خودش از Instrumentation اجرا می‌کند.

اطلاعات بیشتر

برای کسب اطلاعات بیشتر در مورد استفاده از AndroidJUnitRunner، به مرجع API مراجعه کنید.

منابع اضافی

برای اطلاعات بیشتر در مورد استفاده از AndroidJUnitRunner ، به منابع زیر مراجعه کنید.

نمونه ها

  • AndroidJunitRunnerSample : حاشیه نویسی های آزمایشی، تست های پارامتری شده و ایجاد مجموعه آزمایشی را به نمایش می گذارد.