AndroidTest.xml 구조

모듈 구성의 전반적인 구조는 일반적인 Tradefed XML 구성과 유사한 패턴을 따르지만 도구 모음의 일부로 실행되는 만큼 몇 가지 제한사항이 있습니다.

허용되는 태그 목록

AndroidTest.xml 또는 좀 더 광범위한 모듈 구성에는 XML 태그(target_preparer, multi_target_preparer, test, metrics_collector)만 포함될 수 있습니다.

목록은 비록 제한적으로 보이지만 테스트 모듈 설정에 관한 요구사항과 실행하려는 테스트를 정확히 정의할 수 있게 해줍니다.

참고: 여러 태그에 대한 복습이 필요한 경우 Tradefed XML 구성을 참조하세요.

build_provider 또는 result_reporter 같은 객체는 모듈 구성 내에서 실행을 시도할 경우 ConfigurationException이 발생합니다. 이는 이러한 객체가 모듈 내에서 일부 작업을 실제로 실행할 수도 있다는 예상을 피하기 위함입니다.

모듈 구성 예시

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsGestureTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.gesture.cts" />
        <option name="runtime-hint" value="10m50s" />
    </test>
</configuration>

이 구성은 CtsGestureTestCases.apk를 설치하도록 요구하고 android.gesture.cts 패키지에 대한 계측을 실행하는 테스트에 관해 설명합니다.

포함된 태그 <include><template-include>

모듈 구성에서는 <include><template-include>을 사용하지 않는 것이 좋습니다. 예상대로 동작하지 않을 수 있기 때문입니다.

metrics_collector 태그의 특수한 경우

metrics_collector는 허용되지만 FilePullerLogCollector 클래스로 제한되므로 모듈에서 가져올 특정 디렉터리 또는 디렉터리를 지정할 수 있습니다. 이 기능은 로그를 특정 위치에 두고 자동으로 로그를 복구하려는 경우에 유용합니다.

구성의 예

<configuration description="Config for CTS UI Rendering test cases">
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsUiRenderingTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.uirendering.cts" />
        <option name="runtime-hint" value="11m55s" />
        <option name="runner" value="android.uirendering.cts.runner.UiRenderingRunner" />
        <option name="isolated-storage" value="false" />
    </test>

    <!-- Collect the files in the dump directory for debugging -->
    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
        <option name="directory-keys" value="/sdcard/UiRenderingCaptures" />
        <option name="collect-on-run-ended-only" value="true" />
    </metrics_collector>
</configuration>

빌드 정보나 다운로드는 어떨까요?

허용된 태그를 정의하면 모듈이 어떠한 빌드 정보도 가져오지 않는다는 잘못된 인상을 남길 수 있지만 이는 사실이 아닙니다.

빌드 정보는 도구 모음 수준 설정에서 제공되며 이 도구 모음의 모든 모듈에 의해 공유됩니다. 그러면 순서에 있는 도구 모음의 단일 최상위 수준 설정이 도구 모음의 모든 모듈 부분을 실행할 수 있습니다.

예를 들어 기기 정보 및 유형 등을 개별적으로 쿼리하는 각 호환성 테스트 모음(CTS) 모듈 대신 CTS 모음 수준 설정(cts.xml)은 이를 1회만 실행하며, 각 모듈은 요청 시에만 이러한 정보를 수신합니다.

모듈의 객체를 빌드 정보를 수신하려면 일반 Tradefed 구성과 동일한 작업을 수행해야 합니다. IBuildReceiver를 구현하여 IBuildInfo를 수신합니다. 자세한 내용은 기기로 테스트를 참조하세요.

메타데이터 입력란

다수의 테스트 모듈에는 몇 가지 metadata 사양이 포함되며 각 사양에는 고유한 목표가 있습니다.

예:

  <option name="config-descriptor:metadata" key="component" value="framework" />
  <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
  <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
  <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />

구성요소

component 메타데이터는 모듈이 테스트할 일반적인 Android 구성요소를 설명합니다. 테스트 실행에는 직접적인 영향을 미치지 않습니다. 주로 조직 용도로 사용됩니다.

CTS에 허용되는 구성요소의 최신 목록은 CtsConfigLoadingTest에서 확인할 수 있습니다. 존재하지 않는 구성요소가 CTS 모듈에 추가된 경우 이 테스트가 사전 제출에 실패합니다.

module-metadata-include-filtermodule-metadata-exclude-filter를 사용하여 구성요소를 기반으로 도구 모음 실행을 필터링할 수 있습니다.

예:

  --module-metadata-include-filter component framework

이 예에서는 framework 구성요소로 주석 처리된 테스트 모듈만 실행합니다.

매개변수

parameter 메타데이터는 정보용이며 테스트 실행에 영향을 미칩니다. 테스트 모듈이 적용되는 Android 모드를 지정합니다. 이 경우 모드instant apps, secondary users 또는 different abis와 같은 상위 수준의 Android 모드로 제한됩니다.

도구 모음이 실행되는 동안 모드가 테스트에 적용되면 테스트 모듈을 기반으로 여러 버전의 변형이 생성됩니다. 각 변형은 비슷한 테스트를 실행하지만 서로 다른 모드에서 실행됩니다.

  • instant_app: APK를 인스턴트 앱으로 설치하는 테스트의 변형을 만듭니다.
  • multi_abi: 기기에서 지원하는 각 ABI의 테스트 변형을 만듭니다.
  • secondary_user: APK를 설치하고 보조 사용자로 테스트를 실행하는 다양한 버전의 테스트를 만듭니다.

성능 테스트 모듈의 측정항목 수집 및 후처리

성능 테스트 모듈의 경우 성능 테스트에 필수적이므로 모듈 수준 metrics_collectormetric_post_processor가 허용됩니다. 모듈 수준 측정 항목 수집기 및 후처리기는 모듈마다 다를 수 있습니다. 최상위 수준과 모듈 수준에서 모두 후처리기를 지정하는 것은 좋지 않습니다.

성능 테스트 모듈 구성에는 값이 performancetest-type 메타데이터(예: xml <option name="config-descriptor:metadata" key="test-type" value="performance" />)가 포함되어야 합니다. 포함되지 않으면 테스트 구성에 FilePullerLogCollector 또는 metric_post_processor 이외의 metric_collector가 포함된 경우 테스트가 사전 제출에서 실패합니다.

성능 테스트 모듈 구성을 보여주는 예

<configuration description="Runs sample performance test.">
    <!-- Declare as a performance test module -->
    <option name="config-descriptor:metadata" key="test-type" value="performance" />
    <option name="test-tag" value="hello-world-performance-test" />
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="class" value="android.test.example.helloworldperformance.HelloWorldPerformanceTest" />
    </test>
    <!-- Add module-level post processor MetricFilePostProcessor -->
    <metric_post_processor class="com.android.tradefed.postprocessor.MetricFilePostProcessor">
        <option name="aggregate-similar-tests" value="true" />
        <option name="enable-per-test-log" value="false" />
    </metric_post_processor>
</configuration>