TF에서 기기 없이 실행되는 호스트 측 테스트 작성

이 페이지에서는 Linux GCE 인스턴스에서 실행되는 테스트와 같이 기기가 필요하지 않은 호스트 측 테스트를 작성하는 방법을 설명합니다. 기기가 필요한 호스트 기반 테스트를 작성하는 방법에 관한 자세한 내용은 Trade Federation에서 호스트 기반 테스트 작성을 참조하세요.

호스트 측 테스트 유형

Trade Federation(TF)을 통해 여러 유형의 호스트 측 테스트를 실행할 수 있습니다.

네이티브(gtest) 테스트

네이티브 테스트(gtests)를 만들어 플랫폼을 테스트합니다. 테스트에 기기가 필요하지 않으면 호스트에서 실행하세요. 테스트가 훨씬 더 빠르게 실행됩니다. 이러한 테스트를 테스트 호스트에서 실행되도록 구성하려면 TF 실행기인 HostGTest를 사용하세요.

다음은 TradeFed 테스트 구성 샘플입니다.

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

테스트 구성은 호스트에서 gtest 테스트(hello_world_test)를 실행합니다. 테스트 구성 예는 자동 생성될 수 있습니다. 테스트에 특별한 설정이나 정리가 필요하지 않으면 자동 테스트 구성 생성을 사용하여 적절한 TF 테스트 구성을 만들 수 있습니다.

호스트 측 gtest를 구성하고 자동 테스트 구성 생성을 사용 설정하려면 hello_world_test에서와 같이 Android.bp에서 host_supportedtrue로 설정하세요.

네이티브 테스트 작성에 관한 자세한 내용은 새 네이티브 테스트 예 추가를 참고하세요.

JAR(자바) 호스트 테스트

JUnit과 같은 JAR 호스트 테스트는 기기에서 실행할 필요가 없고 자바 프로젝트의 코드 적용 범위를 제공하는 테스트입니다. 이러한 테스트는 HostTest 실행기를 사용하여 테스트 호스트에서 실행되도록 구성할 수 있습니다.

TradeFed 테스트 구성 샘플:

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

테스트 구성은 HelloWorldHostTest의 호스트 측 JUnit 테스트를 실행합니다. 위의 테스트 구성은 자동 생성될 수 있습니다. 테스트에 특별한 설정이나 정리가 필요하지 않으면 자동 테스트 구성 생성을 사용하여 적절한 TradeFed 테스트 구성을 만드세요.

JAR 호스트 테스트를 작성하는 방법에 관한 자세한 내용은 JAR(자바) 호스트 테스트 페이지를 참조하세요.

격리된 자바 호스트 테스트

기기 없이 실행되는 자바 테스트는 약간의 성능 비용으로 격리 환경에서 실행할 수 있습니다. 하지만 이 환경을 사용하기 전에 고려해야 할 중요한 사항이 있습니다.

  • Robolectric 및 JUnit 단위 테스트에 사용되는 기본 실행기입니다.
  • Tradefed는 격리 환경의 JUnit 테스트만 지원합니다.
  • 정적으로 연결된 종속 항목만 지원됩니다. lib로 선언된 종속 항목은 클래스 경로에 포함되지 않습니다.
  • 격리 실행기는 shim 실행기와 테스트 jar만 클래스 경로에 넣습니다.
  • 이 실행기로 실행되는 테스트 실행마다 일정량의 고정 오버헤드가 있습니다.

Tradefed 테스트 구성 샘플(격리됨)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

자동 생성을 위한 Soong 구성 샘플

와 같이 테스트 구성을 수동으로 만드는 대신 Soong은 이 예와 같은 선언을 사용하여 구성을 자동 생성할 수 있습니다.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Robolectric 테스트

Robolectric 테스트는 몇 가지 특수 옵션과 함께 동일한 실행기를 격리된 호스트 테스트로 사용합니다.

  • robolectric-resources 옵션을 사용하면 Robolectric 관련 명령줄 옵션이 하위 프로세스로 전달될 수 있고 android-all의 트리 빌드가 하위 프로세스 클래스 경로에 추가됩니다. 다른 두 가지는 권장사항이지만 이 옵션은 Robolectric 테스트를 성공적으로 실행하는 데 필수입니다.
  • java-folder 옵션을 통해 하위 프로세스에서 사용하는 자바 런타임을 변경할 수 있습니다. 이는 Robolectric에서 호스트 시스템의 기본 JVM과 일치하지 않을 수 있는 특정 자바 버전을 선호하기 때문에 필요합니다.
  • exclude-paths 옵션을 사용하면 하위 프로세스 실행기가 특정 모듈을 전혀 로드하지 않도록 할 수 있으므로 JAR에 로드 오류를 일으킬 수 있는 불필요한 클래스가 있는 경우에 유용합니다. java.는 일반적인 제외로, SecurityException 예외가 발생하지 않도록 합니다.

Robolectric 구성 샘플

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

Robolectric 자동 생성을 위한 Soong 구성 샘플

와 같이 테스트 구성을 수동으로 만드는 대신 Soong은 이 예와 같은 선언을 사용하여 구성을 자동 생성할 수 있습니다.

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

Python 테스트

테스트 로직이 Python으로 작성된 경우 빌드 유형 python_test_host를 사용하여 TF PythonBinaryHostTest에서 실행할 수 있는 par 파일을 생성하세요.

TradeFed 테스트 구성 샘플

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

테스트 모음 설정

지정된 빌드의 TF에서 호스트 측 테스트에 액세스할 수 있도록 하려면 테스트 모듈 `test_suites` 설정을 `general-tests`로 설정하세요.

test_suites: ["general-tests"],

이 설정을 사용하면 테스트가 test_suites 타겟에서 general-tests.zip으로 패키징됩니다.