增加测试代理的屏幕分辨率

时间:2017-08-23 02:41:07

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

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

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

Change VSTS agent session screen resolution when running protractor tests

6 个答案:

答案 0 :(得分:5)

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

因此,让VM以某种(指定的)分辨率启动是没有简单的选择真的很痛苦。如果有比我要给你看的更简单的东西,请告诉我,但我找不到任何东西。所以我对Nessi提到的想法进行了投票。我们所做的解决方法如下:

可能解决方案的想法

本质上我们使用this post作为指导。我们使用的最重要的事情是Windows凭证部分和TERMSRV。

我们的设置

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

我们的解决方案

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

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

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

答案 1 :(得分:2)

这是一个比较老的问题,所以最好考虑一下,如果它可以帮助任何人。

有一个屏幕分辨率实用工具,用于更改代理计算机的屏幕分辨率的AzureDevOps生成/发布任务。在运行用户界面测试(例如Selenium,编码用户界面等)时很有用。

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

答案 2 :(得分:1)

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

ifelse

答案 3 :(得分:0)

这是Azure VM的限制,因为它使用RDP来设置屏幕分辨率。有关详细信息,请参阅此链接:Why is not possible increase or change display resolution in Azure VM

  

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

     

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

答案 4 :(得分:0)

我遇到了同样的问题。由于有一种方法可以为RDP会话指定分辨率(即使对于Azure VM),我创建了UserVoice idea以获得所需的功能(使用&#34运行UI测试时指定分辨率;运行功能测试和#34;任务)。

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

答案 5 :(得分:0)

尝试无头运行测试,因为我对TFS有同样的问题,这是它对我有效的唯一方法

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