SDV 테스트 프레임워크

이 문서에서는 SDV 테스트 프레임워크에 관해 간략하게 설명하고 테스트 설정, 구성, 실행을 안내합니다. 엔드 투 엔드 테스트에는 SDV 테스트 프레임워크를 사용하세요. 이 도구는 Mobly를 기반으로 하며 테스트는 Python으로 작성합니다.

환경 설정

이 문서에서는 워크스테이션이 SDV용으로 이미 설정되어 있다고 가정합니다. 프레임워크 테스트를 실행하려면 virtualenv를 설치하세요.

Python 종속 항목

Android에서 종속 항목을 관리하는 데 권장되는 방법은 빌드 구성을 사용하여 테스트, Python, 종속 항목을 실행 파일로 패키징하는 것입니다. SDV 테스트 저장소에서 이 방법을 따라야 합니다.

SDV 테스트 프레임워크 라이브러리는 기본적으로 다음과 같은 종속 항목을 제공합니다.

  • mobly
  • absl-py 테스트에서 매개변수화를 사용하는 데 필요합니다.
  • pexpect 대화형 명령어 기능에 필요합니다.
  • ptyprocess 대화형 명령어 기능에 필요합니다.

테스트별 종속 항목이 필요한 경우 테스트의 Android.bp 파일에 포함합니다.

python_test_host {
    …
    libs: [
        "<DEPENDENCY1",
        "<DEPENDENCY2",
        …
    ],
    …
}

시스템 테스트 유형

SDV 테스트 프레임워크를 사용하여 시스템 테스트를 만듭니다. 프레임워크는 다음과 같은 유형을 구분합니다. 테스트를 올바르게 분류합니다.

  • 샘플 테스트: SDV 샘플 서비스를 실행하고 결과가 예상 출력과 일치하는지 확인합니다.
  • E2E 테스트: SDV 샘플 서비스를 사용하지 않습니다.
  • 장기 실행 테스트: 실행 기간을 연장하도록 설계되었습니다.
  • 성능 테스트: perfetto 라이브러리를 사용합니다.
  • 하드웨어 테스트: Cuttlefish (CF)가 아닌 실제 기기에서만 실행되도록 설계되었습니다.

테스트 만들기

프레임워크를 사용하여 작성된 모든 테스트는 테스트 저장소에 있어야 합니다. 테스트의 정확한 위치는 유형에 따라 다릅니다.

테스트 구성

atest와 CATBox를 모두 사용하여 실행되도록 모든 테스트를 구성합니다.

atest 구성

프레임워크는 1개, 2개, 3개의 가상 머신(VM) 테스트용 템플릿을 제공합니다. Android.bp 파일에 다음을 추가합니다.

VM 1개

python_test_host {
  ...
  test_config_template: ":sdv_one_device",
}

VM 2개

python_test_host {
  ...
  test_config_template: ":sdv_two_devices",
}

VM 3개

python_test_host {
  ...
  test_config_template: ":sdv_three_devices",
}

대부분의 테스트에는 기본 템플릿으로 충분합니다. 피치 못할 사정이 있는 경우를 제외하고는 맞춤 구성을 만들지 마세요.

기본 제한 시간 업데이트

기본 제한 시간은 테스트를 로컬에서 실행하기에 충분해야 합니다.

제한 시간으로 인해 테스트가 로컬에서 실패하는 경우 여러 테스트로 분할하는 것이 좋습니다. 테스트 사례가 많은 매우 긴 테스트는 실행 시 병목 현상을 일으킬 수 있습니다.

기본값보다 높은 제한 시간을 설정해야 하는 경우 계속 읽어보세요.

기본 제한 시간 재정의

프레임워크는 atest 실행을 위한 템플릿 확장을 지원하지 않습니다. 따라서 제한 시간이 연장된 제공된 템플릿을 사용하세요.

VM 1개 장기 테스트

python_test_host {
  ...
  test_config_template: ":sdv_one_device_long_test",
}

VM 2개 장기 테스트

python_test_host {
  ...
  test_config_template: ":sdv_two_devices_long_test",
}

이 템플릿을 사용하는 목적을 명확하게 나타내고 연장된 시간이 필요한 이유를 설명하는 주석을 추가합니다 (예: 테스트에서 특정 시간이 걸리는 아티팩트를 다운로드해야 하는 경우).

기기에 파일 푸시

다음 단계에서는 atest 구성을 위해 기기에 파일을 푸시하는 방법을 설명합니다.

기기에 파일 푸시

프레임워크는 atest 실행을 위한 템플릿 확장을 지원하지 않습니다. 따라서 기본 템플릿을 완전히 대체하고 기기의 해당 target_preparer 옵션을 포함하는 AndroidTest.xml 파일을 만들어야 합니다.

  1. 템플릿의 콘텐츠를 복사합니다.

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. {MODULE}을 테스트의 모듈 이름으로 업데이트합니다.

  3. 각 기기에 com.android.tradefed.targetprep.PushFilePreparer를 추가합니다.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

CATBox 구성

테스트를 모음으로 실행하려면 CATBox 구성이 필요합니다.

  1. libraries/sdv/sdv_catbox/res/config/에서 새 구성 파일을 만들고 다음 이름 지정 규칙을 따릅니다.

    • 샘플 테스트: sdv-sample-<NAME>-test.xml
    • E2E 테스트: sdv-e2e-<NAME>-test.xml
    • 장기 실행 테스트: sdv-long-running-<NAME>-test.xml
    • 성능 테스트: sdv-performance-<NAME>-test.xml
    • 하드웨어 테스트: sdv-hw-<NAME>-test.xml
  2. 테스트 유형에 따라 해당 정보를 추가합니다.

VM 1개 테스트 구성

<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/one-device" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

VM 2개 테스트 구성

<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/two-devices" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

VM 3개 테스트 구성

<!-- Copyright 2025 Google LLC -->
<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/three-devices" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

대부분의 테스트에는 기본 템플릿으로 충분합니다. 피치 못할 사정이 있는 경우를 제외하고는 맞춤 구성을 만들지 마세요.

기본 제한 시간 업데이트

기본 제한 시간이 테스트에 충분하지 않은 경우 재정의할 수 있습니다.

기본 제한 시간 재정의

기본 제한 시간을 재정의하려면 구성 파일 끝에 다음을 추가합니다. 장기 테스트의 최대 제한 시간은 10분이어야 합니다.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

기기에 파일 푸시

다음 섹션에서는 CATBox를 구성할 때 기기에 파일을 푸시하는 방법을 설명합니다.

기기에 파일 푸시

해당 기기에 파일을 푸시하려면 plan 옵션 뒤에 다음 구성을 추가합니다.

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

각 기기에 파일이 필요한 경우 각 기기의 구성을 추가합니다(예: name=device1, name=device2).

테스트 실행

이 안내에서는 작동하는 SDV 환경을 설정했다고 가정합니다.

환경 설정

프레임워크는 Cloud Virtual Device (CVD) 인스턴스를 시작하지 않으므로 테스트를 실행하기 전에 시작해야 합니다.

  1. 환경을 설정하고 SDV 대상을 실행합니다.

    . build/envsetup.sh
    lunch <TARGET>
    
  2. 첫 번째 Cloud Virtual Device (CVD) 인스턴스를 시작합니다.

    cvd create --config=sdv_core_instance1
    
  3. 두 번째 Cloud Virtual Device (CVD) 인스턴스를 시작합니다 (멀티 VM 테스트의 경우).

    cvd create --config=sdv_core_instance2
    
  4. 세 번째 Cloud Virtual Device (CVD) 인스턴스를 시작합니다 (멀티 VM 테스트의 경우).

    cvd create --config=sdv_core_instance3
    

atest 실행

atest <TestModuleName>

CATBox 실행

이 명령어는 저장소의 루트 디렉터리에 있다고 가정합니다.

  1. CATBox 빌드: m catbox
  2. (선택사항) CATBox에서 사용 가능한 모든 SDV 테스트 계획을 봅니다.
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

테스트 실행:

VM 1개 테스트 실행

NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520

VM 2개 테스트 실행

NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521

VM 3개 테스트 실행

NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522