Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

테스트

Atest는 사용자가 Android 테스트를 로컬에서 빌드, 설치 및 실행할 수 있는 명령줄 도구로 Trade Federation 테스트 하네스 명령줄 옵션에 대한 지식이 없어도 테스트를 매우 빠르게 재실행할 수 있습니다. 이 페이지에서는 Atest를 사용하여 Android 테스트를 실행하는 방법을 설명합니다.

Android용 테스트 작성에 관한 일반적인 정보는 Android 플랫폼 테스트를 참고하세요.

Atest의 전체 구조에 관한 자세한 내용은 Atest 개발자 가이드를 참고하세요.

Atest를 통해 TEST_MAPPING 파일의 테스트를 실행하는 방법은 TEST_MAPPING 파일의 테스트 실행을 참고하세요.

Atest에 기능을 추가하려면 Atest 개발자 워크플로를 따르세요.

환경 설정

Atest를 실행하려면 아래 섹션에 있는 단계를 따라 환경을 설정하세요.

환경 변수 설정

빌드 스크립트 규칙 패키징에 따라 Soong용 test_suite 또는 Make용 LOCAL_COMPATIBILITY_SUITE을 설정합니다.

envsetup.sh 실행

Android 소스 체크아웃의 루트에서 다음을 실행합니다.

source build/envsetup.sh

lunch 실행

lunch 명령어를 실행하여 지원되는 기기 메뉴를 표시합니다. 기기를 찾아 기기에 맞는 명령어를 실행합니다.

예를 들어 ARM 기기가 연결되어있는 경우 다음 명령어를 실행합니다.

lunch aosp_arm64-eng

이렇게 하면, Atest를 실행하는 데 필요한 다양한 환경 변수가 설정되고 $PATH에 Atest 명령어가 추가됩니다.

기본 사용법

Atest 명령어는 다음과 같은 형식을 취합니다.

atest test-to-run [optional-arguments]

선택적 인수

다음은 가장 흔히 사용되는 인수입니다. 전체 목록은 atest --help를 통해 확인할 수 있습니다.

옵션 긴 옵션 설명
-b --build 테스트 대상을 빌드합니다. (기본)
-i --install 기기에 테스트 아티팩트(APK)를 설치합니다. (기본)
-t --test 테스트를 실행합니다. (기본)
-s --serial 지정된 기기에서 테스트를 실행합니다. 한 번에 하나의 기기만 테스트할 수 있습니다.
-d --disable-teardown 테스트 해체 및 정리를 사용 중지합니다.
--info 지정된 타겟의 관련 정보를 표시하고 종료합니다.
--dry-run 실제로 테스트를 빌드, 설치, 실행하지 않고 atest를 모의 시험합니다.
-m --rebuild-module-info module-info.json 파일을 강제로 다시 빌드합니다.
-w --wait-for-debugger 디버거가 실행되기 전에 대기합니다. 계측 테스트용으로만 사용합니다.
-v --verbose DEBUG 수준 로깅을 표시합니다.
--iterations 최대 반복에 도달할 때까지 테스트를 루프 실행합니다. 기본값은 10입니다.
--rerun-until-failure 실패가 발생하거나 최대 반복에 도달할 때까지 모든 테스트를 재실행합니다. 기본값은 10입니다.
--retry-any-failure 통과하거나 최대 반복에 도달할 때까지 실패한 테스트를 재실행합니다. 기본값은 10입니다.
--start-avd 자동으로 AVD를 만들고 가상 기기에서 테스트를 실행합니다.
--acloud-create acloud command.를 사용하여 AVD를 만듭니다.
--[CUSTOM_ARGS] 테스트 실행자용 맞춤 인수를 지정합니다.
-a --all-abi 사용 가능한 모든 기기 아키텍처를 대상으로 테스트를 실행합니다.
--host 기기 없이 호스트에서 완전히 테스트를 실행합니다.
(참고: --host를 사용하는 기기가 필요한 호스트 테스트를 실행하면 실패함)
--flakes-info 플레이크 정보가 포함된 테스트 결과를 표시합니다.
--history 시간순으로 테스트 결과를 표시합니다.
--latest-result 최신 테스트 결과를 출력합니다.

-b, -i, -t에 관한 자세한 내용은 단계 지정: 빌드, 설치 또는 실행을 참고하세요.

실행할 테스트

test-to-run을 사용하여 하나 이상의 테스트를 실행할 수 있습니다. 여러 테스트를 실행하려면 테스트 참조를 공백으로 구분합니다. 예:

atest test-to-run-1 test-to-run-2

다음은 몇 가지 예입니다.

atest FrameworksServicesTests
atest example/reboot
atest FrameworksServicesTests CtsVideoTestCases
atest FrameworksServicesTests:ScreenDecorWindowTests

테스트를 참조하는 방법에 관한 자세한 내용은 테스트 식별을 참고하세요.

테스트 식별

테스트의 모듈 이름, 모듈:클래스, 클래스 이름, TF 통합 테스트, 파일 경로 또는 패키지 이름으로 test-to-run 인수를 지정할 수 있습니다.

모듈 이름

전체 테스트 모듈을 실행하려면 모듈 이름을 사용합니다. 테스트의 Android.mk 또는 Android.bp 파일에서 LOCAL_MODULE 또는 LOCAL_PACKAGE_NAME 변수에 나타나는 이름을 입력합니다.

예:

atest FrameworksServicesTests
atest CtsVideoTestCases

모듈:클래스

모듈 내에서 단일 클래스를 실행하려면 모듈:클래스를 사용합니다. 모듈모듈 이름에 설명된 것과 동일합니다. 클래스.java 파일의 테스트 클래스 이름이며 정규화된 클래스 이름 또는 기본 이름이 될 수 있습니다.

예:

atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
atest CtsVideoTestCases:VideoEncoderDecoderTest

클래스 이름

명시적으로 모듈 이름을 지정하지 않고 단일 클래스를 실행하려면 클래스 이름을 사용합니다.

예:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

모듈이 명시되지 않은 경우 Atest에서 잠재적으로 일치하는 모듈을 찾기 위해 전체 소스 트리를 검색하는 데 더 많은 시간이 필요하므로 가능한 한 모듈:클래스 참조를 사용하는 것이 좋습니다.

예(가장 빠른 순서에서 가장 느린 순으로 정렬):

atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
atest FrameworksServicesTests:ScreenDecorWindowTests
atest ScreenDecorWindowTests

TF 통합 테스트

TradeFed(비모듈)에 직접 통합된 테스트를 실행하려면 tradefed.sh list configs 명령어의 출력에 표시된 이름을 입력합니다. 예:

reboot.xml 테스트 실행 방법은 다음과 같습니다.

atest example/reboot

native-benchmark.xml 테스트 실행 방법은 다음과 같습니다.

atest native-benchmark

파일 경로

테스트 파일 또는 디렉터리 경로를 적절하게 입력하여 모듈 기반 테스트와 통합 기반 테스트를 모두 실행할 수 있습니다. 클래스의 자바 파일 경로를 지정하여 단일 클래스를 실행할 수도 있습니다. 상대 경로와 절대 경로 모두 지원됩니다.

예: 경로를 통해 CtsVideoTestCases 모듈을 실행하는 두 가지 방법

  1. 다음과 같이 Android repo-root에서 모듈을 실행합니다.

    atest cts/tests/video
    
  2. Android repo-root/cts/tests/video에서 다음을 실행합니다.

    atest .
    

예: 경로를 통해 CtsVideoTestCases 모듈 내에서 특정 클래스를 실행합니다. Android repo-root에서 다음을 실행합니다.

atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

예: 경로를 통해 통합 테스트를 실행합니다. Android repo-root에서 다음을 실행합니다.

atest tools/tradefederation/contrib/res/config/example/reboot.xml

패키지 이름

Atest는 패키지 이름으로 테스트를 검색하는 기능을 지원합니다.

예:

atest com.android.server.wm
atest android.jank.cts

단계 지정: 빌드, 설치 또는 실행

-b, -i, -t 옵션을 사용하여 실행할 단계를 지정할 수 있습니다. 옵션을 지정하지 않으면 모든 단계가 실행됩니다.

  • 타겟만 빌드: atest -b test-to-run
  • 테스트만 실행: atest -t test-to-run
  • APK 설치 및 테스트 실행: atest -it test-to-run
  • 빌드 및 실행만 하고 설치는 하지 않음: atest -bt test-to-run

Atest는 테스트가 정리/해체 단계를 건너뛰도록 할 수 있습니다. CTS를 비롯한 다수의 테스트에서는 테스트 실행 후 기기를 정리하기 때문에 --disable-teardown 매개변수 없이 -t로 테스트를 다시 실행하려면 실패합니다. -t 전에 -d를 사용하여 테스트 정리 단계를 건너뛰고 테스트를 반복합니다.

atest -d test-to-run
atest -t test-to-run

특정 메서드 실행

테스트 클래스 내에서 특정 메서드를 실행할 수 있습니다. 이렇게 하면 전체 모듈을 빌드해야 하지만, 테스트를 실행하는 데 필요한 시간이 줄어듭니다. 특정 메서드를 실행하려면 클래스를 식별하는 데 지원되는 방법(모듈:클래스, 파일 경로 등)을 사용하여 클래스를 식별하고 메서드 이름을 추가합니다.

atest reference-to-class#method1

쉼표로 여러 메서드를 지정할 수 있습니다.

atest reference-to-class#method1,method2,method3

예:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

다음 두 예는 단일 메서드인 testFlagChange를 실행하는 기본 방법을 보여줍니다. 모듈 또는 자바 파일 위치를 지정하면 Atest에서 테스트를 훨씬 빠르게 찾을 수 있으므로 클래스 이름만 사용하는 것보다 다음의 예를 사용하는 것이 더 좋습니다.

  1. 모듈:클래스 사용

    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
    
  2. Android repo-root에서 다음을 실행합니다.

    atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
    

여러 클래스와 모듈에서 여러 메서드를 실행할 수 있습니다.

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

여러 클래스 실행

여러 테스트를 실행하는 것과 같은 방식으로 클래스를 공백으로 구분하여 여러 클래스를 실행할 수 있습니다. Atest는 클래스를 효율적으로 빌드하고 실행하므로 모듈의 클래스 하위 집합을 지정하면 전체 모듈을 실행하는 것보다 성능이 향상됩니다.

예:

  • 같은 모듈에 두 개의 클래스가 있습니다.

    atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
    
  • 서로 다른 모듈에 두 개의 클래스가 있습니다.

    atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
    

네이티브 테스트 실행

Atest는 네이티브 테스트를 실행할 수 있습니다. -a를 사용하여 사용 가능한 모든 기기 아키텍처를 대상으로 테스트를 실행합니다. 이 예에서는 armeabi-v7a(ARM 32비트) 및 arm64-v8a(ARM 64비트)입니다.

예:

  • 입력 테스트:

    atest -a libinput_tests inputflinger_tests
    

실행할 특정 네이티브 테스트를 선택하려면 콜론(:)으로 테스트 이름을, 해시태그(#)로 개별 메서드를 지정합니다. 다음과 같은 테스트 정의를 예로 들어 보겠습니다.

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

다음을 실행하여 전체 테스트를 실행할 수 있습니다.

atest inputflinger_tests:InputDispatcherTest

또는, 다음을 사용하여 개별 테스트 메서드를 실행할 수 있습니다.

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

반복 테스트 실행

반복 테스트를 실행하려면 --iterations 인수를 전달하기만 하면 됩니다. 테스트를 통과하든 실패하든 atest는 최대 반복에 도달할 때까지 테스트를 중지하지 않습니다.

예:

기본적으로 atest는 10회 반복되고 반복 횟수를 변경하는 정수를 제공합니다.

atest test-to-run --iterations
atest test-to-run --iterations 5

사용자가 취약한 테스트를 감지하는 데 도움이 되는 두 가지 방법은 다음과 같습니다.

방법 1: 실패가 발생하거나 최대 반복에 도달할 때까지 모든 테스트를 실행합니다.

  • 실패가 발생하거나 반복이 10회(기본값)에 도달하면 중지합니다.
    atest test-to-run --rerun-until-failure
    
  • 실패가 발생하거나 반복이 100회에 도달하면 중지합니다.
    atest test-to-run --rerun-until-failure 100
    

방법 2: 통과하거나 최대 반복에 도달할 때까지 실패한 테스트만 실행합니다.

  • test-to-run에 테스트 사례가 5개 있고 테스트 중 하나가 실패한다고 가정합니다. 실패한 테스트만 10회 또는 테스트가 통과할 때까지 실행합니다.
    atest test-to-run --retry-any-failure
    
  • 테스트가 통과하거나 100회에 도달하면 실패한 테스트 실행을 중지합니다.
    atest test-to-run --retry-any-failure 100
    

AVD에서 테스트 실행

atest는 새로 만든 AVD로 테스트를 실행할 수 있습니다. atest는 acloud create 실행과 함께 아티팩트를 빌드하고 AVD가 성공적으로 만들어진 후 테스트를 실행할 수 있습니다.

예:

  • 새로 만든 기기에서 테스트를 실행하기 전에 AVD를 시작합니다.

    acloud create && atest test-to-run
    
    이제 다음을 통해 간소화할 수 있습니다.
    atest test-to-run --start-avd
    

  • acloud create 인수를 지정하여 AVD를 시작하고 새로 만든 기기에서 테스트를 실행합니다.

    atest test-to-run --acloud-create "--build-id 6509363 --build-target aosp_cf_x86_phone-userdebug --branch aosp_master"
    

인수에 관한 사용 세부정보를 가져오려면 acloud create --help를 실행합니다.

옵션을 모듈에 전달

atest는 옵션을 모듈에 전달할 수 있습니다. TradeFed 명령줄 옵션을 추가하는 atest 명령줄의 간단한 형식은 다음과 같습니다.

atest test-to-run -- [CUSTOM_ARGS]
[CUSTOM_ARGS]는 Tradefed 명령줄 옵션 형식을 따라야 합니다.

테스트 구성 파일에 정의된 타겟 준비자 또는 테스트 실행기에 테스트 모듈 옵션을 전달하는 예는 다음과 같습니다.

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

실행기 유형 또는 클래스에 옵션을 전달하는 예는 다음과 같습니다.

atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

테스트 전용 옵션에 관한 자세한 내용은 옵션을 모듈에 전달을 참고하세요.