Comience con las pruebas de instrumentación

Esta guía describe cómo preparar y ejecutar una prueba de instrumentación utilizando Firebase Test Lab. Para utilizar esta guía, necesitará una prueba de instrumentación (escrita por usted o su equipo) que utilice los marcos de prueba de Android Espresso o UI Automator . Las pruebas de instrumentación pueden durar hasta 45 minutos en dispositivos físicos y hasta 60 minutos en dispositivos virtuales .

En los pasos siguientes, cargarás el APK de tu aplicación y el APK de tu prueba en Firebase.

(Opcional) Agregue la biblioteca de capturas de pantalla a su aplicación

Firebase Test Lab incluye una biblioteca (testlab-instr-lib) que puede usar para procesar cualquier captura de pantalla que tome con ScreenCapture de AndroidX al ejecutar pruebas de instrumentación, como pruebas escritas con el marco de prueba Espresso . Esta sección describe cómo crear objetos ScreenCapture con la biblioteca de AndroidX y cómo procesarlos usando testlab-instr-lib.

Una vez ejecutada la prueba de instrumentación, podrá ver las capturas de pantalla capturadas en Firebase console.

Pruebe una aplicación de muestra

Descargue la aplicación de muestra NotePad para probar esta funcionalidad. La posibilidad de realizar capturas de pantalla ya está incorporada en el proyecto NotePad.

Paso 1. Agrega la biblioteca de capturas de pantalla a tu proyecto

  1. En el archivo Gradle de configuración de nivel raíz de su proyecto de prueba ( settings.gradle.kts o settings.gradle ), agregue el repositorio Maven de Google a cada sección repositories :

    pluginManagement {
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
            gradlePluginPortal()
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            // Add the following line:
            google() // Google's Maven repository
            mavenCentral()
        }
    }
    // ...
    
  2. En el archivo Gradle de su módulo (nivel de aplicación) (generalmente <project>/<app-module>/build.gradle.kts o <project>/<app-module>/build.gradle ), agregue una dependencia para el laboratorio de pruebas. biblioteca de capturas de pantalla.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2")
      // ...
    
  3. En el archivo AndroidManifest.xml de tu prueba, registra FirebaseScreenCaptureProcessor en una etiqueta de metadatos dentro del elemento <instrumentation> . También puede especificar el procesador como argumento en AndroidJUnitRunner (consulte la documentación de referencia de AndroidJUnitRunner para obtener instrucciones sobre cómo hacerlo).

    <instrumentation
      // Check that you have the following line (if not, add it):
      android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner
      android:targetPackage="com.your.package.name">
    
    // Add the following:
    <meta-data
      android:name="screenCaptureProcessors"
      android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" />
    </instrumentation>
    ...
    
  4. En el archivo AndroidManifest.xml de tu aplicación, agrega las siguientes líneas dentro del elemento <manifest> :

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. En su archivo AndroidManifest.xml , especifique los permisos del sistema para su aplicación agregando las siguientes líneas dentro de la etiqueta <manifest> . Si estás realizando pruebas en Android 10 (API nivel 29) o superior , omite el permiso WRITE_EXTERNAL_STORAGE (tu aplicación no requiere este permiso para leer y escribir capturas de pantalla en el dispositivo).

    <manifest ... >
        <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        ...
    </manifest>

Paso 2. Toma capturas de pantalla durante tu prueba

En cualquier punto de su prueba en el que desee tomar una captura de pantalla, llame al método Screenshot.capture() desde la biblioteca de AndroidX. Esto produce un objeto ScreenCapture . Cuando llamas a process() en el objeto ScreenCapture , se procesa utilizando el ScreenCaptureProcessor que está registrado en tu AndroidManifest.xml . Tenga en cuenta que BasicScreenCaptureProcessor se utiliza si no hay procesadores registrados. Dado que registró FirebaseScreenCaptureProcessor , sus capturas de pantalla se procesarán a través de FirebaseScreenCaptureProcessor y estarán disponibles para usted con sus resultados cuando ejecute su prueba con Firebase Test Lab.

Casos de uso de ejemplo para crear una ScreenCapture :

  • Realice una captura de pantalla completa en una API Build.VERSION_CODES.JELLY_BEAN_MR2 y superior:

    Screenshot.capture()
    
  • Realice una ScreenCapture de la actividad en cualquier nivel de API. Tenga en cuenta que esta es la única opción para dispositivos que están por debajo de Build.VERSION_CODES.JELLY_BEAN_MR2.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Casos de uso de ejemplo para procesar una captura de pantalla

  • Procese una ScreenCapture a través de FirebaseScreenCaptureProcessor :

    Screenshot.capture().process();
    
  • Procese una ScreenCapture a través de un ScreenCaptureProcessor específico (esto le permite omitir el registro del procesador):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Establezca el nombre y el formato de ScreenCapture y procéselo utilizando el procesador registrado:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

Paso 3. Cree y ejecute su prueba

  1. Cree su aplicación y pruebe los APK (consulte Pruebe su aplicación para obtener instrucciones).

  2. Cargue los archivos APK en el panel de Test Lab de Firebase console.

  3. Finalmente, ejecute su prueba.

Paso 4. Vea las capturas de pantalla de su prueba

Una vez completada la prueba, podrá ver las capturas de pantalla tomadas en Firebase console.

  1. En la pestaña Pruebas , seleccione la prueba completada y luego haga clic en la pestaña Resultados .

  2. Seleccione su prueba nuevamente, luego haga clic en la pestaña Capturas de pantalla que aparece.

(Opcional) Habilite funciones de prueba adicionales

Puede habilitar las siguientes funciones en su prueba antes de ejecutarla con Test Lab:

Habilitar orquestador

Android Test Orchestrator es una herramienta que ejecuta cada una de las pruebas de instrumentación de su aplicación de forma independiente. Test Lab siempre utiliza la última versión de Orchestrator.

Para habilitar Orchestrator para Test Lab, en la configuración de prueba de instrumentación, haga clic en Opciones adicionales > Ejecutar con Orchestrator .

Cuando utiliza Orchestrator, se beneficia de lo siguiente:

  • Ningún estado compartido. Cada prueba se ejecuta en su propia instancia de instrumentación, por lo que un estado compartido no se acumula entre las pruebas.
  • Choques aislados. Si una prueba falla, solo se finaliza esa instrumentación y aún se pueden ejecutar otras pruebas en su suite.

Tenga en cuenta que cuando utiliza Orchestrator, cada prueba ejecuta su propia instancia de instrumentación, lo que significa que el proceso de la aplicación se reinicia después de cada caso de prueba. El aumento de los tiempos de ejecución resultantes podría afectar el uso de su cuota o el tiempo facturado y podría hacer que exceda los límites de tiempo de espera de sus dispositivos. Si reduce el tiempo de inicio de su aplicación, esta sobrecarga se reducirá.

Para configurar opciones adicionales para Orchestrator, especifíquelas a través del campo environmentVariables . Por ejemplo, para usar clearPackageData , usa esta opción en gcloud:

--environment-variables clearPackageData=true

Habilitar fragmentación

La fragmentación de pruebas divide un conjunto de pruebas en subgrupos (fragmentos) que se ejecutan por separado de forma aislada. Test Lab ejecuta automáticamente cada fragmento en paralelo utilizando varios dispositivos y completa todo el conjunto de pruebas en menos tiempo.

Por ejemplo, si crea N fragmentos, para cada dispositivo que seleccione, Test Lab activa N dispositivos idénticos y ejecuta un subconjunto de pruebas en cada dispositivo. Esto significa que los casos de prueba fragmentados pueden dar lugar a múltiples ejecuciones de prueba por dispositivo. Sin embargo, los casos de prueba no fragmentados dan como resultado una ejecución de prueba por dispositivo. Para conocer los conceptos de Test Lab, consulte Conceptos clave .

Para habilitar la fragmentación de prueba en Firebase console, sigue estos pasos:

  1. En la configuración de prueba de instrumentación, haga clic en Opciones adicionales .

  2. En la sección Fragmentación , ingrese la cantidad de fragmentos que desea ejecutar.

Facturación de fragmentos de prueba

Test Lab implementa sus fragmentos aprovechando el mecanismo de fragmentación integrado de AndroidJUnitRunner. Para evitar que se le cobre por generar fragmentos vacíos (fragmentos sin casos de prueba asignados), la cantidad de fragmentos que cree debe ser menor que la cantidad total de casos de prueba. Dependiendo de cuánto tiempo tarde en ejecutarse cada caso de prueba, normalmente es una buena idea asignar de 2 a 10 casos de prueba por fragmento.

Para obtener más información sobre facturación, lea Uso, cuotas y facturación .