【问题标题】:HtmlUnit + Selenium within Production生产中的 HtmlUnit + Selenium
【发布时间】:2012-02-22 00:07:30
【问题描述】:

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

我正在使用这些库以编程方式浏览各种网站并与之交互,并且取得了一些成功并且没有遇到内存问题(确保始终清理会话)。

我想知道这些库是否适合生产环境或不推荐。由于有关自动化测试的大量信息而不是我如何使用它们,这很难通过 Google 找到。

我意识到这是一个相当笼统的问题,但我正在寻求有关这些库的建议以及可能更好的替代方案。

【问题讨论】:

    标签: java selenium webdriver htmlunit


    【解决方案1】:

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

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

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

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

    我的帖子的要点是:是的,这些库已准备好生产。但是,作为所有生产软件,您必须对它们的使用进行基准测试,以找到合适的配置以获得最佳稳定性。我建议您在生产中使用 Selenium Grid,这是并行化进程的好方法

    【讨论】:

    • 谢谢,这就是我要找的答案。
    【解决方案2】:

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

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

    总而言之,HtmlUnit 旨在运行相对较短的测试用例而不是长时间运行的服务器应用程序,这一点当然值得注意。可以对其进行足够的调整,使其易于管理,但当然它本来可以更好。

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

    【讨论】:

    • phantom-js 看起来很有趣,但还不是 htmlunit 的合适替代品,因为它缺少 webdriver 集成。
    • 可能。我自己不使用 webdriver。
    【解决方案3】:

    一般来说,使用你的测试“直觉”。 WebDriver 和 HTMLUnit 所做的是,它模拟真实用户在网页中执行某些操作。

    我个人的直觉告诉我,我应该尽可能少地进行生产测试。因此,如果我的 web 应用程序还活着,我个人只会将这些工具用于验证。

    是的,它对一般问题的一般答案,但试试这个:

    召集负责 webapp 的人员并询问他们:

    • 是否应该在生产环境中进行测试? (所以总是有很小的机会,一些客户会看到这些测试数据)

    • 如果是,应该在生产环境中测试什么?

    • 如果是,是否应该自动化?

    然后你就有答案了;)

    【讨论】:

    • 我不是在问我是否应该使用 webdriver 测试我的生产实例,我是在问是否可以使用 webdriver 作为生产代码。我的生产环境使用 webdriver 与其他网站交互,因为它们使用了大量的 javascript。
    猜你喜欢
    • 2016-02-16
    • 2017-03-14
    • 2018-07-27
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多