Google se compromete a promover la equidad racial para las comunidades negras. Ver cómo.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Pruebas de instrumentación

Primero lea Pruebe su aplicación en developer.android.com. Tenga en cuenta que hay 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 como se inicia a través del comando am instrument , donde el proceso de aplicación de destino se reinicia e inicializa con el contexto básico de la aplicación, y se inicia un hilo de instrumentación dentro de la VM del proceso de aplicación. Su código de prueba comienza la ejecución en este hilo de instrumentación y se proporciona con una instancia de 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

  • una instrumentación debe declararse en un paquete de aplicación, con una etiqueta <instrumentation> anidada bajo la etiqueta <manifest> del manifiesto del paquete de la aplicación.
  • un manifiesto de paquete de aplicación puede contener técnicamente múltiples etiquetas <instrumentation> , aunque no se usa comúnmente de esta manera.
  • cada <instrumentation> debe contener:
    • un atributo android:name : debería ser el nombre de una subclase de Instrumentation que se incluye en la aplicación de prueba, que normalmente es el corredor de prueba que se está utilizando, por ejemplo: android.support.test.runner.AndroidJUnitRunner
    • android:targetPackage debe definir un atributo android:targetPackage . Su valor debe establecerse en el paquete de la aplicación bajo prueba.

Resumen de pasos

  1. A continuación se presentan los destinos comunes para las pruebas herméticas contra los servicios marco:

     frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
     

    Si está agregando un nuevo módulo de instrumentación para su componente, vea

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

  3. Vea 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" />
     
  4. No olvide marcar su prueba como @SmallTest , @MediumTest o @LargeTest

  5. Cree el módulo de prueba con make, por ejemplo:

     make FrameworksCoreTests -j
     
  6. Ejecute las pruebas:

     make tradefed-all -j
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
     
  7. Si no usa Tradefed, instale y ejecute manualmente las pruebas:

    1. Instala el apk generado:
     adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
     

    Consejo: utiliza la adb shell pm list instrumentation para encontrar las instrumentaciones dentro del apk recién instalado

    1. Ejecute 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 bajo un paquete Java específico

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

Su prueba puede hacer una afirmación explícita al pasar o fallar usando las API JUnit ; Además, cualquier excepción no detectada también causará 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:

  1. las métricas pueden ser enteras o de coma flotante
  2. cualquier valor no numérico será descartado
  3. su apk de prueba puede ser pruebas funcionales o pruebas de métricas, sin embargo, la mezcla de ambas no es compatible actualmente