Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Comience con las pruebas de instrumentación

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Esta guía describe cómo preparar y ejecutar una prueba de instrumentación con Firebase Test Lab. Para usar esta guía, necesitará una prueba de instrumentación (escrita por usted o su equipo) que use 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 posteriores, subirá el APK de su aplicación y el APK de su prueba a 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 cuando ejecute pruebas de instrumentación, como las pruebas escritas con el marco de prueba de 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 que se haya ejecutado la prueba de instrumentación, puede 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 capacidad de tomar capturas de pantalla ya está incorporada en el proyecto NotePad.

Paso 1. Agregue la biblioteca de capturas de pantalla a su proyecto

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

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. En el archivo Gradle de tu módulo (nivel de aplicación) (generalmente app/build.gradle ), agrega una dependencia para la biblioteca de capturas de pantalla de Test Lab.

    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 su prueba, registre FirebaseScreenCaptureProcessor en una etiqueta de metadatos dentro del elemento <instrumentation> . También puede especificar el procesador como un 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 su aplicación, agregue 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á probando en Android 10 (nivel de API 29) o superior , omita el permiso WRITE_EXTERNAL_STORAGE (su 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. Tome capturas de pantalla durante su 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 mediante el ScreenCaptureProcessor que está registrado en tu AndroidManifest.xml . Tenga en cuenta que BasicScreenCaptureProcessor se usa 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.

Ejemplos de casos de uso para crear una ScreenCapture de pantalla:

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

    Screenshot.capture()
    
  • Tome una ScreenCapture de pantalla de la actividad en cualquier nivel de API. Tenga en cuenta que esta es la única opción para los 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());
    ...
    

Ejemplos de casos de uso para procesar una captura de pantalla

  • Procese una ScreenCapture de pantalla a través de FirebaseScreenCaptureProcessor :

    Screenshot.capture().process();
    
  • Procese un 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 con el procesador registrado:

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

Paso 3. Cree y ejecute su prueba

  1. Crea tu aplicación y prueba los APK (consulta Probar tu aplicación para obtener instrucciones).

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

  3. Finalmente, ejecute su prueba.

Paso 4. Mira tus capturas de pantalla de prueba

Una vez completada la prueba, puede ver las capturas de pantalla tomadas en la consola de Firebase.

  1. En la pestaña Pruebas , seleccione su prueba completada, 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 características 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 la prueba de instrumentación, haga clic en Opciones adicionales > Ejecutar con Orchestrator .

Beneficios y desventajas

  • Beneficio: No hay estado compartido. Cada prueba se ejecuta en su propia instancia de instrumentación para que no se acumule un estado compartido entre las pruebas.
  • Beneficio: Choques aislados. Si una prueba falla, solo esa instrumentación finaliza y otras pruebas en su suite aún pueden ejecutarse.
  • Inconveniente: Tiempos de ejecución más largos . Cada prueba ejecuta su propia instancia de instrumentación, lo que significa que el proceso de prueba lleva un poco más de tiempo en general. Si no se marca, los tiempos de ejecución aumentados podrían afectar potencialmente el uso de su cuota o el tiempo facturado y pueden hacer que alcance los límites de tiempo de espera de sus dispositivos.

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.

Cómo funciona la fragmentación de prueba

Digamos que creas N fragmentos. Para cada dispositivo que seleccione, Test Lab activa N dispositivos idénticos y ejecuta un subconjunto de las pruebas en cada dispositivo. Esto significa que los casos de prueba fragmentados pueden generar varias ejecuciones de prueba por dispositivo, a diferencia de los casos de prueba no fragmentados, que siempre dan como resultado una ejecución de prueba por dispositivo (para obtener una descripción general rápida de los conceptos clave en Test Lab, consulte Conceptos clave ).

Puedes habilitar la fragmentación de prueba en Firebase console:

  1. En la configuración de la 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. Según el tiempo que 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 .