testing - source - que es selenium webdriver
¿Cómo ejecutar pruebas GUI en un esclavo de Windows jenkins sin conexión de escritorio remota? (5)
Tengo un agente jenkins configurado en la ventana 7 y un servidor jenkins en Linux. Estoy ejecutando pruebas de GUI en el agente de Windows. Funciona bien si tengo conectada una conexión de escritorio remota, pero de lo contrario falla. Encontré este enlace, Jenkins en Windows y pruebas GUI sin RDC
Pero la solución provista allí es bastante vaga .. Parece que la única solución es hacer que el servidor Jenkins tenga una conexión de escritorio remota abierta en todo momento. Pero no puedo encontrar esa opción para hacerlo. ¿Alguien podría por favor enseñarme claramente cómo resolver este problema?
¡Muy apreciado!
Sus máquinas esclavas deben estar en un escritorio antes de que la prueba pueda ejecutarse correctamente. Tuvimos el mismo problema.
La solución fue hacer que la máquina de prueba se iniciara y se iniciara automáticamente en el escritorio. Para garantizar que la prueba SÓLO comenzara después de que el escritorio estuviera disponible, agregamos una tarea programada, configurada para ejecutarse al inicio de sesión del usuario, que lanzaría el esclavo Jenkins a través de Java Web Start. De esa forma, Jenkins solo vería al esclavo una vez que se ejecutara el escritorio. Después de eso, todo funcionó bien.
Esta es la respuesta ganadora a la pregunta a la que se vinculó y está muy claro qué hacer. Toda la instalación está fuera de Jenkins. Jason Swager describió cómo automatizó un usuario que inicia sesión en una máquina de escritorio de Windows y luego inicia el esclavo de Jenkins en la sesión de usuario.
Y ahora paso a paso:
1. asegúrate de tener una GUI disponible
La solución era hacer que la máquina de prueba se iniciara y se iniciara automáticamente en el escritorio
Configure un escritorio estándar de Windows para iniciar sesión automáticamente en un usuario específico cuando se inicie Windows. De esta forma, nadie necesita iniciar sesión físicamente en el escritorio. (Consulte Cómo activar el inicio de sesión automático en Windows 7 )
2. inicia el esclavo Jenkins
Debe iniciar el esclavo Jenkins dentro de esta configuración de usuario. De lo contrario, el esclavo Jenkins no tendrá acceso a los componentes de la interfaz de usuario de Windows (o, en otras palabras, no podrá interactuar con el escritorio).
Para garantizar que la prueba SÓLO comenzara después de que el escritorio estuviera disponible, agregamos una tarea programada, configurada para ejecutarse al inicio de sesión del usuario, que lanzaría el esclavo Jenkins a través de Java Web Start.
Por lo tanto, debe crear una tarea programada y configurarla para que inicie su cliente Jenkins utilizando Java Web Start .
3. usarlo
De esa forma, Jenkins solo vería al esclavo una vez que se ejecutara el escritorio. Después de eso, todo funcionó bien.
Cuando el esclavo está en línea, puede usarlo para ejecutar sus pruebas de UI.
Aún necesita usar RDP, pero en mi caso, podemos utilizar el loopback del RDP en la misma máquina virtual.
El procedimiento:
- En una VM, crea dos cuentas diferentes y crea el esclavo Jenkins para ambas cuentas.
Ahora tendrá dos esclavos Jenkins para dos cuentas en una VM
esclavo 1 - cuenta 1
esclavo 2 - cuenta 2
Habilite la guía de seguimiento de múltiples RDP https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html
En el esclavo 2 (con la cuenta 2), ejecute el comando rdp para conectarse al esclavo 1 (con la cuenta 1), como el siguiente Inicio / b "" "C: / RDP / rdp.exe" / v: 127.0.0.2 / domain: / / u: admin / p: xxxx / pantalla completa / w: 1920 / h: 1200
127.0.0.2 es muy importante, es una conexión de bucle invertido para RDP
Ponga el comando anterior en el trabajo de Jenkins con el nombre de "OpenRDP_ToVMXXX", y luego puede ejecutar cualquier prueba en el esclavo 1 con la GUI activada, disfrútelo.
Lo siguiente fue el truco para mí:
En Jenkins ejecuta el comando de Windows shell:
-
cmdkey /generic:TERMSRV/<servername> /user:<username> /pass:<password>
-
mstsc /v:<servername> /w:<width> /h:<height>
-
cd <path to your pom.xml>
-
<maven command>
(por ejemplo,mvn test -Dfiles_to_run=groupLaunch.xml
-
cmdkey /delete:TERMSRV/<servername>
Crea una sesión real de mstsc (Win-to-Win) con ancho y alto especificados en su sesión de mstsc virtual (Jenkins-to-Win) con tecnología de Jenkins.
Para solucionarlo, configure Windows Auto-Logon como explico aquí: https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130#606130
Luego, cree un lote de inicio para el esclavo Jenkins (colóquelo en el directorio de Jenkins), que abrirá su consola en el escritorio y permitirá que se ejecuten los trabajos de la GUI:
java -jar slave.jar -jnlpUrl http://{Your Jenkins Server}:8080/computer/{Your Jenkins Node}/slave-agent.jnlp
(slave.jar se puede descargar desde http: // {Your Jenkins Server}: 8080 / jnlpJars / slave.jar)
EDITAR: Si obtiene capturas de pantalla negras (cuando usa Selenium, por ejemplo), cree un archivo por lotes que desconecte el Escritorio remoto, en lugar de cerrar la sesión RDP con el botón X regular:
%windir%/system32/tscon.exe %SESSIONNAME% /dest:console
Probé las soluciones proporcionadas aquí, pero nada funcionó para mí. Al final, se me ocurrió una solución alternativa.
Abrí una conexión RDP a la VM en una VM diferente (VM2). Dejé la primera conexión abierta dentro de VM2 y me desconecté de ella.
Funcionó, pero eso implica tener dos máquinas virtuales disponibles.