首页 文章

如何在没有远程桌面连接的情况下在jenkins windows slave上运行GUI测试?

提问于
浏览
26

我在Windows 7上设置了jenkins代理,在Linux上安装了jenkins服务器 . 我正在Windows代理上运行GUI测试 . 如果我连接了远程桌面连接,它运行正常,但否则失败 . 我找到了这个链接,Jenkins on Windows and GUI Tests without RDC

但是提供的解决方案非常模糊 . 似乎唯一的解决方案是以某种方式使Jenkins服务器始终打开远程桌面连接 . 但我找不到这样做的选择 . 谁能明确教我如何解决这个问题?

非常感激!

5 回答

  • 5

    在测试可以正常运行之前,您的从属计算机必须位于桌面上 . 我们遇到了同样的问题 . 解决方案是让测试机器启动并自动登录到桌面 . 为确保测试仅在桌面可用后启动,我们添加了一个计划任务,设置为在用户登录时运行,该任务将通过Java Web Start启动Jenkins从站 . 这样,一旦桌面运行,Jenkins只会看到奴隶 . 在那之后,一切都很好 .

    这是您所关联的问题的获胜答案,并且非常清楚该怎么做 . 整个设置在Jenkins之外 . Jason Swager描述了他如何自动登录到桌面计算机的用户,然后在用户会话中启动Jenkins slave .

    现在一步一步:

    1.确保您有一个可用的GUI

    解决方案是让测试机器启动并自动登录到桌面

    配置标准Windows桌面以在Windows启动时自动登录特定用户 . 这样,没有人需要物理登录桌面 . (见How to turn on automatic logon in Windows 7

    2.启动詹金斯奴隶

    您需要在此用户设置中启动Jenkins从站 . 否则,Jenkins slave将无法访问Windows UI组件(换句话说,无法与桌面交互) .

    为确保测试仅在桌面可用后启动,我们添加了一个计划任务,设置为在用户登录时运行,该任务将通过Java Web Start启动Jenkins从站 .

    所以你必须create a scheduled task并配置它来启动你的Jenkins client using Java Web Start .

    3.使用它

    那样,Jenkins只会在桌面运行后看到奴隶 . 在那之后,一切都很好 .

    当从属设备在线时,您可以使用它来运行UI测试 .

  • 20

    要解决此问题,请按照我在此处解释的那样设置Windows自动登录:https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130#606130

    然后为Jenkins slave创建一个启动批处理(将它放在Jenkins目录中),这将在桌面上启动它的控制台,并允许GUI作业运行:

    java -jar slave.jar -jnlpUrl http://{Your Jenkins Server}:8080/computer/{Your Jenkins Node}/slave-agent.jnlp
    

    (slave.jar可以从http:// 下载:8080 / jnlpJars / slave.jar)

    EDIT : 如果您正在获取 black screenshots (例如,在使用Selenium时),请创建一个断开远程桌面的批处理文件,而不是使用常规X按钮关闭RDP会话:

    %windir%\system32\tscon.exe %SESSIONNAME% /dest:console
    
  • 2

    以下事情对我有用:

    在Jenkins中执行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> (例如 mvn test -Dfiles_to_run=groupLaunch.xml

    • cmdkey /delete:TERMSRV/<servername>

    它在由Jenkins提供支持的虚拟mstsc会话(Jenkins-to-Win)中创建具有指定宽度和高度的真实mstsc会话(Win-to-Win) .

  • 0

    我尝试了这里提供的解决方案,但没有任何对我有用 . 最后,我想出了一个解决方法 .

    我在不同的VM(VM2)中打开了与VM的RDP连接 . 我让第一个连接在VM2内部打开并与之断开连接 .

    它工作但这意味着有两个虚拟机可用 .

  • 0

    您仍然需要使用RDP,但在我的情况下,我们可以在同一个VM中使用RDP的 loopback .

    程序,流程:

    • 在VM中,创建两个不同的帐户,并为两个帐户创建Jenkins从属 .

    现在,您将在一个VM中为两个帐户安装两个Jenkins slave

    奴隶1 - 帐户1

    奴隶2 - 帐户2

    127.0.0.2 is very important, it's a loopback connection for RDP

    将上面的命令放到Jenkins作业中,其名称如“OpenRDP_ToVMXXX”,然后您可以在启用了GUI的slave 1上运行任何测试,享受 .

相关问题