Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

복잡한 테스트 구성

일부 테스트 모듈은 맞춤 설정이 필요할 수 있고 테스트 사례 자체에서 실행될 수 없는 단계를 분해해야 할 수 있습니다. 일반적인 예는 다음과 같습니다.

  • 다른 APK 설치하기(테스트 APK 외)
  • 기기에 일부 파일 푸시하기
  • 명령어(예: adb shell pm ...) 실행하기

이전에는 일반적으로 구성요소팀에서 이러한 작업을 실행하기 위해 호스트 측 테스트 작성에 의지했으며, 테스트를 실행하기 위해 Trade Federation 하네스에 대한 이해가 필요하고 기본적으로 테스트 모듈의 복잡도가 증가했습니다.

이러한 작업을 지원하기 위해 CTS에서 차용한 테스트 모듈 구성이라는 개념을 도입했으며 단 몇 줄의 구성으로 위의 공통 작업 목록을 실행할 수 있습니다. 유연성을 최대화하려면 ITargetPreparer 또는 ITargetCleaner에서 정의한 자체 타겟 준비자를 구현하고 자체 테스트 모듈 구성에서 사용하도록 구성할 수도 있습니다.

테스트 모듈의 테스트 모듈 구성은 'AndroidTest.xml'이라는 필수 XML 파일로 최상위 모듈 소스 폴더에 추가됩니다. XML은 Trade Federation 테스트 자동화 하네스에서 사용하는 구성 파일 형식을 따릅니다. 현재 테스트 모듈 구성을 통해 처리되는 기본 태그는 'target_preparer' 및 'test' 태그입니다.

타겟 준비자

'target_preparer' 태그는 이름에서 알 수 있듯이 설정 메서드를 제공하는 타겟 준비자(ITargetPreparer 참고)를 정의하며, 이 타겟 준비자는 테스트를 위해 테스트 모듈이 실행되기 전에 호출됩니다. 또한, 'target_preparer' 태그에서 참조되는 클래스는 ITargetCleaner도 구현하며 테스트 모듈이 완료된 후에 ITargetCleaner의 tearDown 메서드가 호출됩니다.

기본 일반 모듈 구성을 사용하려면 테스트 모듈의 최상위 폴더에 'AndroidTest.xml'이라는 새 파일을 추가하고 다음 콘텐츠를 채웁니다.

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

예를 들어, 위의 'insert' 주석에 다음 옵션 태그를 추가할 수 있습니다.

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

옵션은 테스트 하네스를 다음과 같이 구성합니다.

  1. 테스트 모듈이 호출되기 전에 기기에서 셸 명령어 'settings put secure accessibility_enabled 1'을 실행합니다.
  2. 테스트 모듈이 완료된 후 셸 명령어 'settings put secure accessibility_enabled 0'을 실행합니다.

이 특정 예에서 접근성은 테스트 모듈 실행 전후에 각각 사용 설정 또는 사용 중지됩니다. 간단한 예를 통해 'option' 태그가 사용되는 방식에 관해 자세히 설명할 필요가 있습니다. 위에 표시된 것처럼 태그는 name과 value라는 두 가지 속성을 가질 수 있습니다. name 속성은 옵션의 이름을 나타내며 콜론을 기준으로 준비자의 짧은 이름과 준비자가 제공하는 실제 옵션 이름, 두 부분으로 나뉩니다.

값 필드의 정확한 목적은 준비자가 옵션을 정의하는 방식에 따라 다릅니다. 값 필드는 문자열, 숫자, 부울 또는 파일 경로 등이 될 수 있습니다. 위의 예에서 'run-command:run-command'라는 이름은 타겟 준비자에서 정의한 'run-command' 옵션 값을 'run-command'라는 짧은 이름으로 설정한 것입니다. 또한, 'run-command:teardown-command'라는 이름은 동일한 타겟 준비자에서 정의한 'teardown-command' 옵션 값도 'run-command'라는 짧은 이름으로 설정한다는 의미입니다. 세 개의 일반 타겟 준비자를 요약하면 다음과 같습니다.

  • 클래스 이름: PushFilePreparer

    • 짧은 이름: push-file
    • 기능: 테스트 사례 폴더에 있는 임의의 파일을 기기의 정해진 위치에 푸시합니다.
    • 참고사항:
      • 이 준비자는 폴더에서 폴더로 또는 파일에서 파일로 푸시할 수 있습니다. 즉, 파일을 기기의 폴더 아래로 푸시할 수 없습니다. 또한, 폴더 아래에 있는 대상 파일 이름도 지정해야 합니다.
    • 옵션:
      • push: '/path/to/srcfile.txt->/path/to/destfile.txt' 또는 '/path/to/srcfile.txt->/path/to/destdir/'로 형식이 지정되는 push-spec으로 반복될 수 있습니다. 이 경로는 테스트 모듈 디렉터리 또는 외부 디렉터리 자체에 대한 상대 경로여야 합니다.
      • **post-push: **모든 푸시를 시도한 후에 기기에서 실행하는 명령어('adb shell <your command>')입니다. 일반적인 사용 사례는 권한에 chmod를 사용하는 것입니다.
  • 클래스 이름: InstallApkSetup

    • 짧은 이름: install-apk
    • 기능: 임의의 APK 파일을 기기의 대상에 푸시합니다.
    • 옵션:
      • test-file-name: 기기에 설치할 APK의 이름입니다.
      • install-arg: pm 설치 명령어에 전달할 추가 인수로 '-d'와 같은 선행 대시를 포함합니다. 반복될 수 있습니다.
  • 클래스 이름: RunCommandTargetPreparer

    • 짧은 이름: run-command
    • 기능: 테스트 모듈 실행 이전 또는 이후에 임의의 셸 명령어를 실행합니다.
    • 옵션:
      • run-command: adb 쉘 명령어를 실행합니다. 반복될 수 있습니다.
      • teardown-command: 해체 단계에서 실행할 adb 셸 명령입니다. 반복될 수 있습니다.

테스트 클라스

테스트 클래스는 테스트를 실행하는 데 사용할 Trade Federation 클래스입니다.

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

다음은 세 가지 일반적인 테스트 클래스입니다.

  • 클래스 이름: GTest

    • 짧은 이름: gtest
    • function: 주어진 기기에서 기본 테스트 패키지를 실행하는 테스트입니다.
    • 옵션:
      • native-test-device-path: 네이티브 테스트가 위치한 기기의 경로입니다.
  • 클래스 이름: InstrumentationTest

    • 짧은 이름: instrumentation
    • 함수: 주어진 기기에서 계측 테스트 패키지를 실행하는 테스트입니다.
    • 옵션:
      • 패키지: 실행할 Android 테스트 애플리케이션의 매니페스트 패키지 이름입니다.
      • 클래스: 실행할 테스트 클래스 이름입니다.
      • 메서드: 실행할 테스트 메서드 이름입니다.
  • 클래스 이름: AndroidJUnitTest

    • 기능: android.support.test.runner.AndroidJUnitRunner를 사용하여 지정된 기기에서 계측 테스트 패키지를 실행하는 테스트입니다. 이는 계측 테스트를 실행하는 주된 방법입니다.