이 페이지에서는 호스트에 기반하는 JUnit4 형식의 기기 테스트를 작성하는 방법을 설명합니다. 즉, 하네스의 호스트 측에서 기기에 대한 작업을 트리거합니다.
Google은 '호스트 측' 테스트와 '호스트 기반' 테스트에 약간의 차이가 있다고 간주합니다.
- 호스트 기반 테스트는 1개 이상의 기기와 상호작용하는 호스트에서 실행됩니다. 테스트 중인 시스템(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>