从TeamCity

时间:2017-02-08 01:46:24

标签: automation teamcity qa testcomplete

要测试我们的桌面应用程序,我们正在使用TestComplete / TestExecute。 我们有一个在管理机器上启动的Master项目。 这个Master项目不需要与桌面交互,它不会测试我们的App。

该项目将通过TestExecute直接在不同的VM上启动Slave远程项目(我们的应用程序需要桌面交互的实际UI测试)。

我们目前正在将Build流程转移到TeamCity。在这台管理机器上,我们有一个TeamCity的Build Agent。 Build Agent作为具有系统帐户(而不是本地系统帐户)的服务运行。

我们没有使用本地系统帐户(可以与桌面交互),因为我们需要域帐户来访问域资源。我们并不想将代理作为一个流程启动,我们希望将其保留在服务中。

目前,我们无法直接从TeamCity启动TestExecute,因为TestExecute需要交互式会话,而构建代理的帐户无法与桌面交互。 我们尝试使用脚本(从TeamCity执行)创建一个PSSession,其中普通用户可以访问Desktop并从此PSSession启动TestExecute。但这也不起作用。

以下是两种情况(直接和通过PSSession)的例外情况:

Start-Process : This command cannot be run due to the error: This operation requires an interactive window station.
At line:3 char:9
+         Start-Process "D:\SmartBear\TestExecute 12\Bin\TestExecute.ex ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
     + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

有没有人有使用TeamCity的TestExecute开始测试的解决方案?正如我所说这个项目不需要与桌面交互,它将通过TestExecute在不同的VM上启动UI测试直接

或者域系统帐户(我们正在使用的帐户)是否可以与桌面交互?

2 个答案:

答案 0 :(得分:0)

您可以做的最简单的事情是从Team City运行主项目,主项目将调用从机上的UI测试。由于主项目不需要访问UI元素,因此在非UI会话中运行它不会有任何问题。

答案 1 :(得分:0)

在TestExecute的安装目录中,您可以找到清单文件TCLauncher.exe.Manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <!-- Here is the relevant part -->
        <requestedExecutionLevel level="asInvoker" uiAccess="true">
        </requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

您可以将uiAccess配置为false。

如果您不使用TCLauncher,而是直接使用TestExecute.exe,则还有一个Manifest文件,您可以配置相同的<Security>部分。

您还可以指定级别,从asInvokerhighestAvailable,但UAC可能会提示您。