atest로 플랫폼 코드 테스트

플랫폼용 Android 스튜디오 (ASfP)는 atest 및 Soong 테스트 모듈과 통합되므로 IDE에서 Linux 호스트 머신, 연결된 기기 또는 Cuttlefish 가상 기기에서 플랫폼 테스트를 실행하고 디버그할 수 있습니다.

기본 요건

  • AOSP 체크아웃 및 lunch 타겟으로 구성된 ASfP 프로젝트를 엽니다.
  • 기기 테스트의 경우 실제 기기를 연결하거나 일치하는 빌드를 실행하는 Cuttlefish 가상 기기를 실행합니다.

테스트 실행 및 디버그

ASfP의 여러 위치에서 플랫폼 테스트와 디버그 세션을 실행할 수 있습니다.

  • Android.bp 테스트 타겟: Android.bp 파일을 열고 테스트 모듈 (*_test 또는 *_test_host) 옆의 여백에서 실행을 클릭합니다.
    • 실행: 모든 Soong 테스트 모듈 유형 (android_test, java_test_host, cc_test, rust_test, python_test, sh_test, android_robolectric_test)에 사용할 수 있습니다.
    • 디버그: android_test 모듈 (atest --wait-for-debugger를 사용하여 Java 디버거에 연결됨)과 C++ 또는 Rust 테스트 모듈(cc_test, cc_test_host, rust_test, rust_test_host, ASfP의 내장 LLDB 디버거에서 실행됨)에 사용할 수 있습니다.
  • 소스 파일 여백 아이콘: 소스 코드에서 테스트 클래스 또는 @Test 메서드 옆에 있는 실행을 클릭하여 해당 테스트를 실행하거나 디버그합니다.
  • 마우스 오른쪽 버튼 클릭 컨텍스트 메뉴: 테스트 파일, 클래스, 메서드 또는 Android.bp 모듈을 마우스 오른쪽 버튼으로 클릭하고 Run 또는 Debug를 선택합니다.
  • 기본 제공 에이전트 (Android 스튜디오의 AI): 에이전트 도구 창에서 기본 제공 에이전트는 atest 타겟을 실행하여 코드를 수정한 후 변경사항을 확인할 수 있습니다.
  • 통합 터미널: 보기 > 도구 창 > 터미널을 열어 atest 명령어를 직접 실행합니다.

스마트 테스트 구성 및 디버깅

여백 또는 컨텍스트 메뉴에서 테스트를 실행하면 ASfP가 Android.bp 모듈 그래프를 사용하여 Soong 테스트 실행 구성을 만들고 구성합니다.

android_test Java 및 Kotlin 타겟 디버그

Android.bp의 android_test 모듈 옆에 있는 여백 아이콘을 클릭하거나 Java 또는 Kotlin JUnit 클래스 또는 @Test 메서드 옆에 있는 여백 아이콘을 클릭한 다음 '<TestName>' 디버그를 선택합니다. 소스 파일 여백에서 ASfP는 파일이 포함된 srcs이 있는 가장 가까운 android_test 모듈을 선택하고 구성 이름을 <module>, <module>:<SimpleClass> 또는 <module>:<SimpleClass>#<method>로 지정합니다.

ASfP는 --wait-for-debugger로 atest를 실행하고, 모듈의 AndroidManifest.xml에서 타겟 package 속성을 읽고, 연결된 기기에서 해당 프로세스를 기다리고, Java 디버거를 연결합니다.

편집기 여백에서 android_test 메서드 디버깅

LLDB에서 cc_test 및 rust_test 타겟 디버그

C++ 또는 Rust 테스트 모듈 (cc_test, cc_test_host, rust_test 또는 rust_test_host)을 디버그하려면 Android.bp 여백 아이콘을 클릭하고 Debug '<TestName>'을 선택합니다. ASfP는 atest을 통해 실행하는 대신 내장 LLDB 디버거에서 컴파일된 테스트 바이너리를 실행합니다.

Soong 테스트 실행 구성 구성

실행 > 구성 수정을 열고 Soong 테스트 구성을 선택하여 테스트 빌드, 배포, 실행 방식을 맞춤설정합니다.

  • 모듈 자동 완성 및 Android.bp 탐색: 모듈 필드는 프로젝트에서 색인이 생성된 Soong 테스트 모듈에서 자동 완성됩니다. 필드 옆에 있는 Android.bp로 이동을 클릭하여 Android.bp의 모듈 선언으로 이동합니다.
  • 실행 위치: 기기 또는 호스트 (host_supported: true 포함): ASfP는 모듈 규칙과 전이적 defaults 체인(host_supported, device_supported, enabled, target.android.enabled, target.host.enabled)을 평가합니다.
    • 이중 타겟 테스트 (cc_test 및 rust_test, host_supported: true 포함): 기기 및 호스트 라디오 버튼을 모두 사용할 수 있습니다 (기본값은 기기). 기기와 호스트는 각각 독립적인 LLDB 디버거 템플릿을 유지합니다. 기기와 호스트 간에 다음에서 실행을 전환하면 각 타겟에서 이루어진 맞춤설정을 유지하면서 원격 기기 lldb-server 구성과 로컬 호스트 바이너리 구성 간에 전환됩니다.
    • 단일 타겟 테스트: C++ 또는 Rust 테스트가 하나의 환경(예: 기기 전용 cc_test 또는 호스트 전용 cc_test_host 또는 rust_test_host)에 대해서만 빌드되는 경우 ASfP는 지원되는 타겟을 선택하고 지원되지 않는 라디오 버튼을 설명 툴팁과 함께 사용 중지합니다('<module> (<ruleType>) doesn't build for the host or device.').
  • 출시 전 작업 (네이티브 테스트 모듈 빌드 및 atest로 배포): 모든 Soong 테스트 구성에는 기본적으로 두 개의 출시 전 작업이 포함됩니다.
    • 네이티브 테스트 모듈 빌드: LLDB를 시작하기 전에 <module>-target (기기용) 또는 <module>-host (호스트용)를 빌드합니다.
    • atest로 배포: 기기에서 디버깅할 때 atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi>를 실행하므로 Tradefed는 LLDB가 바이너리를 실행하기 전에 테스트 종속 항목을 푸시하고 타겟 준비자를 실행합니다. atest로 배포 칩 위로 포인터를 가져가면 정확한 atest 명령어를 미리 볼 수 있습니다. 종속 항목이 이미 기기에 있는 경우 더 빠른 반복을 위해 atest로 배포를 삭제하여 ASfP가 테스트 바이너리만 직접 푸시하도록 합니다. Run on: Host를 선택하면 ASfP가 Deploy with atest를 자동으로 건너뜁니다.
  • 옵션 및 디버거 수정 (LLDB 옵션 카드): 옵션 수정을 사용하여 선택적 구성 필드를 추가합니다.
    • 프로그램 인수 (운영체제, C++ 및 Rust 테스트만 해당): 디버깅 시 --gtest_filter 또는 libtest 필터 뒤에 cc_test 또는 rust_test 바이너리에 직접 전달되는 추가 인수입니다.
    • atest 인수 (테스트): 테스트를 실행하거나 atest로 배포로 기기를 준비할 때 atest에 전달되는 추가 플래그입니다.
    • 디버거 (C++ 및 Rust 테스트만 해당): 모듈이 cc_test* 또는 rust_test* 타겟인 경우 표시됩니다. LLDB 옵션 카드 (예: Rust 테스트의 경우 진입 시 중지, 세션 간에 기호 캐시, 요청 시 기호 로드, Rust 시각화 도구 사용)을 전환하거나, 기본값으로 재설정을 클릭하여 활성 기기 또는 호스트 템플릿을 재설정하거나, 옵션 수정 > 디버거에서 기호 디렉터리, 초기화, 사전 실행, 사후 실행 또는 종료 명령, 실행 JSON (DAP 설정)을 추가합니다.

시작 전 작업, 기기 또는 호스트 타겟, LLDB 옵션을 보여주는 Soong 테스트 실행 구성

테스트 결과 보기

테스트 실행 진행 상황, 통과 또는 실패 상태, 스택 트레이스, 기기 로그가 ASfP의 실행 또는 디버그 도구 창에 실시간으로 표시됩니다.

테스트 관련 도움말

  • 타겟팅된 테스트 실행: 전체 테스트 모음을 실행하지 않고 편집기 여백에서 개별 메서드를 테스트합니다.
  • Cuttlefish 스냅샷 사용: Cuttlefish 가상 기기에서 기기 테스트를 실행할 때 스냅샷을 사용하여 실행 사이에 정리된 기기 상태를 복원합니다.
  • Soong 빌드 로그 검사: 테스트가 실행되기 전에 컴파일에 실패하면 Soong 도구 창에서 컴파일러 진단을 확인합니다.