场景:25个具有相同Web应用程序的Web服务器。
我们正在使用Visual Studio和WatiN进行自动化,现在我们基本上运行了三个测试。在测试中,它在运行时会遍历每个服务器。
测试:登录 ForEach Server 获取服务器x 运行测试
在这种情况下,此测试将运行25个时间循环,如果每个测试需要2分钟运行,则需要将近一个小时进行验证。太长了! :(
我希望能够做的是将这项工作作为多个测试代理进行传播。
问题是这个测试只能在一个代理上运行,因为它是一个测试。
我要避免的方法是,创建一个特定于每个服务器的测试和可能导致的重复。
测试:SignIn服务器1 在服务器1上运行测试
测试:SignIn服务器2 在服务器2上运行测试
依此类推,25次
我希望有人可以分享他们围绕这种设置实施的内容。
答案 0 :(得分:1)
我已经在一个项目工作了一年多,现在确实如此!
我们有大约400个nunit测试使用watin来测试我们公司的网站。该项目的第一个版本使用10个虚拟机来运行测试(因此可以运行10个并发测试)。
新版本将使用我发现的名为Sandboxie的应用程序 - http://www.sandboxie.com。此应用程序允许您在沙箱中运行应用程序(这意味着来自一个测试的cookie不会干扰另一个测试的cookie)。有一个.net包装器,(我在底部添加了动态链接版本) - http://www.sandboxie.com/phpbb/viewtopic.php?t=9041
经过一番捣乱后,我意识到沙盒在虚拟机上运行虚拟应用程序空间时不能很好地工作?!?Derp)。所以现在我们有4台物理机器(目前)有10个沙盒(所以现在可以运行40个并发测试)。以下是该项目的概述: -
Web UI. Requests test to be run by...
-> Test Server (windows service on server). Adds requests to database and passes on to...
-> Test controller 1 (windows service on client 1)
-> Test runner (console app on client 1) in Sandbox 01
-> ...
-> Test runner (console app on client 1) in Sandbox 10
-> Test controller 2 (windows service on client 2)
-> Test runner (console app on client 1) in Sandbox 01
-> ...
-> Test runner (console app on client 1) in Sandbox 10
-> Test controller 3 (windows service on client 3)
-> Test runner (console app on client 1) in Sandbox 01
-> ...
-> Test runner (console app on client 1) in Sandbox 10
-> Test controller 3 (windows service on client 4)
-> Test runner (console app on client 1) in Sandbox 01
-> ...
-> Test runner (console app on client 1) in Sandbox 10
如果您有任何疑问,我乐意为您提供帮助!
菲尔
答案 1 :(得分:0)
如果你并行运行这些测试,你应该能够同时运行它们并在2分钟内完成所有测试。
我们所做的是使用mbUnit与selenium测试(以并行运行它们)对抗selenium网格(它实际上可以并行执行)。
答案 2 :(得分:0)
在同一台机器上并行运行测试肯定是一个很酷的选择。但是使用Watin可能会造成问题,因为多个IE实例同时打开,访问同一个网站,可能会相互干扰。
我建议您尝试同时启动两个Watin测试,看看浏览器是否混淆了。 (也就是说,如果第二个浏览器重用与第一个浏览器相同的cookie / state / etc并打破测试。)
如果它们没有问题,那么您可以尝试扩展到机器可以承受的5,10或多个并发运行,并且可能正在运行。 :)
但是如果浏览器确实相互干扰,你可能会想方设法让Watin以一种保持状态分离的方式启动浏览器(我认为Watir人在这个领域有一些工作,所以它可能是可能的与WatiN。)
完全不同的选择:
如果您有多台客户端计算机可以运行测试,您可以使用Jenkins或Hudson来检查您的Watin测试。
即使是两台或三台同时运行相同测试套件的机器也会大大减少总的测试运行时间。
詹金斯已成为我测试过程中非常宝贵的一部分。我发现它是一个很好的工具,可以安排测试作业在一天的固定时间或源控制的变化下运行。
据说有一些方法可以将params传递给Jenkins作业(例如您的服务器地址和登录凭据),因此您可以利用它来避免重复。如果不这样做,你可以尝试为你想要运行测试的每个服务器创建一个Jenkins作业。
答案 3 :(得分:0)
您是否已查看过Microsoft Test Controller&代理?如果您使用MSTest运行“WatiN”测试,那就像运行单元测试一样。
http://msdn.microsoft.com/en-us/library/ms243155.aspx
将测试控制器和测试代理与单元测试一起使用
一旦安装了测试控制器和一个或多个代理,就可以了 然后可以指定使用测试进行远程执行 运行负载时使用的测试设置中的控制器 试验。此外,您还可以指定数据和诊断适配器 与在测试中与代理关联的角色一起使用 设置。有关更多信息,请参见如何:为a创建测试设置 分布式负载测试和设置机器和收集 使用测试设置的诊断信息。
旁注 - 您可以在最新的WatiN中使用jquery选择器。
答案 4 :(得分:0)
我有这种设置,但我正在使用NUnit。我所拥有的测试基础架构包括一个构建测试程序集(.dll)的测试控制器,并将它们复制到Web服务器上。然后使用PSEXEC,在所有Web服务器上远程调用测试。 NUnit安装在Web服务器上,但是,我不认为这是一项要求,您可以在未安装的情况下从xcopied版本使用NUnit Test Runner。
除测试程序集外,还有另一个可执行文件从测试控制器复制到Web服务器,该结果将结果发布到HP Quality Center,并发送包含测试结果的电子邮件通知。
由于您正在使用MSTest(我在您提到Visual Studio运行测试时的猜测),您可能希望通过此Develop and run MSTest unit tests in Visual Studio 2010 without including .vsmdi and .testsettings