通过测试控制器和代理在虚拟机上远程执行CodedUI测试

时间:2014-11-23 16:06:35

标签: c# .net visual-studio unit-testing coded-ui-tests

我想就下面的案例提出一些帮助。

我希望实现的目标是在其上运行虚拟机Windows 7 SP1并让我的同事 - 开发人员 - 可以运行在此计算机上运行的CodedUI测试。为了我在我的机器上创建VM,它可供所有人使用。我从这里安装了VS 2013测试代理和控制器:http://www.microsoft.com/en-us/download/details.aspx?id=40750

我设置了两者并根据他们可以相互通信的信息。

Test Agent set up Test Controller set up

我设置了一个运行测试的用户。此用户是管理员和MSDN页面中描述的其他组的成员。当我启动虚拟机时,它会自动登录,我也会看到相同的屏幕截图:

Test agent status at start

此外,当我想在VS 2013中设置代理时,它表示它 - VS 2013 - 可以与放置在虚拟机上的代理进行通信。我可以在VS中看到代理和控制器属性。但是,对我来说很奇怪,代理名称显示如下:* agent_name。我的意思是星号和代理商名称之后。

Remote execution setup Agent and controller properties

在我在测试设置菜单中选择了testsettings文件之后,我对VS说,请在VS上运行此测试,它至少会在1-2分钟内构建并处理它,然后它会显示"测试跳过&#34 ;。无论测试是单个单元测试还是SpecFlow / CodedUI的混合都无关紧要。它总是失败。

我在VS运行的那台机器的事件日志中找到了兴趣。代理和控制器运行的VM是空的。

找不到来自源VSTTExecution的事件ID 0的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件。

如果事件源自另一台计算机,则显示信息必须与事件一起保存。

活动中包含以下信息:

(vstest.executionengine.x86.exe, PID 8440, Thread 10) ControllerProxy: Queue test run error: System.Net.Sockets.SocketException (0x80004005): No such host is known

Server stack trace: 
   at System.Net.Dns.GetAddrInfo(String name)
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
   at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket()
   at System.Runtime.Remoting.Channels.RemoteConnection.GetSocket()
   at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machinePortAndSid, Boolean openNew)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Microsoft.VisualStudio.TestTools.Common.FileCopyService.get_DeploymentFlags()
   at Microsoft.VisualStudio.TestTools.Controller.ControllerExecution.<StartTestRun>b__1e(FileCopyService fileCopyService)
   at Microsoft.VisualStudio.TestTools.Execution.RemoteObjectContainer`1.InvokeAsRemoteUser(Action`1 invoke)
   at Microsoft.VisualStudio.TestTools.Controller.ControllerExecution.StartTestRun(TestRun testRun, RemoteObjectContainer`1 fileCopyServiceContainer, RemoteObjectContainer`1 defaultListenerContainer)
   at Microsoft.VisualStudio.TestTools.Controller.ControllerObject.QueueTestRun(TestRun testRun, FileCopyService fileCopyService, IControllerEvents eventHandler)
   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [1]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Microsoft.VisualStudio.TestTools.Controller.IControllerExecution.QueueTestRun(TestRun testRun, FileCopyService fileCopyService, IControllerEvents eventHandler)
   at Microsoft.VisualStudio.TestTools.TestManagement.ControllerProxy.QueueTestRunWorker(Object state)

the message resource is present but the message is not found in the string/message table

如果VS和控制器可以相互通信那么为什么我得到了#34;没有这样的主机&#34;错误?

我在这里和微软都经历了很多描述和错误报告,但我不知道该怎么做。我已多次仔细检查设置,一切正常。

任何人,不知道我该怎么办?

2 个答案:

答案 0 :(得分:1)

由于我遇到了这个问题,我收集了一些关于这个主题的经验。但是,我觉得微软的这些产品非常不成熟。

我能够实现的是,我设置了我提到的虚拟机,并且我能够在测试管理器上执行CudedUI测试。为了实现这一点,我必须在测试管理器的虚拟机上设置一个测试代理,该测试代理由位于公司基础设施中的测试控制器驱动。在这种情况下@Eli El-Tawil你是对的,感谢你的建议。

但是,如果我想在这台安装了测试代理的计算机上运行CodedUI测试,那么从Visual Studio我不能,因为Visual Studio无法连接为测试管理器基础结构注册的测试控制器,或者控制器不允许连接。我不明白这一点。

答案 1 :(得分:1)

以下是我将来遇到的一些事情。

  1. 通过Visual Studio运行测试。手动安装Controller和代理。设置控制器时,请勿在团队收集中注册。设置控制器服务器的代理程序集名称时包括:6901。系统应自动将测试用户添加到系统中。如果您在域上运行,则可能需要将VM添加到域中。

  2. 通过MTM运行测试。使用MTM在计算机上安装代理和控制器。仅从MTM运行测试,因为它们无法从VS运行。

  3. 如果您想使用visual studio和MTM运行测试,您需要在每个设置中设置两个VM。

  4. 使用Visual Studio远程运行测试的注意事项。

    1. 启动与将运行测试的服务器的远程连接(必须打开远程连接才能运行测试)。如果使用hyper-v,有一些解决方法。连接可以隐藏在应用程序后面,但无法最小化。
    2. 由于我们的域设置中的某些内容,我无法运行远程测试,除非我连接到VPN,现在使用帮助台解决此问题。如果您遇到连接问题,请尝试此操作。
    3. 在代理程序安装上禁用屏幕保护程序的设置似乎不起作用,至少它在9个不同的VM上对我不起作用。我必须编辑它并通过注册表自动登录。
    4. 您可以使用vstest.console.exe远程运行测试而无需使用visual studio或MTM,我更喜欢运行远程PowerShell脚本,但您也可以使用测试设置文件。 https://msdn.microsoft.com/en-us/library/jj155796(v=vs.110).aspx使用与从Visual Studio运行时相同的控制器和代理设置。
    5. 如果控制器位于不同的域,请确保使用完全限定的域名,即myserver.companyname.corp