AndroidJUnitRunner

AndroidJUnitRunner 클래스는 JUnit 테스트 실행기로, Android 기기에서 계측된 JUnit 4 테스트를 실행할 수 있도록 합니다. Espresso, UI Automator, Compose를 사용하는 도구 포함 테스트 프레임워크입니다.

테스트 실행기는 테스트 패키지와 테스트 중인 앱을 테스트 실행, 테스트 결과 보고 등 다양한 기능을 제공합니다.

이 테스트 실행기는 다음을 포함하여 몇 가지 일반적인 테스트 작업을 지원합니다.

JUnit 테스트 작성

다음 코드 스니펫은 계측 JUnit 4 작성 방법을 보여줍니다. ChangeTextBehaviorchangeText 작업이 클래스가 제대로 작동합니다.

Kotlin


@RunWith(AndroidJUnit4::class) // Only needed when mixing JUnit 3 and 4 tests
@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) // Only needed when mixing JUnit 3 and 4 tests
@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를 사용하여 테스트를 실행하면 컨텍스트에 액세스할 수 있습니다. static ApplicationProvider.getApplicationContext() 메서드를 사용하여 지도 가장자리에 패딩을 추가할 수 있습니다. 맞춤 템플릿을 만든 경우 Application의 서브클래스에 있는 경우 이 메서드는 맞춤 서브클래스의 컨텍스트를 사용해야 합니다.

도구 구현자는 InstrumentationRegistry 클래스 이 클래스에는 Instrumentation 객체, 타겟 앱 Context 객체, 테스트 app Context 객체 및 테스트에 전달되는 명령줄 인수가 포함됩니다.

테스트 필터링

JUnit 4.x 테스트에서는 주석을 사용하여 테스트 실행을 구성할 수 있습니다. 이 기능을 사용하면 코드에 상용구 코드와 조건 코드를 추가할 필요를 있습니다 JUnit 4가 지원하는 표준 주석 외에도 실행기는 다음과 같은 Android 관련 주석도 지원합니다. 있습니다.

  • @RequiresDevice: 테스트가 실제 환경에서만 실행되도록 지정합니다. 에뮬레이터가 아니라 기기들에서 말이죠.
  • @SdkSuppress: 테스트가 더 낮은 Android API에서 실행되지 않도록 억제합니다. 레벨 더 높은 수익을 올릴 수 있습니다. 예를 들어 모든 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 플래그를 사용합니다. 자세한 내용은 Gradle에서 사용 설정 섹션을 참조하세요.
  • 비정상 종료가 격리됩니다. 하나의 테스트에서 비정상 종료가 발생하더라도 Instrumentation의 자체 인스턴스 즉, 클러스터의 다른 테스트는 테스트 모음이 계속 실행되어 완전한 테스트 결과를 제공합니다.

이러한 격리로 인해 테스트 실행 시간이 각 테스트 후 Android Test Orchestrator에서 애플리케이션을 다시 시작합니다.

Android 스튜디오와 Firebase Test Lab 모두에 Android Test Orchestrator가 있음 이 기능을 사용하려면 Android에서 이 기능을 사용 설정해야 합니다. Studio에 오신 것을 환영합니다.

Gradle에서 사용 설정

Gradle 명령줄 도구를 사용하여 Android Test Orchestrator를 사용 설정하려면 다음을 완료합니다. 다음 단계를 따르세요.

  • 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 스튜디오에서 사용 설정

Android 스튜디오에서 Android Test Orchestrator를 사용 설정하려면 표시된 문을 추가합니다. 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를 사용할 수 있음 Orchestrator를 테스트하려면 다음 단계를 따르세요.

  1. 앱의 빌드 파일에 필요한 패키지를 포함합니다.
  2. 명령줄에서 Android Test Orchestrator를 사용 설정합니다.

아키텍처

Orchestrator 서비스 APK는 테스트 APK 및 테스트 중인 앱의 APK:

<ph type="x-smartling-placeholder">
</ph> 오케스트레이터를 통해 JUnit 테스트를 제어할 수 있음
그림 1: Android 테스트 조정 APK 구조

Android Test Orchestrator는 테스트 시작 시 JUnit 테스트를 수집합니다. 실행되고 있지만 그런 다음 자체 인스턴스에서 개별적으로 각 테스트를 실행합니다. Instrumentation

추가 정보

AndroidJUnitRunner 사용에 관한 자세한 내용은 API 참조를 확인하세요.

추가 리소스

AndroidJUnitRunner 사용에 관한 자세한 내용은 다음을 참고하세요. 리소스를 배포합니다

샘플