Windows上的Jenkins和没有RDC的GUI测试

Mik*_*din 17 .net continuous-integration hudson white-framework jenkins

我们有Jenkins的主从配置.我们的.NET项目是由在Windows上运行的从属Jenkins实例构建的.

有一堆GUI测试,但是如果打开了远程桌面连接(RDC)会话,它们似乎只会运行.

当尝试在没有RDC的情况下运行测试时,Jenkins没有在测试中显示任何进展.然而,然后,我连接到Slave的桌面,可以看到启动的应用程序的主窗口,但UI测试框架(白色)无法执行任何操作.

Jenkins slave通过Java Web Start启动.

我在几个网站上看到,遗憾的是,没有RDC会话就无法运行GUI测试.

我只想确认这是真的,并想知道是否有任何解决方法.

Jas*_*ger 14

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

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

  • RDC创建并销毁桌面.这导致视觉测试变得疯狂 - 他们的桌面正在被擦除和重新创建.当涉及RDC时,该视觉测试方法将不起作用.当我们运行测试时,我们从未在测试运行期间通过RDC连接.由于我们的测试机器是VMWare VM,我们通过VM控制台连接,它显示了监视器将看到的内容,而不是RDC连接时创建的远程桌面. (4认同)
  • Jason描述的解决方案是我获得这种工作的唯一途径。我将在EC2计算机的cmd.exe窗口中运行“ control userpasswords2”,并将其配置为在启动时自动登录到帐户。然后,您可以将Jenkins代理配置为在该桌面会话中运行(以登录的Windows用户身份)。如果通过RDC连接到计算机仍然给您带来问题,我将尝试切换到VNC以连接到已登录的计算机。 (2认同)

小智 6

我有一个Jenkins集群运行不同类型的GUI测试,win32,swing,selenium.他们以无人值守的方式全天候运行数千次测试.这是我的解决方案:

  1. 如何使GUI测试保持活跃 - RDC不起作用,GUI应用程序只有在RDC会话处于活动状态时才能正常运行.我尝试过不同的方法,所以不要再费心了.在RDC窗口最小化或断开连接后,您的测试将中断.到目前为止的解决方案是安装VNC服务器(我正在使用UltraVNC)作为服务,并确保它在登录期间启动.还要确保没有使用RDC连接到测试机器,因为RDC将中断VNC会话.如果可能,也将它与VNC客户端连接.但这取决于你.我所做的是当我需要在机器上调试某些东西时,我对它进行RDC并重新启动它以确保设置#2和#3.

  2. 自动登录 - SysInternalsSuite中有一个工具autologon.exe,在您的奴隶上运行它

  3. 自动注册从站 - 您需要的是Swarm插件 - https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin.编写一个简单的批处理并在启动文件夹中放置一个快捷方式.每次机器自动登录时,它都会自动注册为从机.

我实际上将#2和#3组合为一个简单的批处理文件:

autologon.exe <user> <domain> <password>
REM Here to make sure the logonCount is properly generated
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0xFFFF /f

start /min java -jar I:\CDC\jenkins\swarm-client-1.9-jar-with-dependencies.jar -executors 1 -fsroot c:\Jenkins -labels "Prod Win7 %ComputerName%" -master <Jenkins URL> -name farm-%ComputerName% -username <username> -password <password>
Run Code Online (Sandbox Code Playgroud)


maQ*_*maQ 6

还有另一种方法可以在没有Windows自动登录的情况下执行此操作(在少数计算机上适用于我).

1.转到计算机管理 - >服务和应用程序 - >服务 - > Jenkins Slave - >属性
2.在登录选项卡中选择本地系统帐户并选中允许服务与桌面交互
3.单击确定关闭此窗口,然后重新启动在詹金斯从服务
4.进入目录哪里是你的测试应用程序并选择属性对您的应用程序的可执行
5.在安全选项卡中单击编辑...
6.在新的窗口中,单击添加..
7.在新的窗口中点击位置...并选择本地计算机(列表中最顶层的选项),单击确定
8.将LOCAL SERVICE置于窗口的白色区域,然后单击检查名称,单击确定
9.允许该用户完全控制,单击确定,关闭所有窗口

应该是一切.请让我知道这对你有没有用.

  • 不幸的是,这会阻止该服务与经过身份验证的网络驱动器进行交互。 (2认同)