真正的无头浏览器

时间:2011-01-18 02:17:32

标签: firefox browser webkit headless headless-browser

我负责测试大量使用AJAX的企业Web应用程序。我需要构建一个允许在没有人为干预的情况下连续运行测试的系统。目前我最感兴趣的是负载测试,但我希望用于生成负载的相同脚本用于功能测试。

目前我正在使用grinder进行负载测试。我们记录脚本然后处理它们以处理异步请求。这个系统现在有效;但是脚本很精致,在开发周期中我无法维护它们。我需要能够通过编程语言“运行浏览器”,该语言抽象出html和javascript的细节,但它必须是无头的。换句话说,如果我的测试脚本中断,它必须代表应用程序的实际破坏。在xvfb中运行firefox不起作用,因为即使在运行xvfb的无头linux机器上,firefox仍然使用太多资源。我尝试用无头x服务器下的webdriver驱动firefox。

我已经在HTMLUnit工作了好几天,因为这是理想的解决方案。我一直在HTMLUnit编写Jython个驱动程序,因此我可以将它们与研磨机一起使用。不幸的是我遇到了javascript错误(这不是firefox / chrome / IE中的真正错误),我想我已经走到了尽头。在任何情况下,我都很清楚HtmlUnit,我真的需要一个替代方案。

我知道还有其他一些解决方案(envjszombie.js);但我不知道这些技术是如何发展的,我不想浪费另一个星期走向死胡同。

获取Firefox或Webkit的源代码并注释掉所有渲染/ GUI调用并创建真正的无头浏览器有多难?这已经完成了吗?一个人比另一个人更容易做到这一点吗?老实说,我无法理解为什么还没有这样做,所以我猜它比我预期的要难得多。

我假设如果我能得到一个具有合理性能特征的真正无头浏览器(我有一个庞大的服务器机队来解决这个问题,但它对于真正的firefox与GUI渲染不够大)那么我将被设置。

4 个答案:

答案 0 :(得分:14)

enter image description here

这是由http://www.phantomjs.org/的人完成的。用他们自己的话说:

  

PhantomJS是一款带有JavaScript API的无头WebKit。它具有对各种Web标准的快速和本机支持:DOM处理,CSS选择器,JSON,Canvas和SVG。

     

PhantomJS是基于Web的应用程序,网站抓取,页面捕获,SVG渲染器,PDF转换器和许多其他用例的无头测试的最佳解决方案。

     

PhantomJS由Ariya Hidayat创建

答案 1 :(得分:1)

您可以利用一些可用的JavaScript单元测试工具来组合您需要的那种环境。

例如,我发现在env.js中加载rhino会为测试大多数JavaScript提供可接受的假浏览器。它不符合某些DOM属性,例如相对于窗口大小的元素,但这在我的经验中并不是一个严重的问题。

另见:

答案 2 :(得分:1)

看看LoadBooster。它是一种基于云的负载测试服务,它使用无头浏览器PhantomJS来测试网站。免责声明:我为LoadBooster工作。

答案 3 :(得分:0)

看看WebKitDriver。该项目包括WebKit的无头实现。