5

我有一个想用 Selenium 测试的 ASP.NET 网站。我想在“登台”虚拟机上设置一个 Jenkins 实例,以自动运行测试。

问题是测试运行非常缓慢 - 比我的开发机器慢几倍。一个简单的测试可能需要 2-3 分钟以上。

我想知道这是否是可以预料的,像我这样的测试设置是否有任何明显的缺陷,以及我是否可以做些什么来分析和提高测试套件的性能。

信息:

测试在具有 Windows 7 64 位的 2.7GHz 2GB Ram 虚拟机上运行。我的开发机器类似,但安装的是 32 位 Win。

以下由詹金斯完成:

  • 该网站从源代码管理中签出,并使用自定义 web.config 进行配置。主要区别在于它是在发布模式下编译的,它连接到不同机器上的数据库(也是同一台服务器上的虚拟机)。
  • IIS 正在监视网站的目录并自动重新加载更改。
  • 运行以下命令(已清理目录): nunit-console Selenium-Project-Dir /labels
  • 测试在 Chrome 网络驱动程序上运行。

selenium 项目使用 NUnit 和 WebRunner。驱动程序实例创建一次 - 在所有测试之前,在 [SetUpFixture] 类内的 [SetUp] 属性中。它们在类的 [TearDown] 属性中被删除一次。

示例测试如下所示:

[Test, Combinatorial]
public void AnExistingUserCanLogin(
    [ValueSource(typeof(Drivers), "Good")] 
    IWebDriver driver)
{
    // This function clicks on some buttons and fills in some forms.
    LoginUser(driver); 

    // Make sure the user is now logged in
    Assert.IsTrue(driver.ElementIsPresent(By.ClassName("imgUserAvatar")));
    Assert.IsTrue(driver.ElementIsPresent(By.CssSelector("a.my-profile")));
    Assert.IsTrue(driver.ElementIsPresent(By.CssSelector("a.logout")));
}

(“Drivers”类包含 FF、IE、Chrome 的 lazily-instances webdriver 实例。你可以猜到类实例的“Good”静态属性是什么)

4

1 回答 1

0

它是虚拟机这一事实应该不是问题,而且 RAM 听起来不错。什么操作系统正在运行?一些 Windows 操作系统在不同的位版本之间存在显着的速度差异(因为对硬件的要求)。这在 Vista 中尤其明显,但我注意到 Windows 7 和 Server 2003 之间的差异。

我发现如果运行 64 位 VM 的机器是 32 位机器,就会有很大的问题。它通常看起来运行良好一段时间,然后随着它继续运行测试会变慢。这应该是一个废话,但主要是可能有太多的虚拟机从同一个地方运行。其他程序将受此影响,如果您的虚拟机位于公司场中,这可以帮助进行故障排除。

另一个产生显着差异的因素是您是否针对不同的浏览器运行测试。IE8 和 IE9 将采用相同的 selenium 命令并以不同的速度运行它们。我不知道这是为什么,我只知道我见过它。确保登台机器具有当前版本的 Chrome(或至少与您的开发机器相同)。

登台机器与数据库的联网方式可能会有所不同。这似乎是一个非常小的机会,但如果两个虚拟机之间存在防火墙故障,可能会对时间产生重大影响。

我唯一能想到的可能是改变时间长度的另一件事是,是否有其他程序同时在登台机器上执行。检查 CPU 使用率可能会有所帮助。就个人而言,我注意到我的 VM 使用的 CPU 比我的个人机器多得多。如果是这种情况,到目前为止我发现的唯一解决方案是为 VM 提供更多处理能力,或者只运行测试而不是其他任何东西。

祝你好运!

于 2013-04-26T15:26:28.847 回答