Primero, lee Cómo probar tu app en developer.android.com. Ten en cuenta que hay algunas diferencias en el uso de las pruebas de instrumentación en las pruebas de plataforma.
En resumen, una prueba de instrumentación proporciona una ejecución de prueba especial
como se inicia mediante el comando am instrument
, en el que el entorno
el proceso de la aplicación se reinicia y se inicializa con el contexto básico de la aplicación,
y se inicia un subproceso de instrumentación
dentro de la VM del proceso de aplicación. Tu código de prueba inicia la ejecución en este subproceso de instrumentación y se le proporciona una instancia de Instrumentation
que proporciona acceso al contexto de la aplicación y a las APIs para manipular el proceso de la aplicación en prueba.
Conceptos clave
- Se debe declarar una instrumentación en un paquete de aplicación, con una etiqueta
<instrumentation>
anidada debajo de la etiqueta<manifest>
del manifiesto del paquete de aplicación. - el manifiesto de un paquete de aplicación puede contener técnicamente varios
Etiquetas
<instrumentation>
, aunque no se suelen usar de este modo. - cada
<instrumentation>
debe contener lo siguiente:- Un atributo
android:name
: Debe ser el nombre de una subclase deInstrumentation
incluido en la aplicación de prueba, que, por lo general, es de aplicaciones que se usa, p.ej.:android.support.test.runner.AndroidJUnitRunner
- se debe definir un atributo
android:targetPackage
. Su valor debe en el paquete de la aplicación a prueba.
- Un atributo
Resumen de pasos
A continuación, se muestran destinos comunes para pruebas herméticas contra servicios de framework:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Si vas a agregar un módulo de instrumentación nuevo para tu componente, consulta
Sigue la convención existente si agregas pruebas a una de las ubicaciones anteriores. Si estás configurando un nuevo módulo de prueba, sigue las configuración de
AndroidManifest.xml
yAndroid.mk
en una de las ubicaciones arriba deConsulta frameworks/base/core/tests/coretests/ para ver un ejemplo. Ten en cuenta que estas líneas instalan apps adicionales:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
No olvides marcar la prueba como
@SmallTest
,@MediumTest
o@LargeTest
Compila el módulo de prueba con m, p. ej.:
m FrameworksCoreTests
Ejecuta las pruebas:
La solución más sencilla es usar Atest de la siguiente manera:
atest FrameworksCoreTests
O bien, para pruebas más complejas, usa el sistema de pruebas de Trade Federation:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Si no usas Tradefed, instala y ejecuta las pruebas de forma manual:
- Instala el APK generado:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Ejecuta las pruebas con varias opciones:
Todas las pruebas en el APK
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
todas las pruebas en un paquete específico de Java
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
todas las pruebas de una clase específica
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
un método de prueba específico
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
La prueba puede realizar una aserción explícita si se aprueba o no con las APIs de JUnit
. en
las excepciones no detectadas
también causarán un error funcional.
Para emitir métricas de rendimiento, el código de prueba puede llamar
Instrumentation#sendStatus
para enviar una lista de pares clave-valor. Es importante tener en cuenta lo siguiente:
- Las métricas pueden ser números enteros o de punto flotante
- se descartará cualquier valor que no sea numérico
- tu APK de prueba pueden ser pruebas funcionales o de métricas, pero Por el momento, no se admite la combinación de ambos.