He necesitado integrar la ejecución de tests de interfaz con CodedUI Test para una aplicación de WPF con Jenkins.
El problema es que para poder ejecutar los test de interfaz es necesario una sesión interactiva iniciada. Con esa sesión se ejecutarán los test de interfaz que necesitan interactuar con el ratón y teclado. Lamentablemente esta sesión está activa mientras tengas por ejemplo una conexión por escritorio remoto (RDC) abierta, pero claro, no queremos tener que abrir una RDC para pasar los tests.
Pues ha sido duro pero lo he conseguido, y aquí os dejo los pasos que he hecho para hacerlo
Nota: El Jenkins que hemos usado NO se estaba ejecutando como servicio así que si tienes Jenkins corriendo como servicio no se si esto te puede ayudar.
1- Configurar el Autologon for Windows para una cuenta local que sea administrador de la máquina. De manera que en cuanto se encienda la máquina, el usuario inicie la sesión automáticamente.
2- Añadir una tarea programada (Task Schedule) para cuando el usuario inicie sesión. Debe ejecutar el comando necesario para arrancar Jenkins desde la consola de comandos. Por ejemplo: java -jar “C:Program Files (x86)Jenkinsjenkins.war”
3- En esa tarea debemos marcar la opción “Run with higher privileges”:

4- Añadir un paso en la configuración de la build de Jenkins que ejecute un comando de batch:
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do ( %windir%System32tscon.exe %%s /dest:console )
Este comando lo que hace es si hay alguna conexión RDC abierta, la cierra y devuelve el control a la sesión que se abrió cuando arrancó la máquina. De manera que se pueden ejecutar los test de interfaz en una sesión interactiva.
Ahora cada vez que se lanze la build, se va a asegurar de dejar la sesion de usuario interactiva lista para que se ejecuten los test de interfaz sin problemas. Es decir, si hay alguien conectado por Remote Desktop y se lanza la build, se va a cerrar la conexión de ese usuario remoto.
Si conocéis alguna manera “más mejor” de hacerlo, compartidla
Happy testing!
Juan María Laó Ramos
Fuentes:
- Jenkins on Windows and GUI Tests without RDC
- Disconnecting From Remote Desktop While Running Automated Tests
Recursos: Autologon, CodedUI, Jenkins