web-dev-qa-db-fra.com

Comment exécuter des tests d'interface graphique sur un esclave jenkins Windows sans connexion au bureau à distance?

J'ai un agent Jenkins installé sur Windows 7 et un serveur Jenkins sous Linux. J'exécute des tests d'interface graphique sur l'agent Windows. Il fonctionne correctement si une connexion de bureau à distance est connectée, mais échoue sinon. J'ai trouvé ce lien, Jenkins sous Windows et tests d'interface graphique sans RDC

Mais la solution proposée est assez vague. Il semble que la seule solution consiste à faire en sorte que le serveur Jenkins dispose d’une connexion de bureau à distance ouverte à tout moment. Mais je ne peux pas trouver une telle option pour le faire. Quelqu'un pourrait-il m'apprendre clairement comment résoudre ce problème? 

Très appréciée!

29
Kelvin

Vos machines esclaves doivent être sur un bureau pour que le test puisse être exécuté correctement. Nous avons eu le même problème.

La solution consistait à ce que la machine de test démarre et se connecte automatiquement au bureau. Pour vous assurer que le test commence UNIQUEMENT après le bureau était disponible, nous avons ajouté une tâche planifiée, configurée pour s'exécuter lors de la connexion de l'utilisateur, cela lancerait l'esclave Jenkins via Java Web Start. De cette façon, Jenkins ne verrait l'esclave qu'une fois le bureau en marche. Après ça, tout a bien fonctionné.

C’est la réponse gagnante à la question à laquelle vous avez lié le lien et il est très clair sur ce qu’il faut faire. L'ensemble de l'installation est en dehors de Jenkins. Jason Swager a expliqué comment il automatisait un utilisateur en se connectant à un ordinateur Windows, puis en démarrant l'esclave Jenkins dans la session utilisateur.

Et maintenant, étape par étape:

1. assurez-vous d'avoir une interface graphique disponible

La solution consistait à faire démarrer la machine de test et à se connecter automatiquement au bureau.

Configurez un bureau Windows standard pour connecter automatiquement un utilisateur spécifique au démarrage de Windows. De cette façon, personne n’a besoin de se connecter physiquement au bureau. (voir Comment activer la connexion automatique sous Windows 7 )

2. démarrer esclave Jenkins

Vous devez démarrer l'esclave Jenkins avec ce paramètre utilisateur. Sinon, l'esclave Jenkins n'aura pas accès aux composants de l'interface utilisateur Windows (ou, en d'autres termes, ne pourra pas interagir avec le bureau).

Pour vous assurer que le test commence UNIQUEMENT après le bureau était disponible, nous avons ajouté une tâche planifiée, configurée pour s'exécuter lors de la connexion de l'utilisateur, cela lancerait l'esclave Jenkins via Java Web Start.

Vous devez donc créer une tâche planifiée et la configurer pour démarrer votre client Jenkins à l'aide de Java Web Start .

3. l'utiliser

De cette façon, Jenkins ne verrait l'esclave qu'une fois le bureau en marche. Après ça, tout a bien fonctionné.

Lorsque l'esclave est en ligne, vous pouvez l'utiliser pour exécuter vos tests d'interface utilisateur.

22
Peter Schuetze

La chose suivante a fait le tour pour moi:

Dans Jenkins, exécutez la commande shell Windows:

  • cmdkey /generic:TERMSRV/<servername> /user:<username> /pass:<password>
  • mstsc /v:<servername> /w:<width> /h:<height>
  • cd <path to your pom.xml>
  • <maven command> (par exemple mvn test -Dfiles_to_run=groupLaunch.xml
  • cmdkey /delete:TERMSRV/<servername>

Il crée une vraie session mstsc (Win-to-Win) avec la largeur et la hauteur spécifiées dans votre session mstsc virtuelle (Jenkins-to-Win) optimisée par Jenkins.

2
dred17

Comme les solutions ci-dessus semblaient un peu excessives, j'ai utilisé cette approche:

  1. Désactiver le service Jenkins
  2. Démarrez Jenkins à partir de la ligne de commande en utilisant Java -jar C:\Program Files (x86)\Jenkins\jenkins.war

Pour une raison quelconque, je devais installer tous les plugins et tout lors du démarrage de cette façon, donc je recommande de créer une sauvegarde, il existe un plugin pour cela. Bonne chance. :)

0
Daniel

J'ai essayé les solutions fournies ici mais rien ne fonctionnait pour moi. À la fin, j'ai trouvé une solution de contournement. 

J'ai ouvert une connexion RDP à VM dans un autre VM (VM2). J'ai laissé la première connexion ouverte à l'intérieur de VM2 et en suis déconnectée. 

Cela a fonctionné mais cela implique d'avoir deux machines virtuelles disponibles.

0