이 문서에서는 명령줄에서 직접 테스트를 실행하는 방법을 설명합니다. 여기서는 개발자가 Android 앱을 만들고 앱 테스트를 작성하는 방법을 알고 있다고 가정합니다. 앱 테스트를 빌드하는 방법에 관한 자세한 내용은 Android에서 앱 테스트를 참고하세요.
Gradle 빌드 시스템을 사용하여 앱을 빌드할 때 Android Gradle 플러그인을 사용하면 명령줄을 사용하여 Gradle 프로젝트에서 테스트를 실행할 수 있습니다. 더 세밀하게 조정하려면 Android 디버그 브리지(adb) 셸을 통해 테스트를 실행할 수 있습니다. 이는 지속적 통합 환경에서 테스트를 실행할 때 유용할 수 있습니다.
명령줄에서 Gradle이 관리하는 가상 기기를 사용하여 자동화된 계측 테스트를 실행하는 방법은 Gradle 관리 기기로 테스트 확장을 참고하세요.
Gradle로 테스트 실행
Android Gradle 플러그인을 사용하면 명령줄을 사용하여 Gradle 프로젝트에서 테스트를 실행할 수 있습니다.
아래 표에는 Gradle로 테스트를 실행하는 방법이 요약되어 있습니다.
단위 테스트 유형 | 실행할 명령어 | 테스트 결과 위치 |
---|---|---|
로컬 단위 테스트 |
test 작업을 실행합니다.
|
HTML 테스트 결과 파일:path_to_your_project/module_name/build/reports/tests/
디렉터리.
XML 테스트 결과 파일: |
계측 단위 테스트 |
connectedAndroidTest 작업을 실행합니다.
|
HTML 테스트 결과 파일:path_to_your_project/module_name/build/reports/androidTests/connected/
디렉터리.
XML 테스트 결과 파일: |
Gradle은 작업 이름 약어를 지원합니다.
예를 들어 다음 명령어를 입력하여 connectedAndroidTest
작업을 시작할 수 있습니다.
./gradlew cAT
또한 Gradle 작업인 check
및 connectedCheck
작업을 실행할 수도 있습니다. 이 작업에서는 로컬 테스트나 계측 테스트를 각각 실행하지만 다른 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
로 테스트를 실행하려면 다음 단계를 따르세요.
- 기본 애플리케이션 및 테스트 패키지를 빌드하거나 다시 빌드합니다.
- 테스트 패키지 및 기본 애플리케이션 Android 패키지 파일(APK 파일)을 현재 Android 기기나 에뮬레이터에 설치합니다.
명령줄에 다음을 입력합니다.
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
를 실행합니다. 중요한 플래그는 다음 표에 설명되어 있습니다.
플래그 | 값 | 설명 |
---|---|---|
-w
|
(없음) |
자체적으로 종료하기 전에 계측이 종료될 때까지 am instrument 를 강제로 대기시킵니다. 이렇게 하면 테스트가 완료될 때까지 셸이 계속 열려 있습니다. 테스트 결과를 보려면 이 플래그가 필요합니다.
|
-r
|
(없음) |
원시 형식으로 결과를 출력합니다. 성능 측정을 수집하려는 경우 이 플래그를 사용하여 그 측정이 테스트 결과로 형식화되지 않도록 합니다. 이 플래그는 플래그 -e perf true (am instrument 옵션에 설명되어 있음) 섹션과 함께 사용하도록 설계되었습니다.
|
-e
|
<test_options>
|
테스트 옵션을 키-값 쌍으로 제공합니다. am instrument 도구는 onCreate() 메서드를 통해 이를 지정된 계측 클래스로 전달합니다. -e <test_options> 의 여러 일치하는 항목을 지정할 수 있습니다. 키와 값은 am instrument 옵션 섹션에 설명되어 있습니다. 이러한 키-값 쌍은 AndroidJUnitRunner 또는 InstrumentationTestRunner 및 서브클래스에서만 사용할 수 있습니다. 다른 클래스와 함께 사용하면 효과가 없습니다.
|
--no-hidden-api-checks
|
(없음) | 숨겨진 API의 사용 제한을 사용 중지합니다. 숨겨진 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
다음 표에는 테스트 실행기와 함께 사용할 수 있는 키-값 쌍이 나열되어 있습니다.
키 | 값 | 설명 |
---|---|---|
package
|
<Java_package_name>
|
테스트 애플리케이션의 패키지 중 하나의 정규화된 자바 패키지 이름입니다. 이 패키지 이름을 사용하는 테스트 사례 클래스는 모두 실행됩니다. 이것은 Android 패키지 이름이 아닙니다. 테스트 패키지에는 단일 Android 패키지 이름이 있지만 그 안에 여러 자바 패키지가 있을 수 있습니다. |
class |
<class_name> |
테스트 사례 클래스 중 하나의 정규화된 자바 클래스 이름입니다. 이 테스트 사례 클래스만 실행됩니다. |
<class_name>#method name |
정규화된 테스트 사례 클래스 이름 및 그 메서드 중 하나입니다. 이 메서드만 실행됩니다. 클래스 이름과 메서드 이름 사이의 해시 표시(#)에 주의하세요. | |
func |
true |
InstrumentationTestCase 를 확장하는 모든 테스트 클래스를 실행합니다.
|
unit |
true |
InstrumentationTestCase 또는 PerformanceTestCase 를 확장하지 않는 모든 테스트 클래스를 실행합니다. |
size |
[small | medium | large ] |
크기별로 주석이 달린 테스트 메서드를 실행합니다. 주석은 @SmallTest , @MediumTest , @LargeTest 입니다.
|
perf |
true |
PerformanceTestCase 를 구현하는 모든 테스트 클래스를 실행합니다.
이 옵션을 사용할 경우 am instrument 의 -r 플래그를 지정하여 출력이 원시 형식으로 유지되고 테스트 결과로 다시 형식화되지 않도록 하세요.
|
debug |
true |
디버그 모드에서 테스트를 실행합니다. |
log |
true |
지정된 모든 테스트를 로드하고 기록하지만 실행하지는 않습니다. 테스트 정보가 STDOUT 에 표시됩니다. 다른 필터 및 테스트 사양의 조합을 확인할 때 사용합니다.
|
emma |
true |
EMMA 코드 적용 범위 분석을 실행하고 기기의 /data/<app_package>/coverage.ec 에 출력을 작성합니다. 파일 위치를 재정의하려면 다음 항목에 설명된 coverageFile 키를 사용하세요.
참고: 이 옵션에는 테스트 애플리케이션의 EMMA 계측 빌드가 필요하며 |
coverageFile |
<filename> |
기기에서 EMMA 적용 범위 파일의 기본 위치를 재정의합니다. 이 값을 UNIX 형식의 경로 및 파일 이름으로 지정합니다.
기본 파일 이름은 emma 키 항목에 설명되어 있습니다.
|
-e
플래그를 사용하는 경우 다음 사항에 유의하세요.
am instrument
는 키-값 쌍이 포함된Bundle
로onCreate(Bundle)
을 호출합니다.package
키는class
키보다 우선합니다. 패키지를 지정한 다음 패키지 내에 클래스를 별도로 지정하면 Android가 테스트를 패키지에 모두 실행하고 클래스 키를 무시합니다.func
키와unit
키는 함께 사용할 수 없습니다.
사용 예
다음 섹션에서는 am instrument
를 사용하여 테스트를 실행하는 예를 보여줍니다.
다음 구조를 기반으로 합니다.
- 테스트 패키지의 Android 패키지 이름은
com.android.demo.app.tests
입니다. - 계측 테스트 클래스 두 가지는 다음과 같습니다.
testMethod1
테스트 메서드가 포함된TestClass1
testMethod2
와testMethod3
테스트 메서드가 포함된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
클래스의 모든 테스트를 실행하고 TestClass2
의 testMethod3
메서드를 실행하려면 다음을 입력하세요.
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
AndroidJUnitRunner
API 참조에서 더 많은 사용 사례를 확인할 수 있습니다.