NET和Jenkins的Selenium性能-如何评测和改进它



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

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

我想知道这是否是意料之中的事,像我这样的测试设置是否有任何明显的陷阱,以及我是否可以做些什么来评测和提高测试套件的性能。

信息:

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

以下由Jenkins完成:

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

硒项目使用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的网络驱动程序实例。您可以猜测类实例的"Good"静态属性是什么)

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

我发现,如果运行64位虚拟机的机器是32位机器,就会出现一个巨大的问题。它通常在一段时间内运行良好,然后随着它继续运行测试,速度会减慢。这应该是一个问题,但最重要的是,可能有太多的虚拟机从同一个地方运行。其他程序也会受到此影响,如果您的虚拟机位于公司场中,则可以帮助进行故障排除。

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

临时机器与数据库的网络连接方式可能会有所不同。这似乎是一个很小的机会,但如果两个虚拟机之间存在防火墙漏洞,可能会对时间产生重大影响。

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

祝你好运!

最新更新