Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo informar métricas o datos de una prueba Tradefed

Esta página describe cómo informar métricas junto con los resultados de la prueba al escribir una prueba en Tradefed.

El beneficio de iniciar sesión a través de la canalización de Tradefed es encontrar sus métricas junto con sus resultados funcionales. El registro de métricas se puede realizar de forma muy natural dentro de las pruebas, lo que hace que sea conveniente para los redactores de pruebas agregar más instrumentación.

DeviceTestCase - estilo JUnit3

Si la prueba se extiende DeviceTestCase en una especie de estilo JUnit3 de prueba, puede llamar al método addTestMetric(String key, String value) desde el interior de los casos de prueba para informar de una métrica. Esto se puede llamar varias veces siempre que la clave sea única.

Ejemplo:

    public static class TestMetricTestCase extends DeviceTestCase {

        public void testPass() {
            addTestMetric("key1", "metric1");
        }

        public void testPass2() {
            addTestMetric("key2", "metric2");
        }
    }

Si desea registrar un archivo que esté disponible en los result_reporters , puede llamar al método addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) desde el interior de los casos de prueba para informar de un archivo para registrar.

Ejemplo:

    public static class TestLogTestCase extends DeviceTestCase {

        public void testPass() {
            try (InputStreamSource source = getDevice().getScreenshot()) {
                addTestLog("screenshot", LogDataType.PNG, source);
            }
        }
    }

TestCase - prueba regular de JUnit3

Si desea informar métricas dentro Tradefed de una clase regular JUnit3 TestCase, se necesita ser convertido a un MetricTestCase vez que es exactamente la misma clase con un método adicional: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner - estilo JUnit4

Si la prueba de estilo junit4 se está ejecutando con DeviceJUnit4ClassRunner , entonces también puede registrar métricas dentro de un caso de prueba (en el interior @test) a ser informado por Tradefed. Usted tendrá que utilizar TestMetrics reglas para reportar sus métricas.

Ejemplo:

    @RunWith(DeviceJUnit4ClassRunner.class)
    public static class Junit4TestClass {

        @Rule
        public TestMetrics metrics = new TestMetrics();

        @Test
        public void testPass5() {
            // test log through the rule.
            metrics.addTestMetric("key", "value");
        }

        @Test
        public void testPass6() {
            metrics.addTestMetric("key2", "value2");
        }
    }

Con el fin de archivos de informe, que va a utilizar el TestLogData regla para informar de ello.

Ejemplo:

    @RunWith(DeviceJUnit4ClassRunner.class)
    public static class Junit4TestClass {

        @Rule
        public TestLogData logs = new TestLogData();

        @Test
        public void testPass5() {
            // test log through the rule.
            try (InputStreamSource source = getDevice().getScreenshot()) {
                logs.addTestLog("screenshot", LogDataType.PNG, source);
            }
        }
    }

IRemoteTest: prueba pura de comercio

Si va a escribir su propia clase de prueba Tradefed o un corredor se le implemement IRemoteTest y obtener una ITestInvocationListener a través del run() método. Este oyente se puede utilizar para registrar métricas de la siguiente manera:

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

Recopiladores de métricas comerciales

Tradefed proporciona un dedicado metrics_collector objeto de métricas se acumulan en paralelo de las pruebas.

En el lado del anfitrión

BaseDeviceMetricCollector se puede implementar para recoger cualquier métricas desde el lado del anfitrión y reportarlos como parte de la invocación de prueba. Ya hay varios recopiladores genéricos disponibles para diferentes casos de uso, pero siempre agradecemos nuevas contribuciones.

Para especificar el recopilador que se utilizará en su invocación de Tradefed, simplemente debe agregar el objeto a su configuración XML de Tradefed:

Ejemplo:

  <metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
      <option name="categories" value="freq"/>
  </metrics_collector>

Algunos colectores existentes en la actualidad: * TemperatureCollector que recoge la temperatura periódicamente durante la prueba de funcionamiento. * AtraceCollector que recoge utilizando 'atrace' para cada caso de prueba.

En el lado del dispositivo

Cuando se ejecutan pruebas del lado del dispositivo (Instrumentaciones, pruebas de UIAutomator, etc.), tener un recopilador en el lado del host que recopila de forma asíncrona puede no ser ideal. Por ejemplo, una captura de pantalla tomada de forma asincrónica probablemente perderá la pantalla deseada y será inútil.

Para cumplir con estos casos de uso, existe una versión del lado del dispositivo de nuestros recopiladores y se puede usar en cualquier instrumentación 'AndroidJUnitRunner'. BaseMetricListener se puede implementar con el fin de informar automáticamente las métricas que se recogen de una manera totalmente compatible con la tubería de informes Tradefed.

Si está utilizando el ' AndroidJUnitTest corredor' de Tradefed, sólo tiene que especificar la opción de línea de comandos para tener su colector corriendo con sus pruebas:

  --device-listeners android.device.collectors.ScreenshotListener

PRECAUCIÓN: Para que las clases del recopilador se resuelvan en tiempo de ejecución, es muy probable que su APK de instrumentación deba incluirlas estáticamente agregando a su archivo MAKE lo siguiente:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

Las contribuciones a los recopiladores del lado del dispositivo también son bienvenidas.

Consideración especial para suites

Por suites como CTS que tienen un alto nivel de configuración ejecución de algunas configuraciones de módulos, no hay necesidad de especificar metrics_collector en cada configuración del módulo ( AndroidTest.xml ). De hecho, está prohibido.

Para asegurar que se aplica la colección métrica por igual a cada módulo, sólo la configuración de nivel superior (por ejemplo, cts.xml ) puede especificar metrics_collector como se explicó anteriormente. Estos recopiladores se aplicarán y ejecutarán en cada módulo de la suite.

¿Cómo recopilar archivos de registro de dispositivos de un módulo?

Hay una configuración disponible para que una prueba del lado del dispositivo notifique que se deben recopilar algunos archivos.

AndroidTest.xml puede especificar un colector que buscará el archivo en el dispositivo y tirar de ellos.

  <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
      <!-- repeatable: Pattern of key of a FILE we listen on that should be pulled -->
      <option name = "pull-pattern-keys" value = "ScreenshotListener_.*" />

      <!-- repeatable: The key of the DIRECTORY to pull -->
      <option name = "directory-keys" value = "<example-key: /sdcard/atrace_logs>" />
  </metrics_collector>

Al especificar estos patrones y claves, el recopilador, si ve la clave, intentará extraer y registrar el archivo asociado.

Para que se generen estas claves, una prueba del lado del dispositivo (instrumentación) debe especificar el archivo que debe registrarse. Se realiza de manera similar al lado del host (descrito anteriormente).

  1. Añadir el collector-device-lib para el APK de prueba en los archivos de make:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. Utilice la regla @ que proporcionamos para los archivos de registro:
    @RunWith(AndroidJUnit4.class)
    public static class Junit4TestClass {

        @Rule
        public TestLogData logs = new TestLogData();

        @Test
        public void testPass5() {
            // test log through the rule.
            File logFile = new File("whatever");
            logs.addTestLog("KEY", logFile);
        }
    }

La KEY nombre en el ejemplo anterior es el nombre con el que se informará el archivo. Este es el nombre que debe coincidir en el FilePullerDeviceMetricCollector de lograr que se introduce automáticamente. debe ser un nombre único.

NOTA: Una vez que se extrae el archivo, FilePullerDeviceMetricCollector limpia de forma automática desde el dispositivo.

¿Dónde encontrar las métricas?

Depende de la result_reporter especificado en su configuración XML.