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:

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:

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)
- Install .NET Core 6.0.x SDK
- Ensure that your
MSBuildSDKsPath
environment variable is pointing to .NET Core 6.0.x SDK. - 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:

Los comandos a ejecutar son:
A) Clonar el repositorio:
# Clone GitHub repo
git clone https://github.com/microsoft/PowerApps-TestEngine.git

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

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:

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

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»:

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»

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:

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.

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:

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á:

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):

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:

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"

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.

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:

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

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

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:

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:

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!