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

时间:2013-10-18 03:56:58

标签: testing user-interface jenkins continuous-integration jubula

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

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

非常感谢!

6 个答案:

答案 0 :(得分:22)

  

在测试运行之前,您的从属计算机必须位于桌面上   正常。我们遇到了同样的问题。

     

解决方案是让测试机器启动并自动登录到   桌面。确保测试仅在桌面之后启动   可用,我们添加了一个计划任务,设置为在用户登录时运行,   这将通过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 slave。否则,Jenkins slave将无法访问Windows UI组件(换句话说,无法与桌面交互)。

  

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

因此,您必须create a scheduled task并将其配置为启动Jenkins client using Java Web Start

3。用它

  

这样,Jenkins只会在桌面运行后看到奴隶。后   一切正常。

当奴隶在线时,您可以使用它来运行UI测试。

答案 1 :(得分:5)

要解决此问题,请按照我在此解释的那样设置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:// {Your Jenkins Server}下载:8080 / jnlpJars / slave.jar)

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

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

答案 2 :(得分: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)。

答案 3 :(得分:0)

我尝试了这里提供的解决方案,但没有任何方法可以帮助我。最后,我想出了一个解决方法。

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

虽然有效,但这意味着可以使用两台虚拟机。

答案 4 :(得分:0)

您仍然需要使用RDP,但就我而言,我们可以在同一个VM中使用RDP的 loopback

程序:

  1. 在VM中,创建两个不同的帐户,并为两个帐户创建Jenkins slave。
  2. 现在,您将在一个VM中为两个帐户安装两个Jenkins服务器

    奴隶1 - 帐户1

    奴隶2 - 帐户2

    1. 启用多个RDP关注指南 https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html

    2. 在slave 2(带帐号2)中,运行rdp命令连接到slave 1(带帐号1),如下 开始/ b“”“C:\ RDP \ rdp.exe”/ v: 127.0.0.2 / domain:\ / u:admin / p:xxxx / fullscreen / w:1920 / h:1200

    3. 127.0.0.2非常重要,它是RDP的环回连接

      将上述命令放入Jenkins作业中,其名称为“OpenRDP_ToVMXXX”,然后您可以在启用了GUI的奴隶1上运行任何测试,享受。

答案 5 :(得分:0)

由于上述解决方案似乎有点过大,所以我使用了这种方法:

  1. 禁用Jenkins服务
  2. 使用java -jar C:\Program Files (x86)\Jenkins\jenkins.war从命令行启动Jenkins

由于某种原因,以这种方式启动时,我必须安装所有插件以及所有内容,因此我建议创建一个备份,其中有用于此的插件。祝好运。 :)