要测试我们的桌面应用程序,我们正在使用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测试直接
或者域系统帐户(我们正在使用的帐户)是否可以与桌面交互?
答案 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>
部分。
您还可以指定级别,从asInvoker
到highestAvailable
,但UAC
可能会提示您。