Trade Federation에서 호스트 기반 테스트 작성

이 페이지는 호스트에 의해 구동되는 JUnit4 스타일의 디바이스 테스트를 작성하는 방법을 설명합니다. 이는 하니스의 호스트 측이 장치에 대한 작업을 트리거한다는 것을 의미합니다.

"호스트 측" 테스트와 "호스트 기반" 테스트가 약간 다른 것으로 간주합니다.

  • 호스트 기반 테스트: 하나 이상의 장치와 상호 작용하는 호스트에서 실행되는 테스트입니다. 테스트 중인 시스템(SUT)은 호스트 자체에 있지 않지만 호스트에서 테스트되고 있습니다.
  • 호스트 측 테스트: 순전히 호스트에서 실행되고 호스트에서만 무언가를 테스트하는 테스트입니다(예: 단위 테스트).

계측 테스트가 아닌 호스트 기반 테스트를 만드는 이유는 무엇입니까?

일부 테스트에서는 재부팅 명령 실행과 같이 기기 전체 상태에 영향을 미치도록 요구할 수 있습니다. 계측 테스트 사례에서 재부팅하면 계측이 중단되고 테스트를 계속할 수 없으며 사용 가능한 결과가 없습니다.

호스트 기반 테스트는 테스트가 의존하는 외부 장치와의 상호 작용이 필요한 추가 설정 단계를 주도할 수도 있습니다.

호스트 기반 테스트는 이러한 사용 사례를 처리하고 더 많은 시나리오로 장치의 고급 테스트를 허용할 수 있습니다. 그런 상황이라면 호스트 기반 테스트를 작성하는 것이 가장 합리적입니다.

호스트 기반 테스트는 TF로 어떻게 작성되나요?

다음은 샘플입니다.

@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
    @Before
    public void setUp() throws Exception {
       // Some setup
    }

    @Test
    public void testCheckWeHaveDevice() throws Exception {
        Assert.assertNotNull(getDevice());
    }
}

Trade Federation의 호스트 기반 테스트는 DeviceJUnit4ClassRunner JUnit4 테스트 러너에 의해 주도됩니다. 테스트 클래스의 전체 구조는 일반 JUnit4 테스트와 동일합니다.

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume , Assert

BaseHostJunit4Test 확장은 다음과 같은 유용한 테스트 유틸리티 API를 상속하는 방법입니다.

  • installPackage : 대상 장치에 APK를 설치할 수 있습니다.
  • installPackageAsUser : 대상 장치에 사용자로 APK를 설치할 수 있습니다.
  • uninstallPackage : APK를 제거할 수 있습니다.
  • isPackageInstalled : 패키지 설치 여부를 확인한다.
  • hasDeviceFeature : 장치가 기능을 지원하는지 여부를 확인합니다. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : 가능한 모든 옵션을 처리하기 위해 DeviceTestRunOptions 를 사용하여 대상 장치에 대해 계측 테스트를 실행합니다.

또한 Tradefed 장치 개체에 대한 액세스를 제공합니다.

  • getDevice() : 장치를 조작하기 위한 TF 장치 개체를 반환합니다.
  • getBuild() : 빌드 정보를 얻기 위해 빌드 정보 TF 객체를 반환합니다.
  • getAbi() : 테스트가 실행 중인 ABI를 반환합니다.

Tradefed 지원: 클래스별 장치 준비 및 정리

JUnit4 @BeforeClass@AfterClass 는 정적 메서드에만 적용할 수 있으므로 #getDevice() 핸들러를 사용하여 일부 장치별, 일회성, 클래스별 설정 또는 정리를 수행할 수 없습니다. 이 문제를 해결하려면 Tradefed 주석을 사용하십시오.

  • @BeforeClassWithInfo: @BeforeClass 주석 전에 실행
  • @AfterClassWithInfo: @AfterClass 주석 이후에 실행
   @BeforeClassWithInfo
   public static void beforeClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

   @AfterClassWithInfo
   public static void afterClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

TestInformation 을 사용하면 정적 또는 비정적 범위에서 사용할 수 있는 장치 및 저장소 속성을 사용할 수 있습니다. BaseHostJUnit4Test#getTestInformation() 을 통해 비정적 범위에서 TestInformation 가져오기를 지원합니다.

BaseHostJUnit4Test 를 확장하지 않는 경우 TestInformation 개체를 수신하기 위해 ITestInformationReceiver 를 구현할 수 있습니다.

Tradefed에서 호스트 기반 테스트를 구성하는 방법은 무엇입니까?

Tradefed XML 구성 파일에서 호스트 기반 테스트는 HostTest 실행기를 통해 실행됩니다.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>