【问题标题】:How do you efficiently run test automation against multiple servers for validation?您如何有效地针对多个服务器运行测试自动化以进行验证?
【发布时间】:2012-04-02 17:15:19
【问题描述】:

场景:25 台 Web 服务器具有相同的 Web 应用程序。

我们正在使用 Visual Studio 和 WatiN 进行自动化,现在我们基本上运行了三个测试。在运行时的测试中,它会遍历每个服务器。

测试:登录 ForEach 服务器 获取服务器 x 运行测试

在这种情况下,此测试将运行 25 个时间循环,如果每个测试需要 2 分钟来运行,那么验证几乎需要一个小时。太长了!!! :(

我希望能够将这项工作分散为多个测试代理。

问题是这个测试只能在一个代理上运行,因为它是一个测试。

我要避免的方法是,创建一个特定于每个服务器的测试以及可能导致的重复。

测试:登录服务器 1 在服务器 1 上运行测试

测试:登录服务器 2 在服务器 2 上运行测试

以此类推,25次

我希望有人可以分享他们围绕这种设置实现的内容。

【问题讨论】:

  • 有点奇怪的想法,但是在 IE 中运行一半测试,在 Firefox 中运行一半测试怎么样?

标签: testing automation webserver watin


【解决方案1】:

我已经在一个项目上工作了一年多,就是这样做的!

我们有大约 400 个使用 watin 的 nunit 测试来测试我们公司的网站。该项目的第一个版本使用 10 个虚拟机来运行测试(因此可以运行 10 个并发测试)。

新版本将使用我发现的一个名为 Sandboxie - http://www.sandboxie.com 的应用程序。此应用程序允许您在沙箱中运行应用程序(这意味着来自一个测试的 cookie 不会干扰另一个测试的 cookie)。有一个 .net 包装器,(我在底部添加了动态链接版本) - http://www.sandboxie.com/phpbb/viewtopic.php?t=9041

经过一番折腾后,我意识到沙盒在 VM 上不能很好地工作(在虚拟机上运行虚拟应用程序空间?!?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

如果您有任何问题,我很乐意为您提供帮助!

菲尔

【讨论】:

    【解决方案2】:

    如果您并行运行这些测试,您应该能够同时运行它们并在 2 分钟内完成所有测试。

    我们所做的是使用 mbUnit 和 selenium 测试(并行运行它们)针对 selenium 网格(实际上可以并行执行这些测试)。

    【讨论】:

    • 我希望不必切换到硒。但是,如果这是唯一出现的解决方案,我会尝试使用 selenium 网格和 xpath 的奖励。谢谢
    【解决方案3】:

    在同一台机器上并行运行测试绝对是一个很酷的选择。但是使用 Watin 可能会带来问题,因为多个 IE 实例同时打开,访问同一个网站,可能会相互干扰。

    我建议尝试一次启动两个 Watin 测试,看看浏览器是否会感到困惑。 (也就是说,如果第二个浏览器重用了与第一个相同的 cookie/state/etc 并破坏了测试。)

    如果他们没有问题,那么您可以尝试扩展至 5、10 或机器可以承受的任意数量的并发运行,并且可能正在运行中。 :)

    但如果浏览器确实相互干扰,您可能会想办法让 Watin 启动浏览器以保持它们的状态分开(我认为 Watir 的人在这方面有一些工作,所以这可能是可能的与WatiN。)

    完全不同的选择:

    如果您要在多台客户端计算机上运行测试,您可以使用 Jenkins 或 Hudson 来安排您的 Watin 测试。

    http://jenkins-ci.org/

    即使是两台或三台机器同时运行同一个测试套件,也会大大减少您的总测试运行时间。

    Jenkins 已成为我测试过程中非常宝贵的一部分。我发现它是一个很好的工具,可以安排测试作业在一天中的固定时间运行或在源代码控制发生变化时运行。

    据说有一些方法可以将参数传递给 Jenkins 作业(例如您的服务器地址和登录凭据),因此您可以利用它来避免重复。如果做不到这一点,您可以尝试为每个要运行测试的服务器创建一个 Jenkins 作业。

    【讨论】:

      【解决方案4】:

      您是否研究过 Microsoft 测试控制器和代理?如果您正在使用 MSTest 运行“WatiN”测试,那就像运行单元测试一样。

      http://msdn.microsoft.com/en-us/library/ms243155.aspx

      在单元测试中使用测试控制器和测试代理

      一旦您安装了测试控制器和一个或多个代理,您 然后可以指定使用远程执行与测试 运行负载时使用的测试设置中的控制器 测试。此外,您可以指定数据和诊断适配器 与与测试中的代理相关联的角色一起使用 环境。有关详细信息,请参阅如何:为 分布式负载测试和设置机器和收集 使用测试设置的诊断信息。

      附带说明 - 您可以在最新的 WatiN 中使用 jquery 选择器。

      【讨论】:

        【解决方案5】:

        我有这种设置,但我使用的是 NUnit。我拥有的测试基础结构包含一个测试控制器,它构建测试程序集 (.dll) 并将它们复制到 Web 服务器。然后使用 PSEXEC,在所有 Web 服务器上远程调用测试。 NUnit 安装在 Web 服务器上,但是,我认为这不是必需的,您可能无需安装即可使用 xcopied 版本中的 NUnit Test Runner。

        除了测试程序集之外,还有另一个可执行文件从测试控制器复制到 Web 服务器,它将结果发布到 HP 质量中心并发送包含测试结果的电子邮件通知。

        由于您使用的是 MSTest(我猜您提到了 Visual Studio 来运行测试),您可能需要查看 Develop and run MSTest unit tests in Visual Studio 2010 without including .vsmdi and .testsettings

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-06
          • 1970-01-01
          • 2011-01-31
          • 2020-11-07
          • 2011-10-27
          • 2015-10-06
          • 1970-01-01
          相关资源
          最近更新 更多