La semana pasada (5 de Octubre) se anunció la preview de un nuevo framework para la automatización de pruebas para nuestras aplicaciones de Power Apps denominado Test Engine: https://powerapps.microsoft.com/en-us/blog/introducing-test-engine-an-open-platform-for-automated-testing-of-canvas-apps/
Este motor de pruebas utiliza Playwright para orquestar las pruebas y, de momento, sólo está disponible para hacer pruebas de aplicaciones Canvas, aunque en el futuro se quieren incluir el resto de tipos de aplicación de Power Apps.
Se trata de un proyecto de código abierto que está alojado en GitHub y que además incluye una serie de ejemplos que os ayudarán a poneros en marcha con este nuevo motor de pruebas.

Test Engine utiliza PowerFx para crear los casos de pruebas, por lo que os resultará familiar si habéis utilizado el Test Studio que hay ahora mismo en el portal de creación de Power Apps:

Test Studio

Se utilizarán los mismos comandos que en este Test Studio para definir nuestros casos de pruebas: Select, Assert, SetProperty e Index y sólo tendréis que incluirlos en un fichero YAML para configurar vuestros ciclos de pruebas.
De hecho, está previsto que próximamente se incluya un botón en el Test Studio que os permita descargaros vuestros planes de pruebas y los podáis utilizar con Test Engine. Hasta entonces, se pueden obtener descomprimiendo el zip de la aplicación (msapp) y convirtiendo el fichero JSON de las pruebas a Yaml mediante un comando que se ejecuta en la consola de PowerShell. (El comando lo podéis encontrar dentro de la ayuda que hay en el repositorio de GitHub.)

Además, Test Engine permite tomar capturas de pantalla (screenshot) para registrar el aspecto que tiene la app en cada momento y también se puede establecer que se cree un fichero de vídeo con la grabación de todo el caso de prueba ejecutado. De esta forma, dejaréis constancia del comportamiento que tenía la app en cada una de las ejecuciones de pruebas.
Aquí tenéis un ejemplo de un caso de pruebas en un fichero Yaml:

Test Case

A continuación os muestro cómo podéis utilizar este motor de pruebas ya que hay algún paso de las instrucciones que a mí no me resultó del todo intuitivo.
Las instrucciones oficiales las tenéis en el siguiente enlace: https://github.com/microsoft/PowerApps-TestEngine/blob/main/README.md

PASO 1: Instalación

Lo primero que hay que hacer es instalar los siguientes componentes en vuestro equipo (si no los tenéis ya)

  1. Install .NET Core 6.0.x SDK
  2. Ensure that your MSBuildSDKsPath environment variable is pointing to .NET Core 6.0.x SDK.
  3. Make sure PowerShell is installed.

Después tenéis que clonar la solución desde GitHub y generarla, para ello, se usan los siguientes comandos en la consola de PowerShell (ejecutada como usuario administrador).

NOTA: El proyecto se clonará en la ruta desde donde ejecutéis los comandos de PowerShell.

En mi caso, creé una nueva carpeta llamada «\test\TestEngine» en mi unidad C y me situé en ella en la consola de PowerShell:

Ruta donde instalar el Test Engine

Los comandos a ejecutar son:

A) Clonar el repositorio:

# Clone GitHub repo 
git clone https://github.com/microsoft/PowerApps-TestEngine.git
Clonar el repositorio

B) Acceder a la carpeta raíz del motor y generar el build

# Change to the PowerAppsTestEngine folder
cd PowerApps-TestEngine\src\PowerAppsTestEngine

# Build
dotnet build
Build

C) Instalar Browsers Playwright

Para el último comando, acceded a la ruta donde esté el script playwright.ps1 para ver cuál es la versión de .NET. En mi caso era la net6.0 como podéis ver en la siguiente imagen:

Instalación de playwright

Por lo que el comando de PowerShell será:

# Install browsers required by Playwright - replace <net-version> with actual output folder name, eg. net6.0.
.\bin\Debug\net6.0\playwright.ps1 install
Install browsers Playwright

PASO 2: Probar un ejemplo

Ahora es el momento de hacer una prueba de los ejemplos que vienen en la carpeta samples de la ruta \PowerApps-TestEngine\samples

Para este artículo, voy a hacer la prueba del «calculator»:

Ficheros del ejemplo calculator

Como veréis, el ejemplo se compone de dos ficheros:

  • Fichero zip que contiene la solución. En este caso la app «Calculator»
  • Fichero yaml (testPlan.fx.yaml) que contiene el plan de pruebas a ejecutar

PASO 2A: Importar la solución

El primer paso será importar la solución en uno de nuestros entornos. Para ello, accedemos al portal de Power Apps, nos ubicamos en el entorno donde queramos alojar nuestra app, accedemos a la zona de Soluciones y seleccionamos «Importar solución»

Import solution «calculator»

Una vez importada, podéis acceder a ella y ejecutar la aplicación canvas para ver qué aspecto tiene. En el caso del Calculator, esta es la app:

Calculator app

PASO 2B: Crear el fichero de configuración del test

Ahora es el momento de generar un fichero que configure nuestro test. Para ello, nos debemos situar en la ruta ‘\PowerApps-TestEngine\src\PowerAppsTestEngine\‘ y crear un fichero llamado config.dev.json.

Fichero config.dev.json

NOTA: En esa ruta encontraréis un fichero config.json con un ejemplo de los parámetros a incluir en el nuevo fichero.

Así, el fichero config.dev.json que habéis creado deberá contener los siguiente parámetros:

{
"environmentId": "",
"tenantId": "",
"testPlanFile": "",
"outputDirectory": ""
}

Los parámetros del environmentId y tenantID los podéis obtener utilizando la opción de «Session details» que hay en las Settings del portal de Power Apps:

Parameters

El parámetro testPlanFile deberá indicar la ruta donde está el fichero Yaml de configuración del caso de prueba (es decir, en nuestro caso, el fichero testPlan.fx.yaml que estaba en la ruta de samples\calculator), por lo que este parámetro, en mi caso, será: ../../samples/basicgallery/testPlan.fx.yaml.

Finalmente, el parámetro outputDirectory indicará la ruta donde generar los resultados. En mi caso, creé una carpeta denominada «ESMoutputs» que estaba en el mismo nivel que la carpeta samples, por lo que mi parámetro es: ../../ESMoutputs.

Por lo que mi fichero de configuración será:

config.dev.json

PASO 2C: Configurar los usuarios

Entramos ahora en la parte de configuración del usuario con el que se ejecutará el test. Aquí yo tuve algún problemilla porque no estaba demasiado bien explicado en las instrucciones originales.

En primer lugar, tenéis que tener en cuenta que, ahora mismo, el Test Engine no admite MFA, por lo que tenéis que utilizar usuario que no tengan activada el doble factor de autenticación.

Tampoco se pueden guardar las credenciales en ficheros, por lo que hay que utilizar variables de entorno de PowerShell.

Tendréis que abrir el fichero del plan de pruebas (testPlan.fx.yaml) y veréis que en la parte superior se establece qué usuario va a ejecutar la prueba (persona):

persona: User1

Esto significa que la prueba la va a ejecutar el usuario User1.

Además, en la parte inferior se indica qué variables de entorno se han de escoger para cada uno de los usuarios:

environmentVariables

Esto significa que las credenciales del User1 estarán guardadas en las variables de entorno «user1Email» y «user1Password»

Por tanto, deberemos generar las variables de entorno en PowerShell de la siguiente manera:

$env:user1Email = "enrique.sanchez@domain.onmicrosoft.com"
$env:user1Password = "your password"
PowerShell Environment Variables

PASO 3: Ejecutar el Test

Ahora ya estamos en condiciones de ejecutar el plan de pruebas. Para ello, debemos ejecutar el siguiente comando:

# Run test
dotnet run

Al ejecutarlo, podéis encontraros con este error:

System.InvalidOperationException: Errors: Error 48-49: Caracteres inesperados. La fórmula contiene "ParenClose" donde se esperaba "Error".
Error 48-49: Caracteres inesperados. Se usan caracteres en la fórmula de forma inesperada.
Error al ejecutar el test

Como podéis ver en el hilo que hay en GitHub, este error se produce porque los test que hay en el fichero testPlan.fx.yaml están con la notación de US y en la configuración española utilizamos otra nomenclatura (Referencia). Por ejemplo, nosotros utilizamos dos puntos y coma para separar las instrucciones, mientras que en US utilizan uno.

NOTA: Como podéis ver en ese hilo de GitHub, la velocidad con la que nos dieron una solución a los que reportamos este problema fue increíble.
De hecho, ya han comentado que van a incluir próximamente la localización para evitar estos problemas.

Para corregir el error, tenéis que acudir al fichero «testPlan.fx.yaml» y, en la parte de los «testSteps» y hacer dos modificaciones:

  • Reemplazar las comas por punto y coma.
  • Reemplazar los puntos y coma por doble punto y coma:
testCases

Una vez reemplazados estos signos, ejecutamos de nuevo el test y observaremos que ya se ejecuta correctamente.

Run Ok

Ahora podemos ver los resultados en una carpeta que se habrá generado dentro de la ubicación que escogimos para los outputs:

Resultados del test

Dentro de ella tendremos los ficheros con todos los logs generados y un fichero trx con el resultado de cada test. Por ejemplo, para el caso de test denominado «Check Addition» tenemos el siguiente resultado:

Results.trx

También encontraremos las capturas de pantalla que solicitamos en los testCases. En nuestro ejemplo, se solicitaba una captura al principio del ciclo de prueba y otra al final:

Screenshots

Además, como en los parámetros del fichero indicamos que queríamos un vídeo del test (recordVideo: true) en la sección testSettings, también podemos observar un vídeo con la grabación de toda la prueba. El vídeo es con extensión webm, pero aquí os dejo un GIF para que veáis un poco cómo es este vídeo:


Aquí conlcuyo este artículo sobre el Test Engine. Como habréis visto, las posibilidades para hacer pruebas masivas de nuestras aplicaciones son enormes ya que, mientras no cambiemos los nombres de los controles, aunque hagamos modificaciones en la app, los test seguirán siendo váidos.

Espero que os haya gustado el artículo.

¡Muchas gracias por leerme!

Anuncio publicitario

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s