HtmlUnit和Selenium在生产中的应用

12

我目前在我的生产代码中使用HtmlUnit和Selenium来驱动它(Webdriver)。

我通过这些库以编程方式进行网站抓取和交互,并取得了一定的成功并且没有经历过内存问题(确保会话始终被清理)。

我想知道这些库是否适用于生产环境或不推荐使用。由于关于自动化测试的大量信息,这很难通过Google找到针对我的使用方式的答案。

我意识到这是一个相当通用的问题,但我正在寻求有关这些库和潜在更好替代方案的建议。

3个回答

11

WebDriver和Selenium非常适合生产环境。 我们在多台机器/多数据中心分布式网格上广泛使用它们已经2年了,没有遇到无法应对的性能或稳定性问题。

我们首选的驱动程序是Firefox驱动程序(比HTMLUnit更重,更难配置),我们不得不调整网格以了解可以运行多少实例。 对于稳定性,我们的最大值是每个核心1个实例

我们的selenium/webdriver实例已经连续两年24/7运行(1年使用selenium 1,另一年逐步迁移到selenium 2 / WebDriver),并配合适当的监控(您应该监控内存使用情况/CPU使用情况)和一堆负载测试,我们达到了良好的水平,几个月内没有重新启动过进程

我们也广泛使用了HTMLUnit,并对此库同样满意

本文的要点是:是的,这些库已准备好用于生产。 但是,就像所有生产软件一样,您必须基准测试它们的使用,以找到最佳稳定性的适当配置。 我建议您在生产中使用Selenium Grid,这是并行处理的一个很好的方式


5

我在生产中使用HtmlUnit进行类似的操作,但是遇到了很多问题,主要是性能方面的问题。目前,我切换到HtmlUnit 2.10的快照版本,其中实现了一些对我来说很重要的性能改进(例如,在DomNode.addDomChangeListener()上将ArrayList.contains()替换为HashSet.contains())。

尽管如此,在JavaScript密集页面上CPU负载仍然相当高。通常,在双核Linux机器上不能同时运行超过10个这样的页面。我相信HtmlUnit只使用Rhino(JavaScript引擎)的解释器模式,这非常慢。此外,您需要小心地释放HtmlUnit使用的所有资源,以避免内存泄漏。

总的来说,HtmlUnit显然是设计用于运行相对短暂的测试用例,而不是长时间运行的服务器应用程序。可以通过调整使其足够可管理,但肯定可以更好。

我发现另一种有希望的方法是phantom-js,它是WebKit浏览器的无头版本,是一个本地应用程序,运行JavaScript速度更快。


PhantomJS 看起来很有趣,但它还不是 htmlunit 的合适替代品,因为它缺少 webdriver 集成。 - Steven
可能吧。我自己不使用webdriver。 - maximdim

2
一般来说,需要根据你的测试“直觉”来判断。WebDriver和HTMLUnit的作用是模拟真实用户在网页中执行一些操作。
我的个人直觉是尽可能少地进行生产测试。因此,我个人只会使用这些工具来验证我的Web应用程序是否仍然有效。
是的,这是对通用问题的通用回答,但可以尝试以下方法:
聚集负责Web应用程序的人并问他们:
- 应该在生产环境中进行测试吗?(因此总有一些客户将看到这些测试数据) - 如果是,则应在生产环境中测试什么? - 如果是,则应自动化吗?
然后你就有了答案 ;)

1
我不是在问我是否应该使用webdriver测试我的生产实例,我是在问在生产代码中使用webdriver是否可以。我的生产环境使用webdriver与其他网站进行交互,因为它们使用大量的javascript。 - Steven

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