여러 기기로 테스트 실행

이 페이지는 테스트 도중 Trade Federation 테스트 하네스를 여러 기기에 사용할 수 있도록 도와줍니다. 이는 TF의 고급 사용 사례입니다. 우선 종합 예시에 설명된 일반 사용부터 익혀야 합니다.

여러 기기의 경우에는 뭐가 다를까요?

Trade Federation에서 여러 기기의 테스트를 구성하고 실행할 때에는 특히 다음을 비롯한 여러 가지가 다릅니다.

  • XML 구성
  • [명령줄 옵션]/devices/tech/test_infra/tradefed/fundamentals/options)

모든 기존의 단일 기기 구성은 다중 기기 모드에 대해 유효합니다.

TODO: 단일 기기 사용 사례의 예를 추가하여 바로 위의 문장을 설명하세요. 이는 두 번째 문장의 다중 기기 모드와 관련이 있기 때문입니다.

다중 기기 구성

이 문서는 사용자가 일반적인 tF 테스트 구성에 이미 익숙하다고 가정합니다. 다음은 2개의 기기가 사용되는 일반적인 테스트 구성의 예입니다.

<configuration description="A simple multi-devices example in Tradefed">

        <device name="device1">
            <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
        </device>

        <device name="device2">
            <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
        </device>

        <option name="log-level" value="verbose" />
        <test class="com.android.tradefed.HelloWorldMultiDevices" />

        <logger class="com.android.tradefed.log.FileLogger" />
        <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

    </configuration>
    

구조에 대한 여러 가지를 언급해야 합니다.

  • 필요한 각 기기에는 <device>가 예상됩니다.
  • 필요한 경우 <build_provider>, <target_preparer>, <device_recovery>, <device_requirements><device_options><device> 태그 내에 포함합니다. 그렇지 않으면 예외가 표시됩니다.
  • <device>name 속성은 필수이며 구성에 있는 모든 기기 사이에서 고유해야 합니다. 이 속성은 속성에 연결된 특정 기기를 참조하는 데 사용됩니다. 그러면 테스트가 특정 기기를 타겟팅할 수 있습니다.
  • <option>은 구성 루트 시점에 전역 범위를 가지거나 <device> 태그 내에 지정되었을 때 기기 범위로 제한될 수 있습니다.

단일 기기 구성에 적용 가능한 다른 모든 규칙은 여기서도 적용 가능합니다. 자세한 내용은 아래의 Hello World 예시를 참조하세요.

명령줄 업데이트

TF 명령줄에서 옵션을 지정할 때는 <device name>이 XML 구성에 지정된 이름인 {<device name>}을 사용하는 기기 범위를 지정할 수도 있습니다.

위의 예시에서는 다음과 같은 옵션이 허용됩니다.

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

이와 같이 기기 이름을 사용하는 기기 build_provider 개체 중 하나만 타겟팅할 수 있습니다.

--{device2}device-setup:disable

이 예시에서는 device2가 기기 설정을 건너뛰는 반면 device1은 건너뛰지 않습니다.

TF는 기기를 어떻게 선택할까요?

Trade Federation은 구성에 표시되는 기기 순서에 따라 device_requirements와 일치하는 기기를 찾습니다. 기기가 할당될 때마다 TF는 다음 기기를 찾으려고 시도합니다. 일부 기기를 할당할 수 없는 경우에는 기기가 전부 해제되며, 모든 기기가 일치하면 명령어가 재시도됩니다.

TF는 기기를 어떻게 준비할까요?

여러 기기의 준비 단계는 단일 기기의 경우와 거의 동일합니다. 각 기기는 <device> 내에 표시되는 순서대로 <target_preparer>를 호출하여 준비됩니다..

또한 기기 페어링처럼 여러 기기가 요구되는 준비 단계를 지원하는 구성의 루트에서 지정된 <multi_target_preparer>를 사용할 수도 있습니다. 이는 target_preparer 단계 이후에 실행됩니다.

여기서 대안은 target_preparer 단계 전에 실행되는 <pre_multi_target_preparer>입니다.

  • <pre_multi_target_preparer>는 개별 기기 설정 전에 이루어져야 하는 설정에 사용됩니다.
  • <multi_target_preparer>는 개별 기기 설정 이후에 이루어져야 하는 설정에 사용되어야 합니다.

예: 플래시 기기 1(target_preparer) 플래시 기기 2(target_preparer) 블루투스로 두 기기 연결(multi_target_preparer)

다중 기기 테스트 작성

단일 기기 테스트를 작성할 때는 IDeviceTest 인터페이스를 구현하게 됩니다.

테스트 중인 기기를 수신하기 위한 테스트에서는 IMultiDeviceTest 또는 IInvocationContextReceiver를 구현할 수 있습니다.

IMultiDeviceTest는 IBuildInfo에 대한 기기의 직접적인 맵을 제공하는 반면 IInvocationContextReceiver는 나중에 온전한 컨텍스트(기기, IBuildInfo 및 메타데이터)를 제공합니다.

그러면 TF에서 테스트 작성을 위해 제공하는 평상시의 ITestDevice를 사용할 수 있습니다.

아직까지는 device1.sync(device2)처럼 기기에서 다른 기기로 작업을 수행하는 API가 존재하지 않습니다. 지원해야 할 강력한 사용 사례가 있다고 생각한다면 android-platform 목록으로 이유를 보내주세요.

다중 기기 Hello World 예시

Hello World와 유사한 구성 예시: multi-devices.xml multi_target_preparer 구현 예시: HelloWorldMultiTargetPreparer 이 예시는 기기 목록 및 관련 빌드를 수신하는 방법을 보여줍니다.

이는 다음과 관련된 전체 예시입니다.

  • 2개의 기기 할당
  • multi_target_preparer를 통해 두 기기에 액세스
  • 두 기기를 사용하는 테스트 실행

Tradefed를 빌드한 후에는 TF 셸에 다음 명령어를 사용할 수 있습니다.

run example/multi-devices

그러면 다음이 포함된 출력이 표시됩니다.

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
    08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
    08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
    08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'
    

위의 내용을 실행하려면 두 기기가 연결되어 있어야 합니다. 이는 adb devices를 통해 확인할 수 있습니다.

호출이 진행 중인 경우에는 list ilist d로 이를 단일 기기처럼 모니터링할 수 있습니다.

tf >list i
    Command Id  Exec Time  Device                          State
    1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
    tf >list d
    Serial            State      Product   Variant   Build   Battery
    00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
    LP5A390056        Allocated  shamu     shamu     NRD90I  100
    

각 호출과 관련된 기기는 물론 가용한 모든 기기와 각각의 상태까지 확인할 수 있어야 합니다.

이 예시에서는 구성 device1device2에 두 개의 기기를 호출했습니다. 가능한 경우 정말로 설정이 예상되는 기기 유형에 따라 좀 더 구체적이 이름을 지정해야 합니다.