명령줄에서 테스트

이 문서에서는 명령줄에서 직접 테스트를 실행하는 방법을 설명합니다. 여기서는 개발자가 Android 앱을 만들고 앱 테스트를 작성하는 방법을 알고 있다고 가정합니다. 앱 테스트를 빌드하는 방법에 관한 자세한 내용은 Android에서 앱 테스트를 참고하세요.

이 페이지에 설명된 명령줄 도구 및 Gradle 작업은 UI 툴킷과 독립적입니다. Compose용 UI 테스트를 작성하려면 Compose 레이아웃 테스트를 참고하세요. 테스트를 작성한 후 이 가이드에 따라 터미널 또는 원격 지속적 통합 환경에서 테스트를 실행하세요.

Gradle 빌드 시스템을 사용하여 앱을 빌드할 때 Android Gradle 플러그인을 사용하면 명령줄을 사용하여 Gradle 프로젝트에서 테스트를 실행할 수 있습니다. 더 세밀하게 조정하려면 Android 디버그 브리지(adb) 셸을 통해 테스트를 실행할 수 있습니다. 이는 지속적 통합 환경에서 테스트를 실행할 때 유용할 수 있습니다.

명령줄에서 Gradle이 관리하는 가상 기기를 사용하여 자동화된 계측 테스트를 실행하는 방법은 Gradle 관리 기기로 테스트 확장을 참고하세요.

Gradle로 테스트 실행

Android Gradle 플러그인을 사용하면 명령줄을 사용하여 Gradle 프로젝트에서 테스트를 실행할 수 있습니다.

아래 표에는 Gradle로 테스트를 실행하는 방법이 요약되어 있습니다.

표 1. Gradle로 테스트를 실행하는 다양한 방법

단위 테스트 유형 실행할 명령어 테스트 결과 위치
로컬 단위 테스트 test 작업 실행:

./gradlew test
HTML 테스트 결과 파일:
path_to_your_project/module_name/build/reports/tests/ 디렉터리.

XML 테스트 결과 파일:
path_to_your_project/module_name/build/test-results/ 디렉터리.

계측 단위 테스트 connectedAndroidTest 작업 실행:

./gradlew connectedAndroidTest
HTML 테스트 결과 파일:
path_to_your_project/module_name/build/reports/androidTests/connected/ 디렉터리.

XML 테스트 결과 파일:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ 디렉터리.

Gradle은 작업 이름 약어를 지원합니다. 예를 들어 다음 명령어를 입력하여 connectedAndroidTest 작업을 시작할 수 있습니다.

./gradlew cAT

또한 Gradle 작업인 checkconnectedCheck 작업을 실행할 수도 있습니다. 이 작업에서는 로컬 테스트나 계측 테스트를 각각 실행하지만 다른 Gradle 플러그인이 추가한 별도의 check 작업도 포함합니다.

모듈에서 테스트 실행

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 디버그 브리지(adb)를 사용하여 명령줄에서 테스트를 실행하면 다른 어떤 메서드보다 실행할 테스트를 선택하는 옵션이 많습니다. 개별 테스트 메서드를 선택하거나 맞춤 주석에 따라 테스트를 필터링하거나 테스트 옵션을 지정할 수 있습니다. 테스트 실행이 전적으로 명령줄에서 제어되므로 셸 스크립트를 사용하여 다양한 방식으로 테스트를 맞춤설정할 수 있습니다.

명령줄에서 테스트를 실행하려면 adb shell을 실행하여 기기나 에뮬레이터의 명령줄 셸을 시작합니다. 셸 내에서 활동 관리자 와 상호작용하고 am 명령어를 사용하여 instrument 하위 명령어를 사용하여 테스트를 실행할 수 있습니다.

단축키로 adb 셸을 시작하여 am instrument를 호출한 다음 한 입력줄에 모든 명령줄 플래그를 지정할 수 있습니다. 기기나 에뮬레이터에서 셸이 열려 테스트를 실행하고 출력을 생성한 다음 컴퓨터의 명령줄로 돌아옵니다.

am instrument로 테스트를 실행하려면 다음 단계를 따르세요.

  1. 기본 애플리케이션 및 테스트 패키지를 빌드하거나 다시 빌드합니다.
  2. 테스트 패키지 및 기본 애플리케이션 Android 패키지 파일 (APK 파일)을 현재 Android 지원 기기나 에뮬레이터에설치합니다.
  3. 명령줄에 다음을 입력합니다.

    adb shell am instrument -w <test_package_name>/<runner_class>

    여기서 <test_package_name>은 테스트 애플리케이션의 Android 패키지 이름이고 <runner_class>은 사용 중인 Android 테스트 실행기 클래스의 이름입니다. Android 패키지 이름은 테스트 패키지의 매니페스트 파일(AndroidManifest.xml)에 있는 매니페스트 요소의 패키지 속성 값입니다.

    Android 테스트 실행기 클래스는 일반적으로 AndroidJUnitRunner입니다.

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner

테스트 결과는 STDOUT에 표시됩니다.

am instrument 플래그

am instrument 명령어와 함께 사용할 모든 플래그의 목록을 확인하려면 adb shell am help를 실행합니다. 중요한 플래그는 다음 표에 설명되어 있습니다.

표 2. 중요한 am instrument 플래그

플래그 설명
-w (없음) 자체적으로 종료하기 전에 계측이 종료될 때까지 am instrument를 강제로 대기시킵니다. 이렇게 하면 테스트가 완료될 때까지 셸이 계속 열려 있습니다. 테스트 결과를 보려면 이 플래그가 필요합니다.
-r (없음) 원시 형식으로 결과를 출력합니다. 성능 측정을 수집하려는 경우 이 플래그를 사용하여 그 측정이 테스트 결과로 형식화되지 않도록 합니다. 이 플래그는 플래그 -e perf true (am instrument options 섹션에 설명되어 있음)와 함께 사용하도록 설계되었습니다.
-e <test_options> 테스트 옵션을 키-값 쌍으로 제공합니다. am instrument 도구는 onCreate() 메서드를 통해 이를 지정된 계측 클래스로 전달합니다. -e <test_options>의 여러 일치하는 항목을 지정할 수 있습니다. 키와 값은 am instrument options 섹션에 설명되어 있습니다. 이러한 키-값 쌍은 AndroidJUnitRunner에서만 사용할 수 있습니다. 다른 클래스와 함께 사용하면 효과가 없습니다.
--no-hidden-api-checks (없음) 숨겨진 API의 사용 제한을 사용 중지합니다. 숨겨진 API란 무엇이고 앱에는 어떤 영향을 미치는지에 관한 자세한 내용은 비 SDK 인터페이스 제한사항을 읽어보세요. 숨겨진 API란 무엇이고 앱에는 어떤 영향을 미치는지에 관한 자세한 내용은 비 SDK 인터페이스 제한사항을 읽어보세요.

am instrument 옵션

am instrument 도구는 -e 플래그를 다음 문법과 함께 사용하여 키-값 쌍의 형식으로 테스트 옵션을 AndroidJUnitRunner 또는 InstrumentationTestRunner에 전달합니다.

-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

다음 표에는 테스트 실행기와 함께 사용할 수 있는 키-값 쌍이 나열되어 있습니다.

표 3. 테스트 실행기와 함께 사용할 -e 플래그 키-값 쌍

설명
package <Java_package_name> 테스트 애플리케이션의 패키지 중 하나의 정규화된 자바 패키지 이름입니다. 이 패키지 이름을 사용하는 테스트 사례 클래스는 모두 실행됩니다. 이것은 Android 패키지 이름이 아닙니다. 테스트 패키지에는 단일 Android 패키지 이름이 있지만 그 안에 여러 자바 패키지가 있을 수 있습니다.
class <class_name> 테스트 사례 클래스 중 하나의 정규화된 자바 클래스 이름입니다. 이 테스트 사례 클래스만 실행됩니다.
<class_name>#method name 정규화된 테스트 사례 클래스 이름 및 그 메서드 중 하나입니다. 이 메서드만 실행됩니다. 클래스 이름과 메서드 이름 사이의 해시 표시 (#)에 주의하세요.
size [small | medium | large] 크기별로 주석이 달린 테스트 메서드를 실행합니다. 주석은 @SmallTest, @MediumTest, 및 @LargeTest입니다.
debug true 디버그 모드에서 테스트를 실행합니다.
log true 지정된 모든 테스트를 로드하고 기록하지만 실행하지는 않습니다. 테스트 정보가 STDOUT에 표시됩니다. 다른 필터 및 테스트 사양의 조합을 확인할 때 사용합니다.
emma true EMMA 코드 적용 범위 분석을 실행하고 기기의 /data/<app_package>/coverage.ec에 출력을 작성합니다. 파일 위치를 재정의하려면 다음 항목에 설명된 coverageFile 키를 사용하세요.

참고: 이 옵션에는 테스트 애플리케이션의 EMMA 계측 빌드가 필요하며 coverage 타겟으로 이를 생성할 수 있습니다.

coverageFile <filename> 기기에서 EMMA 적용 범위 파일의 기본 위치를 재정의합니다. 이 값을 UNIX 형식의 경로 및 파일 이름으로 지정합니다. 기본 파일 이름은 emma 키 항목에 설명되어 있습니다.

-e 플래그를 사용하는 경우 다음 사항에 유의하세요.

  • am instrument는 키-값 쌍이 포함된 BundleonCreate(Bundle)을 호출합니다.
  • package 키는 class 키보다 우선합니다. 패키지를 지정한 다음 패키지 내에 클래스를 별도로 지정하면 Android가 테스트를 패키지에 모두 실행하고 클래스 키를 무시합니다.
  • func 키와 unit 키는 함께 사용할 수 없습니다.

사용 예

다음 섹션에서는 am instrument를 사용하여 테스트를 실행하는 예를 보여줍니다. 다음 구조를 기반으로 합니다.

  • 테스트 패키지의 Android 패키지 이름은 com.android.demo.app.tests입니다.
  • 계측 테스트 클래스 두 가지는 다음과 같습니다.
    • testMethod1 테스트 메서드가 포함된 TestClass1
    • testMethod2testMethod3 테스트 메서드가 포함된 TestClass2
  • 테스트 실행기는 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 클래스의 모든 테스트를 실행하고 TestClass2testMethod3 메서드를 실행하려면 다음을 입력하세요.

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

API 참조에서 더 많은 사용 사례를 확인할 수 있습니다.AndroidJUnitRunner

통합 테스트 보고서 보기

Android Gradle 플러그인은 단위 테스트와 계측 테스트의 결과를 병합하는 HTML 대시보드를 생성하는 통합 테스트 보고서 작업을 제공합니다.

기본 요건

  • Android Gradle 플러그인 9.2.0-alpha07 이상.

통합 테스트 보고서를 생성하려면 다음 작업 중 하나를 실행하세요.

보고서 범위 명령어 설명 보고서 위치
현재 모듈 ./gradlew :module_name:createTestReport 단위 테스트와 계측 테스트 결과를 병합하여 현재 모듈의 통합 테스트 보고서를 생성합니다. path_to_your_project/module_name/build/reports/tests/test-report/
현재 모듈 및 종속 항목 ./gradlew :module_name:createAggregatedTestReport 현재 앱 모듈 및 라이브러리 종속 항목의 통합 테스트 보고서를 생성합니다. path_to_your_project/module_name/build/reports/tests/aggregated-test-report/