Cómo crear una prueba de rendimiento para el launch
Libranner Santos
08 mayo, 20244min de lectura
Es crucial medir el tiempo que lleva lanzar tu aplicación, ya que esto proporciona parámetros base en los que puedes confiar. En caso de que se introduzca código que afecte estos parámetros, necesitarás una forma de detectar el cambio. Una de las formas más confiables es mediante la creación de pruebas de rendimiento.
Requisitos a la hora de crear una prueba de rendimiento de inicialización (Launch Test)
Para crear una prueba de rendimiento necesitarás lo siguiente:
- Un dispositivo físico, preferiblemente, el dispositivo más antiguo que hayas decidido soportar.
- Idealmente, simular (mock) la información que necesites en el momento de inicializar tu app. Por ejemplo, peticiones a un servidor web.
- Crear un target para pruebas de interfaz de usuario.
- Crear la prueba unitaria.
- Establecer los parámetros base.
Creando la prueba
Para crear el target para pruebas de interfaz de usuario (en caso de no tenerlo), debes ir a File > New > Target, y seleccionar UI Testing Bundle:
Esto agregará una carpeta con el nombre de tu proyecto más el texto UITests, la cual contiene dos archivos con código de ejemplo para la creación de pruebas.
Dentro del target, crea un nuevo archivo para escribir pruebas o dentro del archivo que termina en UITests, escribe lo siguiente:
func testLaunchPerformance() throws {// 1measure(// 2metrics: [XCTApplicationLaunchMetric()]) {// 3XCUIApplication().launch()}}
El código debe estar dentro de una clase que herede de XCTestCase
. Con este código:
- Utilizamos
measure(metrics:block:)
para indicar que queremos evaluar métricas. Este contiene dos parámetrosmetrics
, donde pasamos un arreglo de todas las métricas que queremos tener en cuenta yblock
, donde pasamos un closure con la operación que queremos medir. - Pasamos
XCTApplicationLaunchMetric
como parámetro enmetrics
para indicar que deseamos las métricas relacionadas con la duración de la inicialización de nuestra aplicación. - Lanzamos el app.
La primera vez que ejecutes la prueba, verás un ícono a la izquierda del código. Si haces click, verás algo como esto:
En este diálogo, podemos establecer la línea de base para nuestra prueba de rendimiento. Por defecto, la prueba aceptará una desviación estándar del 10%. La prueba se ejecutará seis veces para calcular las métricas utilizando el promedio.
Presionamos Set Baseline para guardar los datos y usar la medida obtenida para las ejecuciones futuras.
Cómo obtener detalles adicionales sobre las ejecuciones
Si deseas ver más información sobre los resultados, puedes acceder abriendo el Report Navigator y seleccionando Tests:
Luego, haz doble click sobre el nombre de la prueba y verás tres pestañas donde puedes encontrar más información: Activities, Runs y Metrics.
En Metrics, encontrarás detalles sobre los dispositivos utilizados y la duración de la prueba:
En Actividades, verás detalles independientes de cada ejecución de la prueba:
En Runs, encontrarás un resumen de las ejecuciones:
Recomendaciones para realizar pruebas de inicialización de nuestras apps
Algunas recomendaciones para poder sacar lo mejor de nuestras pruebas de rendimiento:
- Reinicia el dispositivo y luego permite que el sistema termine los procesos relacionados al sistema operativo, esperando unos tres minutos. Para evitar que procesos no relacionados al app afecten los resultados.
- Habilita el Modo Avión o simula las peticiones de red.
- Utiliza una cuenta de iCloud que no cambie o no la utilices.
- Utiliza una versión de release de la aplicación.
- Es importante tener en cuenta que lo ideal es ejecutar estas pruebas en dispositivos físicos, ya que solo hacerlo en el simulador no es una prueba fiable, debido a que los recursos disponibles no son los mismos.
Conclusión
Con esto, ya tenemos nuestra prueba de rendimiento, la cual garantizará que no introduzcamos regresiones importantes en la inicialización de nuestra aplicación. Es una buena práctica crear estas pruebas para asegurar que no afectemos la experiencia del usuario mientras agregamos funcionalidades a la aplicación.