먼저 developer.android.com에서 앱 테스트를 읽어보세요. 플랫폼 테스트에서 계측 테스트가 사용되는 방식에는 몇 가지 차이점이 있습니다.
요약하면 계측 테스트는 am instrument
명령어를 통해 실행되는 특수한 테스트 실행 환경을 제공합니다. 여기에서 타겟 애플리케이션 프로세스가 다시 시작되고 기본 애플리케이션 컨텍스트를 사용하여 초기화되며 계측 스레드는 애플리케이션 프로세스 VM 내에서 시작됩니다. 테스트 코드는 이 계측 스레드에서 실행을 시작하며, 애플리케이션 컨텍스트에 대한 액세스를 제공하는 Instrumentation
인스턴스와 테스트 중인 애플리케이션 프로세스를 조작하는 API가 테스트 코드에 제공됩니다.
주요 개념
- 계측은 애플리케이션 패키지 매니페스트에서
<manifest>
태그 아래에 중첩되어 있는<instrumentation>
태그를 사용하여 애플리케이션 패키지에 선언되어야 합니다. - 애플리케이션 패키지 매니페스트는 기술적으로 여러
<instrumentation>
태그를 포함할 수 있지만, 일반적으로 사용되는 방식은 아닙니다. - 각
<instrumentation>
은 다음을 포함해야 합니다.android:name
속성: 테스트 애플리케이션에 포함된Instrumentation
의 서브클래스 이름이어야 하며 일반적으로 사용되고 있는 테스트 실행자입니다(예:android.support.test.runner.AndroidJUnitRunner
).android:targetPackage
속성을 정의해야 합니다. 이 값은 테스트 중인 애플리케이션 패키지로 설정해야 합니다.
단계 요약
다음은 프레임워크 서비스에 대한 밀폐 테스트의 일반적인 대상입니다.
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
구성요소에 새로운 계측 모듈을 추가하는 경우 다음을 참조하세요.
위의 위치 중 하나에 테스트를 추가하는 경우 기존 규칙을 따릅니다. 새 테스트 모듈을 설정한다면 위의 위치 중 하나에서
AndroidManifest.xml
및Android.mk
의 설정을 따르세요.frameworks/base/core/tests/coretests/의 예를 참고하세요. 추가 앱을 설치하는 방법은 다음과 같습니다.
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
테스트를
@SmallTest
,@MediumTest
또는@LargeTest
로 표시해야 합니다.m으로 테스트 모듈을 빌드합니다. 예를 들면 다음과 같습니다.
m FrameworksCoreTests
테스트를 실행합니다.
가장 간단한 해결책은 다음과 같이 Atest를 사용하는 것입니다.
atest FrameworksCoreTests
또는 더 복잡한 경우 Trade Federation 테스트 하네스를 사용합니다.
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Tradefed를 사용하지 않는 경우 수동으로 테스트를 설치하고 실행합니다.
- 생성된 apk를 설치합니다.
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
다양한 옵션으로 테스트를 실행합니다.
APK의 모든 테스트
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
특정 자바 패키지의 모든 테스트
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
특정 클래스의 모든 테스트
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
특정 테스트 메서드
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
테스트는 JUnit
API를 사용하여 통과 또는 실패에 관한 명시적 어설션을 만들 수 있습니다. 또한, 모든 포착되지 않은 예외도 기능 오작동을 일으킵니다.
성능 측정항목을 전송하려면 테스트 코드는 Instrumentation#sendStatus
를 호출하여 키-값 쌍의 목록을 전송할 수 있습니다. 참고사항:
- 측정항목은 정수 또는 부동 소수점일 수 있습니다.
- 숫자가 아닌 모든 값은 무시됩니다.
- 테스트 APK는 기능 테스트 또는 측정항목 테스트 중 하나일 수 있지만, 둘을 혼합한 테스트는 현재 지원되지 않습니다.