모듈 구성의 전반적인 구조는 일반적인 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-filter
및 module-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_collector
및 metric_post_processor
가 허용됩니다.
모듈 수준 측정 항목 수집기 및 후처리기는 모듈마다 다를 수 있습니다.
최상위 수준과 모듈 수준에서 모두 후처리기를 지정하는 것은 좋지 않습니다.
성능 테스트 모듈 구성에는 값이 performance
인 test-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>