Pruebas de instrumentación

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 de Instrumentation 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.

Resumen de pasos

  1. 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

  2. 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 y Android.mk en una de las ubicaciones arriba de

  3. Consulta 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" />
    
  4. No olvides marcar la prueba como @SmallTest, @MediumTest o @LargeTest

  5. Compila el módulo de prueba con m, p. ej.:

    m FrameworksCoreTests
    
  6. Ejecuta las pruebas:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Si no usas Tradefed, instala y ejecuta las pruebas de forma manual:

    1. Instala el APK generado:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Ejecuta las pruebas con varias opciones:

      1. Todas las pruebas en el APK

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. 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
        
      3. 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
        
      4. 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:

  1. Las métricas pueden ser números enteros o de punto flotante
  2. se descartará cualquier valor que no sea numérico
  3. tu APK de prueba pueden ser pruebas funcionales o de métricas, pero Por el momento, no se admite la combinación de ambos.