【问题标题】:Increase the screen resolution on Test Agent增加测试代理的屏幕分辨率
【发布时间】:2018-01-31 10:58:42
【问题描述】:

通过 RDP 访问时,在我的本地计算机和 Azure VM Windows Server 2012R2 上针对桌面 WPF 应用程序运行自动化测试工作正常。

但是,当 VM 用作构建机器并由 TFS 或 VSTS 上的测试代理控制时,所有测试都会失败,因为屏幕分辨率设置为 1024x768 屏幕分辨率。在此显示设置之前,应用程序不会配置为运行。部署测试代理时有什么方法可以更改屏幕设置吗?

Change VSTS agent session screen resolution when running protractor tests

【问题讨论】:

  • 代理是否以交互模式运行?
  • 登录该机器并检查它是否正确打开了 WPF 应用程序。
  • 机器能够通过 RDP 正确打开 WPF 应用程序。它也适用于本地机器。
  • 用于运行测试的任务是什么? Visual Studio 测试还是运行功能测试?
  • 另一方面,我的意思是通过RDP(相同帐户)登录测试机器,然后排队构建并检查WPF应用是否可以正常打开。

标签: tfs automated-tests azure-devops azure-pipelines azure-pipelines-build-task


【解决方案1】:

我们在 Visual Studio + Azure 解决方案中遇到了同样的问题。为了能够执行测试,我们需要在 VM 上使用比 1027 x 768 更高的分辨率。但是由于它是 Azure 并且您需要为打开的机器付费,我们还希望在每次运行后关闭它们以降低成本(当你想扩大一点时特别有用)。

因此,没有简单的选项可以让 VM 以特定(指定)分辨率启动,这真的很痛苦。如果有比我要向您展示的更简单的东西,请告诉我,但我找不到任何东西。所以我赞成 Nessi 提到的想法。作为解决方法,我们采取了以下措施。

可能的解决方案的想法

本质上,我们使用this post 作为指导。我们从中使用的最重要的东西是 Windows 凭据部分和 TERMSRV。

我们的设置

  • Visual Studio 构建服务器
  • 四个 Azure VM,其中一台机器是 selenium-grid-hub,另外三台是节点

我们的解决方案

首先我们让构建服务器启动资源组中的所有机器(到目前为止一切顺利)。然后,我们创建了一个 Powershell 脚本,该脚本在构建服务器上运行到节点以检查并等待 RDP 服务可用。这是必需的,因为我们可能需要 10 分钟才能看到此服务处于活动状态。最后,我们在 selenium-grid-hub VM 上触发 Powershell,以特定分辨率与所有节点建立 RDP 连接。

更详细一点,以确保一切都自动进行,无需任何手动输入:

  • 从每个节点创建证书并将其导出/导入到集线器中
  • 确保凭据存储在凭据管理器中 > Windows Credentails(我们在所有计算机上创建了一个用户以使生活更轻松一些)
  • 创建用于检查 RDP 服务是否处于活动状态的脚本
    • 我们在带有参数$(Password) $(Chrome-node) $(Username) 的VS 构建块中将此脚本称为C:\Scripts\RDPServiceRunCheck.ps1(参见下面的示例)
    • 所有这些参数都存储在构建服务器上的变量中
    • 这是script on github 的代码
  • 创建可执行文件以在特定分辨率下启动 RDP
    • 我们在带有参数"C:\Scripts\$(Chrome-node).rdp" 1600 1200 的 VS 构建块中将此脚本称为 C:\Scripts\Resolution.RDP.Remoting.exe(参见下面的示例)
    • 每台机器的 *.rdp 文件(预先)存储在此文件夹中,1600 1200 是我们要设置的分辨率
    • 这是executable on github 的代码

【讨论】:

    【解决方案2】:

    这是一个较老的问题,所以如果它对任何人有帮助,最好把它扔出去。

    有一个屏幕分辨率实用程序 AzureDevOps Build/Release 任务来更改代理机器的屏幕分辨率。在运行 Selenium、Coded UI 等 UI 测试时很有用。

    https://marketplace.visualstudio.com/items?itemName=ms-autotest.screen-resolution-utility-task

    【讨论】:

    • @Yoiku 我不熟悉本地 TFS。我相信最新版本现在称为 Azure DevOps Server。如果发布管道的管理方式与我假设您可以使用市场任务的方式相同?
    【解决方案3】:

    尝试无头运行测试我遇到了与 TFS 相同的问题,这是它对我有用的唯一方法

    args: [
        '--headless',
        '--window-size=1920,1040',
    ],
    

    【讨论】:

      【解决方案4】:

      尝试使用下面的 Powershell 命令,这是一个 100% 有效的解决方案

      Set-DisplayResolution -Width 1024 -Height 768 -Force
      

      【讨论】:

      • 完美解决方案!
      • 我相信这只适用于服务器核心
      【解决方案5】:

      这是 Azure VM 的限制,因为它使用 RDP 设置屏幕分辨率。详情参考此链接:Why is not possible increase or change display resolution in Azure VM

      RDP 会话使用 RDP 显示驱动程序,而不是 Microsoft Virtual 机器总线视频设备。

      虽然 RemoteFX 功能支持更广泛的图形 与常规 RDP 相比,RemoteFX 不适用于 Azure VM。

      【讨论】:

      • 知道如何解决这个问题吗?我们不想在低分辨率设置下运行我们的自动化测试。
      • @GSTeam 据我所知,没有任何方法可以改变这一点。您要么保持 RDP 连接,要么在本地计算机上部署测试代理。
      • 有没有办法让会话持续保持活动状态?谢谢
      • @GSTeam 否,除非您保持 RDP 连接。
      【解决方案6】:

      我也有同样的问题。由于有一种方法可以为 RDP 会话指定分辨率(即使是 Azure VM),我创建了一个UserVoice idea 来获得这个所需的功能(在运行 UI 测试时指定分辨率,使用“运行功能测试”任务)。

      与此同时,我正在使用解决方法。我们的构建虚拟机以所需的分辨率(当前以覆盖此会话在 4800x2700 下运行的不同浏览器大小)打开一个 RDP 会话到具有该帐户的测试机器,并使用该帐户执行 UI 测试。当有一个活动会话时,UI 测试只是连接到该会话并使用当前显示的分辨率。 这样,我们就有了从 Azure 构建 VM 到 Azure 测试 VM 的恒定 RDP 会话,但它可以工作:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-13
        • 2016-06-28
        • 1970-01-01
        相关资源
        最近更新 更多