복잡한 테스트 구성

일부 테스트 모듈은 테스트 케이스 자체 내에서 수행할 수 없는 맞춤 설정 및 해체 단계가 필요할 수 있습니다. 일반적인 예는 다음과 같습니다.

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

이전에는 구성요소 팀이 테스트를 수행하는 데 호스트 측 테스트를 작성했으며, 이를 위해서는 Trade Federation 하드웨어를 이해해야 했고 테스트 모듈이 더 복잡했습니다.

CTS에서 테스트 모듈 구성이라는 개념을 도입하여 이러한 작업을 지원하려면 몇 가지 구성 단계만 거치면 됩니다. 유연성을 최대화하려면 ITargetPreparer 또는 ITargetCleaner에서 정의한 자체 타겟 작성기를 구현하고 자체 테스트 모듈 구성에서 사용하도록 구성할 수도 있습니다.

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

타겟 준비자

'target_preparer' 태그는 이름에서 알 수 있듯이 테스트 모듈이 테스트를 위해 실행되기 전에 호출되는 설정 메서드를 제공하는 target preparer(ITargetPreparer 참조)를 정의합니다. 'target_preparer' 태그에서 참조된 클래스가 ITargetCleaner도 구현하는 경우 테스트 모듈이 완료된 후에 태그 해제 메서드가 호출됩니다.

기본 일반 모듈 구성을 사용하려면 테스트 모듈의 최상위 폴더에 '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 속성은 옵션의 이름을 나타내며 콜론으로 구분되어 두 부분으로 나뉩니다. 즉, 준비자의 짧은 이름과 준비자가 제공한 실제 옵션 이름입니다.

value 필드의 정확한 목적은 준비자가 옵션을 정의한 방법에 따라 달라지며 문자열, 숫자, 부울 또는 파일 경로 등이 될 수 있습니다. 위의 예에서 name run-command : run-command는 짧은 run-command라는 이름을 가진 대상 작성자가 정의한 'run-command' 옵션의 값을 설정합니다. 'run-command:teardown-command '는 짧은 '이름이"run-command'인 동일한 대상 작성자가 정의한 'teardown-command' 옵션 값을 설정한다는 것을 의미합니다. 다음은 3가지 일반적인 대상 준비자에 대한 요약입니다.

  • 클래스 이름: PushFilePreparer

    • 짧은 이름: push-file
    • 함수: 테스트 케이스 폴더에 있는 임의의 파일을 기기의 대상에 푸시합니다.
    • 참고:
      • 이 준비자는 폴더에서 폴더로 또는 파일에서 파일로 푸시할 수 있습니다. 즉, 기기의 폴더 아래에 파일을 푸시할 수 없습니다. 폴더 아래에 대상 파일 이름도 지정해야 합니다.
    • 옵션:
      • 푸시: '/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 이는 계측 테스트를 실행하는 주요 방법입니다.