2015-04-03 126 views
3

我想使用PhantomJS 2.0/GhostDriver代替ChromeDriver,因为我已经阅读过我可以加速我的UI测试。 这是我跑的测试代码,作为JUnit测试的一部分:PhantomJS比ChromeDriver慢,使用硒

@Override 
public void runTestCase() throws Exception { 
    long startTime = System.currentTimeMillis(); 
    // log in as admin 
    Login.loginAs("admin", "password"); 
    System.out.println(System.currentTimeMillis() - startTime); 
} 

loginAs功能的用户名和密码的文本字段填写,然后点击提交按钮,最后在移动新返回页面的主页部分。

现在,我运行一次这个简单的测试,同时使用Phantomjs和ChromeDriver作为Selenium在Java(v2.45)中的驱动程序。 他们被初始化为:

  • ChromeDriver

    System.setProperty("webdriver.chrome.logfile", workingDirectory + "\\chromedriver.log"); 
    service = new ChromeDriverService.Builder().usingDriverExecutable(new File(workingDirectory + "\\chromedriver.exe")).build(); 
    capabilities = DesiredCapabilities.chrome(); 
    
    options = new ChromeOptions(); 
    options.addArguments("--allow-file-access-from-files"); 
    options.addArguments("--verbose"); 
    capabilities.setVersion(""); 
    capabilities.setCapability(ChromeOptions.CAPABILITY, options); 
    driver = new ChromeDriver(service, capabilities); 
    
  • PhantomJS

    System.setProperty("phantomjs.binary.path", workingDirectory + "\\phantomjs.exe"); 
    cliArgsCap = new ArrayList<String>(); 
    capabilities = DesiredCapabilities.phantomjs(); 
    cliArgsCap.add("--web-security=false"); 
    cliArgsCap.add("--ssl-protocol=any"); 
    cliArgsCap.add("--ignore-ssl-errors=true"); 
    cliArgsCap.add("--webdriver-loglevel=INFO"); 
    cliArgsCap.add("--load-images=false"); 
    
    capabilities.setCapability(CapabilityType.SUPPORTS_FINDING_BY_CSS, true); 
    capabilities.setCapability(CapabilityType.TAKES_SCREENSHOT, true); 
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap); 
    driver = new PhantomJSDriver(capabilities); 
    

我跑我在64位的Windows 7机器的测试。所以,看看测试所花的时间,我总是注意到ChromeDriver比PhantomJS更快。总是。例如,如果使用ChromeDriver进行测试大约需要3-4秒,与PhantomJS相同则需要大约5-6秒。

有没有人遇到过这个问题?或者有人能给我任何理由吗?我是否设置了错误?

此外,如果您需要更多的细节,请告诉我。

+0

你的设置是正确的。我和Ghostdriver有过相同的经历。但是,我发现Ghostdriver很有用,以防万一您需要刮掉网站或将其作为后台进程运行。您是否尝试过命令行/ javascript phantomjs? – LittlePanda 2015-04-03 11:03:58

+0

不幸的是没有。我怎么能把我的JUnit测试与那个?此外,我无法修改我想测试的服务器。 – 2015-04-03 11:23:06

+0

对我而言,性能似乎不错。对你来说太慢了吗?我知道需要3-4秒才能显示日志,然后脚本执行开始。我不会推荐HtmlUnitDriver,因为我遇到了太多的异常。 GhostDriver也有一些问题,但它比HtmlUnitDriver更好。 – LittlePanda 2015-04-03 11:29:06

回答

1

“PhantomJS是一款带JavaScript API的无头WebKit脚本”,因为它在项目的主页上进行了解释。 谷歌从WebKit拆分出来,创建Blink以在Chrome中使用它。 他们之间的主要区别是什么 - 不幸的是,我不是这里的专家。

我跑的我真的很长的场景都在Chrome和PhantomJS让我吃惊的区别之一是非常显著:

  • PhantomJS - 583.251小号
  • 铬 - 448.384小号

使用PhantomJS在我的情况下不会带来性能优势,但是无需进行无头测试。我可以使用没有图形桌面的机器,并为一些额外的线程节省计算能力。

+1

此外,PhantomJS是60MB,而谷歌浏览器将至少250-300MB。如果你需要运行多个实例,这是一个问题。 – 2016-04-23 19:47:11

0

网页最慢的一个方面是下载html,JavaScript,css,图片等,并发出AJAX请求。

对任何一个说Headless的人来说速度更快,怎么可以无头无际地解决这些问题?

+0

当然,但花费时间来下载HTML和所有其他的东西,再加上时间来呈现页面是大于只是下载HTML和所有其他东西。我错了吗? – 2015-04-07 08:21:53

+0

在渲染上花费的CPU数量很小。事实上,你可以从PhantomJS获得屏幕截图的事实表明,渲染必须在某处完成 – 2015-04-07 12:08:58

4

我发现,这个设置使用了大量的内存也在不断增加:

cliArgsCap.add("--load-images=false"); 

但是当我使用这个设置,内存使用稳定:

cliArgsCap.add("--load-images=true"); 
+0

在我的情况下,将load-images = false的方法执行从20.000ms减少到200ms。 – outofBounds 2016-10-27 09:52:14