Primero lea Pruebe su aplicación en desarrollador.android.com. Tenga en cuenta que existen algunas diferencias en cómo se utilizan las pruebas de instrumentación en las pruebas de plataforma.
En resumen, una prueba de instrumentación proporciona un entorno de ejecución de prueba especial iniciado mediante el comando am instrument
, donde el proceso de aplicación objetivo se reinicia e inicializa con el contexto básico de la aplicación y se inicia un subproceso de instrumentación dentro de la máquina virtual del proceso de aplicación. Su código de prueba comienza la ejecución en este subproceso de instrumentación y se proporciona con una instancia Instrumentation
que proporciona acceso al contexto de la aplicación y a las API para manipular el proceso de la aplicación bajo 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. - un manifiesto de paquete de aplicación técnicamente puede contener múltiples etiquetas
<instrumentation>
, aunque no se usa comúnmente de esta manera. - cada
<instrumentation>
debe contener:- un atributo
android:name
: debe ser el nombre de una subclase deInstrumentation
que se incluye en la aplicación de prueba, que normalmente es el ejecutor de pruebas que se utiliza, por ejemplo:android.support.test.runner.AndroidJUnitRunner
- Se debe definir un atributo
android:targetPackage
. Su valor debe establecerse en el paquete de aplicación bajo prueba.
- un atributo
Resumen de pasos
A continuación se muestran destinos comunes para pruebas herméticas contra servicios marco:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Si está agregando un módulo de instrumentación nuevo para su componente, consulte
Siga la convención existente si está agregando pruebas en una de las ubicaciones anteriores. Si está configurando un nuevo módulo de prueba, siga la configuración de
AndroidManifest.xml
yAndroid.mk
en una de las ubicaciones anteriores.Consulte frameworks/base/core/tests/coretests/ para ver un ejemplo. Tenga en cuenta que estas líneas instalan aplicaciones adicionales:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
No olvide marcar su prueba como
@SmallTest
,@MediumTest
o@LargeTest
Construya el módulo de prueba con m, por ejemplo:
m FrameworksCoreTests
Ejecute las pruebas:
La solución más sencilla es utilizar Atest así:
atest FrameworksCoreTests
O para pruebas más complejas, utilice el arnés de pruebas de la Federación de Comercio :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Si no utiliza Tradefed, instale y ejecute las pruebas manualmente:
- Instale el apk generado:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Ejecute las pruebas con varias opciones:
todas las pruebas en la apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
todas las pruebas bajo un paquete Java específico
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
todas las pruebas bajo 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
Su prueba puede hacer una afirmación explícita sobre si se aprueba o no mediante las API JUnit
; Además, cualquier excepción no detectada también provocará una falla funcional.
Para emitir métricas de rendimiento, su código de prueba puede llamar a Instrumentation#sendStatus
para enviar una lista de pares clave-valor. Es importante tener en cuenta que:
- Las métricas pueden ser enteras o de punto flotante.
- cualquier valor no numérico será descartado
- su apk de prueba puede ser pruebas funcionales o pruebas de métricas; sin embargo, actualmente no se admite la combinación de ambas.