IU y aplicación de Exerciser Monkey

La herramienta Monkey es un programa que se ejecuta directamente en el emulador o dispositivo, y genera flujos pseudoaleatorios de los eventos del usuario, como clics, entradas táctiles o gestos, así como una variedad de eventos en el nivel del sistema. Puedes usar Monkey para probar las aplicaciones que estás desarrollando, de manera aleatoria pero repetible.

Descripción general

Monkey es una herramienta de línea de comandos que puedes ejecutar en cualquier instancia de emulador o en un dispositivo. Envía una secuencia pseudoaleatoria de eventos de usuario al sistema, que actúa como una prueba de esfuerzo en el software de la aplicación que estás desarrollando.

La herramienta Monkey incluye varias opciones, pero se dividen en cuatro categorías principales:

  • Opciones de configuración básica, como la cantidad de eventos para intentar
  • Restricciones operativas, como restringir la prueba a un único paquete
  • Tipos de eventos y frecuencias
  • Opciones de depuración

Cuando se ejecuta Monkey, genera eventos y los envía al sistema. También controla el sistema que se prueba y busca tres condiciones, que trata de manera especial:

  • Si restringiste Monkey para que se ejecute en uno o más paquetes específicos, controla los intentos de navegar a cualquier otro paquete y los bloquea.
  • Si tu aplicación falla o recibe algún tipo de excepción no controlada, Monkey se detendrá e informará el error.
  • Si tu aplicación genera un error que indica que la aplicación no responde, se detendrá Monkey y se informará el error.

Según el nivel de verbosidad que hayas seleccionado, también verás informes sobre el progreso de Monkey y los eventos que se generen.

Uso básico de Monkey

Puedes iniciar Monkey con una línea de comandos en tu máquina de desarrollo o desde una secuencia de comandos. Debido a que Monkey se ejecuta en el entorno del emulador/dispositivo, debes iniciarlo desde un shell en ese entorno. Para ello, antepone adb shell a cada comando o ingresa el shell y los comandos de Monkey directamente.

La sintaxis básica es la siguiente:

$ adb shell monkey [options] <event-count>

Si no hay opciones especificadas, Monkey se iniciará en un modo silencioso (no detallado) y enviará eventos a los paquetes instalados en el destino. Esta es una línea de comandos más común, que iniciará la aplicación y le enviará 500 eventos pseudoaleatorios:

$ adb shell monkey -p your.package.name -v 500

Referencia de opciones de comando

En la siguiente tabla, se muestran todas las opciones que puedes incluir en la línea de comandos de Monkey.

Categoría Opción Descripción
General --help Imprime una guía de uso simple.
-v Cada -v de la línea de comandos aumentará el nivel de verbosidad. El nivel 0 (el valor predeterminado) proporciona poca información además de la notificación de inicio, la finalización de la prueba y los resultados finales. El nivel 1 proporciona más detalles sobre la prueba a medida que se ejecuta, como los eventos individuales que se envían a las actividades. El nivel 2 proporciona información de configuración más detallada, como las actividades seleccionadas o no seleccionadas para la prueba.
Eventos -s <seed> Es el valor de origen para el generador de números pseudoaleatorios. Si vuelves a ejecutar Monkey con el mismo valor inicial, generará la misma secuencia de eventos.
--throttle <milliseconds> Inserta un retraso fijo entre eventos. Puedes usar esta opción para reducir la velocidad de Monkey. Si no se especifica, no hay demora y los eventos se generan lo más rápido posible.
--pct-touch <percent> Ajusta el porcentaje de eventos táctiles. (Los eventos táctiles son eventos ascendentes que se llevan a cabo en un solo lugar en la pantalla).
--pct-motion <percent> Ajusta el porcentaje de eventos de movimiento. (Los eventos de movimiento consisten en un evento descendente que se lleva a cabo en algún lugar de la pantalla, una serie de movimientos pseudoaleatorios y un evento ascendente).
--pct-trackball <percent> Ajusta el porcentaje de eventos de la bola de seguimiento. (Los eventos de la bola de seguimiento consisten en uno o más movimientos aleatorios, a veces seguidos de un clic).
--pct-nav <percent> Ajusta el porcentaje de eventos de navegación "básicos". (Los eventos de navegación consisten en pulsaciones hacia arriba, abajo, la izquierda o la derecha, como entrada desde un dispositivo de entrada direccional).
--pct-majornav <percent> Ajusta el porcentaje de eventos de navegación "principales". (Estos son eventos de navegación que en general generarán acciones dentro de la IU, como el botón central en un pad de 5 direcciones, la tecla de retroceso o la tecla de menú).
--pct-syskeys <percent> Ajusta el porcentaje de eventos clave del "sistema". (Estas son las teclas que generalmente se reservan para que las use el sistema, como Inicio, Atrás, Iniciar llamada, Finalizar llamada o los controles de volumen).
--pct-appswitch <percent> Ajusta el porcentaje de inicios de actividades. A intervalos aleatorios, Monkey emitirá una llamada a startActivity(), como una forma de maximizar la cobertura de todas las actividades dentro del paquete.
--pct-anyevent <percent> Ajusta el porcentaje de otros tipos de eventos. Este es un complemento para todos los demás tipos de eventos, como pulsaciones de teclas, otros botones menos utilizados en el dispositivo, etc.
Restricciones -p <allowed-package-name> Si especificas uno o más paquetes de esta manera, Monkey solo permitirá que el sistema visite actividades dentro de esos paquetes. Si la aplicación requiere acceso a actividades en otros paquetes (por ejemplo, para seleccionar un contacto), también deberás especificar esos paquetes. Si no especificas ningún paquete, Monkey permitirá que el sistema inicie actividades en todos los paquetes. Para especificar varios paquetes, usa la opción -p varias veces (una opción -p por paquete).
-c <main-category> Si especificas una o más categorías de esta manera, Monkey solo permitirá que el sistema visite actividades que se enumeren con una de las categorías especificadas. Si no especificas ninguna categoría, Monkey seleccionará las actividades enumeradas con la categoría Intent.CATEGORY_LAUNCHER o Intent.CATEGORY_MONKEY. Para especificar varias categorías, usa la opción -c varias veces (una opción -c por categoría).
Depuración --dbg-no-events Cuando se especifique, Monkey realizará el lanzamiento inicial en una actividad de prueba, pero no generará ningún otro evento. Para obtener mejores resultados, combina con -v una o más restricciones del paquete y un acelerador distinto de cero para mantener a Monkey activo durante 30 segundos o más. Esto proporciona un entorno en el que puedes supervisar las transiciones de paquetes invocadas por tu aplicación.
--hprof Si se establece, esta opción generará informes de perfiles inmediatamente antes y después de la secuencia de eventos de Monkey. Esto generará archivos grandes (~5 Mb) en datos/varios, por lo que debes usarla con cuidado. Para obtener información sobre el análisis de informes de generación de perfiles, consulta Cómo generar perfiles de rendimiento de tu app.
--ignore-crashes Normalmente, Monkey se detendrá cuando la aplicación falle o experimente algún tipo de excepción no controlada. Si especificas esta opción, Monkey continuará enviando eventos al sistema hasta que se complete el recuento.
--ignore-timeouts Normalmente, Monkey se detendrá cuando la aplicación experimente algún tipo de error de tiempo de espera, como el cuadro de diálogo "La aplicación no responde". Si especificas esta opción, Monkey continuará enviando eventos al sistema hasta que se complete el recuento.
--ignore-security-exceptions Normalmente, Monkey se detendrá cuando la aplicación experimente algún tipo de error de permisos; por ejemplo, si intentas iniciar una actividad que requiere ciertos permisos. Si especificas esta opción, Monkey continuará enviando eventos al sistema hasta que se complete el recuento.
--kill-process-after-error Normalmente, cuando Monkey se detiene debido a un error, la aplicación que falló se deja en ejecución. Si se configura esta opción, indicará al sistema que detenga el proceso en el que haya ocurrido el error. Ten en cuenta que, si la finalización es normal (correcta), no se detendrán los procesos iniciados, y el dispositivo simplemente quedará en el último estado después del evento final.
--monitor-native-crashes Observa e informa los bloqueos que se producen en el código nativo del sistema Android. Si se establece --kill-process-after-error, se detendrá el sistema.
--wait-dbg Detiene la ejecución de Monkey hasta que agrega un depurador.