.NET和Jenkins的Selenium性能 - 如何分析和改进它?

x10*_*x10 5 .net asp.net selenium nunit jenkins

我有一个ASP.NET网站,我想用Selenium测试.我想在"临时"虚拟机上设置Jenkins实例,以自动运行测试.

问题是测试运行速度非常慢 - 比我的开发机器慢几倍.单个简单的测试可能需要2-3分钟.

我想知道这是否是预期的,如果像我这样的测试设置有任何明显的缺陷,并且我可以做什么来分析和改进测试套件的性能.

信息:

测试在配备Windows 7 64位的2.7GHz 2GB Ram虚拟机上运行.我的开发机器类似,但安装了32位Win.

以下是Jenkins完成的:

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

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")));
}
Run Code Online (Sandbox Code Playgroud)

("Drivers"类包含FF,IE,Chrome的lazily-instances webdriver实例.你可以猜出类实例的"好"静态属性)

小智 0

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

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

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

登台计算机与数据库的联网方式可能会产生影响。这似乎是一个很小的机会,但如果两个虚拟机之间存在防火墙问题,可能会对时间产生重大影响。

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

祝你好运!