En esta página, se describe cómo escribir una prueba de dispositivo de estilo JUnit4 que ejecuta el host. Esto significa que el lado del host del agente activará acciones en el dispositivo.
Ten en cuenta que consideramos que las pruebas "del host" y las pruebas "controladas por el host" son ligeramente distintas:
- Prueba dirigida por el host: Es una prueba que se ejecuta en el host y que interactúa con uno o más dispositivos. El sistema en prueba (SUT) no está en el host, sino que se prueba desde él.
- Prueba del lado del host: Es una prueba que se ejecuta que solo se ejecuta en el host y prueba algo. solo en el host, por ejemplo, pruebas de unidades.
¿Por qué crear una prueba basada en el host en lugar de una prueba de instrumentación?
Es posible que algunas pruebas requieran que modifiques el estado general del dispositivo, como emitir una comando de reinicio. En el caso de prueba de instrumentación, un reinicio finalizaría la instrumentación, la prueba no podría continuar y no habría resultados disponibles.
Las pruebas dirigidas por el host también pueden generar pasos de configuración adicionales que requieren interacción con dispositivos externos de los que depende la prueba.
Una prueba dirigida por el host puede controlar estos casos de uso y permitir pruebas avanzadas del dispositivo con más situaciones. Si estás en esa situación, escribir un prueba basada en hosts tiene más sentido.
¿Cómo se escriben las pruebas dirigidas por el host en TF?
Aquí hay un ejemplo:
@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());
}
}
Las pruebas controladas por host en la Federación de Comercio se realizan mediante DeviceJUnit4ClassRunner. JUnit4. La estructura general de la clase de prueba es la misma que la de una prueba JUnit4 normal:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
Extender BaseHostJunit4Test es una forma de heredar la API de utilidades de prueba útiles, como las siguientes:
installPackage
: Permite instalar un APK en el dispositivo de destino.installPackageAsUser
: Permite instalar un APK como un usuario en el dispositivo de destino.uninstallPackage
: Permite desinstalar un APK.isPackageInstalled
: Comprueba si un paquete está instalado o no.hasDeviceFeature
: Comprueba si el dispositivo admite o no una función. (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: Ejecuta una prueba de instrumentación en un dispositivo de destino con DeviceTestRunOptions para controlar todas las opciones posibles.
También proporciona acceso al objeto del dispositivo Tradefed:
getDevice()
: Muestra un objeto de dispositivo de TF para manipularlo.getBuild()
: Muestra un objeto TF de información de compilación para obtener información sobre la compilación.getAbi()
: Muestra la ABI en la que se ejecuta la prueba.
Compatibilidad con Tradefed: Preparación y limpieza de dispositivos por clase
@BeforeClass
y @AfterClass
de JUnit4 solo se pueden aplicar a métodos estáticos.
lo que hace imposible usar el controlador #getDevice()
para hacer algunas
configuración o limpieza específicas del dispositivo, una sola vez y por clase. Para resolver este problema, usa la anotación de Tradefed.
- @BeforeClassWithInfo: Se ejecuta antes que @BeforeClass.
- @AfterClassWithInfo: Se ejecuta después de las anotaciones @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
te permite usar el dispositivo y almacenar propiedades que se pueden usar en el alcance estático o no estático. BaseHostJUnit4Test
admite obtener el TestInformation
en un alcance no estático a través de #getTestInformation()
.
Si no extiendes BaseHostJUnit4Test
, puedes implementar ITestInformationReceiver
para recibir el objeto TestInformation
.
¿Cómo configurar una prueba dirigida por el host en Tradefed?
En el archivo de configuración XML de Tradefed, las pruebas dirigidas por el host se ejecutan a través del ejecutor HostTest.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>