真正的无头浏览器

16

我负责测试一个重度使用 AJAX 的企业 Web 应用程序。我需要建立一个系统,允许无需人工干预持续运行测试。目前我主要关注负载测试,但我想使用相同的脚本进行功能测试。

目前,我正在使用 grinder 进行负载测试。我们记录脚本,然后对它们进行处理,以处理异步请求等内容。这个系统现在可以使用,但是脚本很难维护,并且不能在开发周期中进行维护。我需要能够通过编程语言“运行浏览器”,该语言需要抽象出 HTML 和 JavaScript 的详细信息,但必须是无头的。换句话说,如果我的测试脚本失败,它必须代表应用程序的实际故障。在 xvfb 中运行火狐浏览器不起作用,因为火狐浏览器即使在运行 xvfb 的无头 Linux 机器上仍然使用太多资源。我尝试在无头 x 服务器下使用 webdriver 来驱动火狐浏览器。

我已经在 HTMLUnit 上工作了几天,因为这是理想的解决方案。我一直在用 Jython 编写 HTMLUnit 驱动程序,因此可以将它们与 grinder 一起使用。不幸的是,我遇到了 JavaScript 错误(这并非在 Firefox/Chrome/IE 中的真正错误),我认为我已经走到了尽头。无论如何,我对 HtmlUnit 有很好的了解,但我确实需要替代方案。

我知道还有其他解决方案(envjszombie.js); 但是我不知道这些技术的发展程度,而且我不想再浪费一周时间走进死胡同。

如果拿到Firefox或Webkit的源代码,并注释掉所有的渲染/GUI调用,创建一个真正的无头浏览器会有多难?这个已经被做过了吗?用其中一个比另一个更容易实现吗?老实说,我想不通为什么这件事情还没有被完成,所以我猜想它比我预期的要难得多。

我假设,如果我能得到一个具有合理性能特征的真正无头浏览器(我有一大批服务器可以用来解决这个问题,但它不足以支撑带GUI渲染的真正的Firefox),那么我就可以解决问题了。


你是否考虑过使用商业服务,例如BrowserMob(http://browsermob.com/performance-testing)或Gomez(http://www.gomez.com/products-solutions/products/load-testing/)进行性能测试?虽然价格不菲,但似乎比试图破解Firefox/Webkit要容易得多。 - Rob Di Marco
我确实没有研究过这些服务,但我听说过它们。我热衷于使用开源技术组建一个内部系统。我们有很多测试服务器,我真的想利用它们。不过还是谢谢你的建议。 - user573225
4个回答

14

这里输入图片描述

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

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

PhantomJS是进行基于Web的应用程序无头测试、网站爬取、页面截屏、SVG渲染器、PDF转换等许多用例的最佳解决方案。

PhantomJS是由Ariya Hidayat创建的。



1

你可能可以利用一些可用的JavaScript单元测试工具来组装你所需的环境。

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

另请参阅:


谢谢,我可能会尝试在 rhino 中使用 env.js。这应该允许我与当前基于 Java 的负载测试框架集成。您对它和 HtmlUnit的比较有什么想法吗?还有您有没有使用过zombie.js的经验? - user573225
据我所记,上次我查看HTMLUnit时它没有我需要的JavaScript支持,但现在情况可能已经改变了。我还没有尝试过zombie.js,但它看起来值得调查,感谢您指出这一点。 - Jonah

1
请看LoadBooster,它是一种基于云端的负载测试服务,利用无界面浏览器PhantomJS来测试网站。免责声明:我在LoadBooster工作。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接