【问题标题】:Jenkins on Windows and GUI Tests without RDC没有 RDC 的 Windows 和 GUI 测试上的 Jenkins
【发布时间】:2012-04-16 16:07:09
【问题描述】:

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

有很多 GUI 测试,但它们似乎只有在远程桌面连接 (RDC) 会话打开时才会运行。

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

Jenkins slave 通过 Java Web Start 启动。

我在几个网站上读到,不幸的是,没有 RDC 会话就无法运行 GUI 测试。

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

【问题讨论】:

    标签: .net continuous-integration hudson jenkins white-framework


    【解决方案1】:

    您的从机必须在桌面上才能正常运行测试。我们遇到了同样的问题。

    解决方案是让测试机器启动并自动登录到桌面。为了确保测试仅在桌面可用后开始,我们添加了一个计划任务,设置为在用户登录时运行,这将通过 Java Web Start 启动 Jenkins 从站。这样,Jenkins 只会在桌面运行时看到从属服务器。之后,一切正常。

    【讨论】:

    • 嗨!感谢你的回答。它看起来与我一直在做的非常相似,但是并没有带来太大的成功。我还注意到并读到,每次最小化 RDC 窗口时,测试都会停止。
    • RDC 创建和销毁桌面。这会导致视觉测试变得疯狂——他们的桌面正在被擦除和重新创建。当涉及 RDC 时,这种视觉测试方法将不起作用。当我们运行测试时,我们从未在测试运行期间通过 RDC 连接。由于我们的测试机器是 VMWare 虚拟机,因此我们通过虚拟机控制台进行连接,它显示了监视器将看到的内容,而不是 RDC 连接时创建的远程桌面。
    • 我们的测试在 ec2 实例上运行,我们通常不会对它们进行 RDC。我们这样做的唯一原因是检查为什么 Jenkins 在运行测试时停止了。当我们有一个打开的 RDC 会话时,我们可以看到测试正在 Jenkins 中运行,否则什么都不会发生。
    • Jason 描述的解决方案是我让这种事情发挥作用的唯一方法。我会在您的 EC2 机器上的 cmd.exe 窗口中运行“控制 userpasswords2”,并将其配置为在启动时自动登录帐户。然后,您可以将 Jenkins 代理配置为在该桌面会话中运行(作为登录的 Windows 用户)。如果通过 RDC 连接到机器仍然给您带来问题,我会尝试切换到 VNC 以连接到已经登录的机器。
    【解决方案2】:

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

    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>
    

    【讨论】:

    【解决方案3】:

    还有另一种不使用 Windows 自动登录的方法(在少数机器上适用于我)。

    1.转到计算机管理 -> 服务和应用程序 -> 服务 -> Jenkins Slave -> 属性
    2。在登录选项卡中选择本地系统帐户并勾选允许服务与桌面交互
    3。点击OK关闭此窗口,然后重启Jenkins slave服务
    4。转到您的测试应用所在的目录,然后在您的应用可执行文件上选择 Properties
    5。在 Security 选项卡上点击 Edit...
    6。在新窗口中点击添加..
    7。在新窗口中点击Locations...并选择本地计算机(列表中最顶部的选项),点击OK
    8。将LOCAL SERVICE放到窗口的白色区域并点击Check Names,点击OK
    9。允许该用户完全控制,点击确定,关闭所有窗口

    这应该就是一切。让我知道它是否适合你。

    【讨论】:

    • 非常感谢!正是我想要的!
    • 不幸的是,这会阻止服务与经过身份验证的网络驱动器进行交互。
    • @Dan 您需要经过身份验证的网络驱动器做什么?
    • 托管在网络驱动器上的企业 nuget 提要是主要的。
    【解决方案4】:

    正如其他答案已经说明的那样,需要一个配置,其中 Windows 机器自动登录到真实用户,有关详细信息,请参阅其他答案。然而这对我来说还不够,我需要setup a UltraVNC Server 作为服务运行来解决问题。

    在网站上提到,通过 RDP 登录是该技巧的问题,即连接 VNC 或在 RDP 访问后重新启动。

    【讨论】:

    • 我知道这是一个老问题,但你能帮我设置一下吗?我安装了 UltraVNC 并启用了 loopbackonly 选项。现在它作为服务运行,但我该如何测试它?我在这里要完成的是,我有一个在服务器上安排的软件,当它运行时,它每 5 分钟截取一次服务器的屏幕截图并存储它,但如果我与 VM 断开连接,它就会停止.如果您告诉我您是如何解决的,我将不胜感激。谢谢。
    • @ChiragMS:我们不再运行此设置。我无法检查我可能遗漏了哪些细节。您是否了解细节,通过 RDP 登录会使解决方案停止工作,即机器必须在 RDP 后重新启动才能自动登录,只有这样它才能保持运行。例如,您只能通过将屏幕截图写入网络共享并从另一台机器检查此共享来从外部进行测试。
    • 是的,我得到了那部分,我配置了它。它现在工作正常。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2012-03-26
    相关资源
    最近更新 更多