Configuración de prueba compleja

Algunos módulos de prueba pueden requerir pasos de configuración y desmontaje personalizados que no se pueden realizar dentro del propio caso de prueba. Los ejemplos típicos pueden incluir:

  • instalar otras apks (además de la apk de prueba)
  • enviar algunos archivos al dispositivo
  • ejecutar comandos (por ejemplo, adb shell pm...)

En el pasado, los equipos de componentes generalmente recurrían a escribir una prueba del lado del host para realizar dichas tareas, lo que requiere comprensión del aprovechamiento de la Federación de Comercio y generalmente aumenta la complejidad de un módulo de prueba.

Tomando prestado de CTS, introdujimos el concepto de configuración del módulo de prueba para admitir dichas tareas; la lista de tareas comunes anterior se puede lograr con solo unas pocas líneas de configuración. Para obtener la máxima flexibilidad, incluso puede implementar su propio preparador de objetivos, según lo definido por ITargetPreparer o ITargetCleaner , y configurarlos para usarlos en su propia configuración del módulo de prueba.

La configuración de un módulo de prueba para un módulo de prueba es un archivo XML requerido agregado a la carpeta de origen del módulo de nivel superior, denominado 'AndroidTest.xml'. El XML sigue el formato de un archivo de configuración utilizado por el arnés de automatización de pruebas de Trade Federation. Actualmente, las etiquetas principales manejadas a través de las configuraciones del módulo de prueba son las etiquetas "target_preparer" y "test".

Preparadores de objetivos

Una etiqueta "target_preparer", como su nombre indica, define un preparador de destino (consulte ITargetPreparer ) que ofrece un método de configuración, que se llama antes de que se ejecute el módulo de prueba para realizar pruebas; y si la clase a la que se hace referencia en la etiqueta "target_preparer" también implementa ITargetCleaner , su método de desmontaje se invocará una vez finalizado el módulo de prueba.

Para usar la configuración del módulo común integrado, agregue un nuevo archivo 'AndroidTest.xml' en la carpeta de nivel superior de su módulo de prueba y rellénelo con el siguiente contenido:

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

Como ejemplo, podemos agregar las siguientes etiquetas de opción (en el comentario "insertar" arriba):

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

Las opciones configurarán el arnés de prueba para:

  1. antes de invocar el módulo de prueba, ejecute el comando de shell "configuración pone accesibilidad segura_enabled 1" en el dispositivo
  2. una vez finalizado el módulo de prueba, ejecute el comando de shell "configuración de accesibilidad segura_enabled 0"

En este ejemplo particular, la accesibilidad se habilita/deshabilita antes/después de la ejecución del módulo de prueba, respectivamente. Con un ejemplo simple demostrado, es necesario cubrir más detalles sobre cómo se usa la etiqueta "opción". Como se muestra arriba, la etiqueta puede tener dos atributos: nombre, valor. El atributo de nombre debe hacer referencia a una de las opciones ofrecidas por el preparador.

El propósito exacto del campo de valor depende de cómo el preparador definió la opción: puede ser una cadena, un número, un valor booleano o incluso una ruta de archivo. Aquí hay un resumen de los tres preparadores de objetivos comunes:

  • nombre de clase: PushFilePreparer

    • nombre corto : archivo push
    • función : empuja archivos arbitrarios en la carpeta del caso de prueba al destino en el dispositivo
    • notas :
      • este preparador puede pasar de una carpeta a otra o de un archivo a otro; es decir, no puede insertar un archivo en una carpeta del dispositivo: también debe especificar el nombre del archivo de destino en esa carpeta.
    • opciones :
      • push-file: una especificación de inserción, que especifica el archivo local en la ruta donde debe insertarse en el dispositivo. Puede repetirse. Si se configuran varios archivos para enviarse a la misma ruta remota, se enviará el último.
      • push: (en desuso) Una especificación de inserción, formateada como ' /path/to/srcfile.txt->/path/to/destfile.txt ' o ' /path/to/srcfile.txt->/path/to/destdir/ '. Puede repetirse. Esta ruta puede ser relativa al directorio del módulo de prueba o al directorio de salida mismo.
      • post-push: un comando que se ejecutará en el dispositivo (con ` adb shell <your command> `) después de que se hayan intentado todas las inserciones. El caso de uso típico sería usar chmod para permisos
  • nombre de clase: InstallApkSetup

    • nombre corto: instalar-apk
    • función: empuja archivos apk arbitrarios al destino en el dispositivo
    • opciones:
      • nombre-archivo-prueba: el nombre del apk que se instalará en el dispositivo.
      • install-arg: Argumentos adicionales que se pasarán al comando pm install, incluido el guión inicial, por ejemplo, "-d". Puede repetirse
  • nombre de clase: RunCommandTargetPreparer

    • nombre corto: ejecutar comando
    • función: ejecuta comandos de shell arbitrarios antes o después de la ejecución del módulo de prueba
    • opciones:
      • run-command: comando adb shell para ejecutar. Puede repetirse
      • comando-desmontaje: comando adb shell que se ejecutará durante la fase de desmontaje. Puede repetirse

clase de prueba

Una clase de prueba es la clase de Federación de Comercio que se utilizará para ejecutar la prueba.

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

Aquí hay tres clases de prueba comunes:

  • nombre de clase: GTest

    • nombre corto: gtest
    • función: una prueba que ejecuta un paquete de prueba nativo en un dispositivo determinado.
    • opciones:
      • ruta-dispositivo-de-prueba-nativa: la ruta en el dispositivo donde se encuentran las pruebas nativas.
  • nombre de clase: Prueba de instrumentación

    • nombre corto: instrumentación
    • función: una prueba que ejecuta un paquete de prueba de instrumentación en un dispositivo determinado
    • opciones:
      • paquete: el nombre del paquete de manifiesto de la aplicación de prueba de Android que se ejecutará.
      • clase: el nombre de la clase de prueba que se ejecutará.
      • método: el nombre del método de prueba que se ejecutará.
  • nombre de clase: AndroidJUnitTest

    • función: una prueba que ejecuta un paquete de prueba de instrumentación en un dispositivo determinado utilizando android.support.test.runner.AndroidJUnitRunner. Esta es la forma principal de ejecutar una prueba de instrumentación.