Escribe un ejecutor de pruebas de Tradefed

En esta página, se describe cómo escribir un nuevo ejecutor de pruebas en Tradefed.

Información general

Si te interesa conocer el lugar de los ejecutores de pruebas en la arquitectura de Tradefed, consulta Estructura de un ejecutor de pruebas.

Este no es un requisito previo para escribir un nuevo ejecutor de pruebas. los ejecutores de pruebas escrita de forma aislada.

Mínimo mínimo: Implementa la interfaz

Para calificar como ejecutor de pruebas de Tradefed, lo mínimo es implementar las Interfaz de IRemoteTest y, de manera más específica, el método run(TestInformation testInfo, ITestInvocationListener listener).

Este método es el que invoca el agente cuando se usa el ejecutor de pruebas similar a un ejecutable de Java.

Cada parte de ese método se considera parte de la ejecución del ejecutor de pruebas.

Informa los resultados del ejecutor de pruebas

El método run en la interfaz base otorga acceso a un objeto de escucha de escribe ITestInvocationListener. Este objeto es la clave para los informes estructurados resultados del ejecutor de pruebas al agente.

Cuando se informan resultados estructurados, un ejecutor de pruebas tiene las siguientes propiedades:

  • Informa una lista adecuada de todas las pruebas que se ejecutaron, el tiempo que demoraron y si pasaron, fallaron o alcanzaron otros estados de manera individual.
  • Informa las métricas asociadas con las pruebas, si corresponde, por ejemplo las métricas del tiempo de instalación.
  • Se adaptan a la mayoría de las herramientas de infraestructura; por ejemplo, mostrar resultados y las métricas, etcétera.
  • Suele ser más fácil de depurar, ya que hay un seguimiento más detallado del ejecución.

Dicho esto, informar resultados estructurados es opcional. un ejecutor de pruebas solo quieres evaluar el estado de toda la ejecución como PASSED o FAILED sin ningún detalle de la ejecución real.

Se puede llamar a los siguientes eventos en el objeto de escucha para notificar al aprovechamiento de la progreso actual de las ejecuciones:

  • testRunStarted: Notificar el comienzo de un grupo de casos de prueba que se relacionan entre sí.
    • testStarted: Notificar el comienzo del inicio de un caso de prueba.
    • testFailed/testIgnored: Notifica el cambio de estado del caso de prueba. en curso. Se considera un caso de prueba sin ningún cambio de estado aprobado.
    • testEnded: Notifica el final del caso de prueba.
  • testRunFailed: Notifica el estado general del grupo de casos de prueba. de la ejecución es un error. Una ejecución de prueba puede ser aprobada o fallida. independientemente de los resultados de los casos de prueba, según ejecución esperaba. Por ejemplo, un objeto binario que ejecuta varios casos de prueba podría informar todos los casos de prueba aprobados, pero con un código de salida de error (para cualquier razones: archivos filtrados, etc.).
  • testRunEnded: notifica al final del grupo de casos de prueba.

Mantener y garantizar el orden adecuado de las devoluciones de llamada es la responsabilidad del implementador del ejecutor de pruebas, por ejemplo, garantizar que Se llama a testRunEnded en caso de excepción mediante una cláusula finally.

Las devoluciones de llamada de los casos de prueba (testStarted, testEnded, etc.) son opcionales. Una prueba podría ocurrir sin ningún caso de prueba.

Puedes notar que esta estructura de eventos se inspira en estructura típica de JUnit. Esto es intencional para acercarse a algo básico que los desarrolladores sobre las que generalmente tienes conocimientos.

Informa registros desde el ejecutor de pruebas

Si escribes tu propio ejecutor o clase de prueba de Tradefed, implementarás IRemoteTest; y obtén una ITestInvocationListener a través del método run(). Este objeto de escucha se puede usar para registrar archivos de la siguiente manera:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

Cómo realizar pruebas con un dispositivo

La interfaz mínima anterior permite ejecutar pruebas muy sencillas que están aisladas y no requieren ningún recurso en particular, como las pruebas de unidades de Java.

Los escritores de pruebas que quieran pasar al siguiente paso de prueba de dispositivos necesitarán las siguientes interfaces:

  • Prueba de dispositivo permite recibir el objeto ITestDevice que representa al dispositivo y proporciona la API para interactuar con ella.
  • IBuildReceiver. permite que la prueba obtenga el objeto IBuildInfo creado en el paso del proveedor de compilación que contiene toda la información y los artefactos relacionados con la configuración de la prueba.

Por lo general, los ejecutores de pruebas están interesados en estas interfaces artefactos relacionados con la ejecución, como archivos adicionales, y obtener la dispositivo en prueba al que se orientará la ejecución.

Realiza pruebas con varios dispositivos

Tradefed admite la ejecución de pruebas en varios dispositivos al mismo tiempo. Este es útil cuando se prueban componentes que requieren una interacción externa, como un el teléfono y el reloj.

Para escribir un ejecutor de pruebas que pueda usar varios dispositivos, necesitarás para implementar IMultiDeviceTest, que te permitirá recibir un mapa de ITestDevice a IBuildInfo que contenga la lista completa de representaciones de dispositivos y su información de compilación asociada.

Siempre se llamará al método set de la interfaz antes del método run, por lo que Se supondrá que la estructura estará disponible cuando se llame a run.

Pruebas al tanto de sus configuraciones

Es posible que algunas implementaciones del ejecutor de pruebas necesiten información sobre la configuración general. para funcionar correctamente; por ejemplo, algunos metadatos sobre la invocación o que target_preparer se ejecutó antes, etcétera.

Para ello, un ejecutor de pruebas puede acceder al objeto IConfiguration de la que es parte y en la que se ejecuta. Consulta la objeto de configuración descripción para obtener más detalles.

Para la implementación del ejecutor de pruebas, deberás implementar el IConfigurationReceiver. para recibir el objeto IConfiguration.

Ejecutor de pruebas flexible

Los ejecutores de pruebas pueden proporcionar una forma flexible de ejecutar sus pruebas si tienen control detallado sobre ellas, por ejemplo, un ejecutor de pruebas JUnit puede ejecuta cada prueba de unidades.

Esto permite que el agente y la infraestructura más grandes aprovechen ese control preciso que los usuarios ejecuten parcialmente el ejecutor de pruebas mediante el filtrado.

La compatibilidad con filtros se describe en el Interfaz ITestFilterReceiver. que permite recibir conjuntos de filtros include y exclude para las pruebas que debería o no ejecutarse.

Nuestra convención es que una prueba se ejecutará en IFF y coincida con uno o más de los incluir filtros AND no coincide con ninguno de los filtros de exclusión. Si no hay ninguna, incluya se proporcionan filtros, se deben ejecutar todas las pruebas siempre que no coincidan los filtros de exclusión.