Casperjs/PhantomJs vs Selenium

Posted

技术标签:

【中文标题】Casperjs/PhantomJs vs Selenium【英文标题】: 【发布时间】:2012-12-15 12:07:15 【问题描述】:

我们正在使用 Selenium 来自动化我们的 UI 测试。最近我们看到我们的大多数用户都在使用 Chrome。所以我们想知道 - 使用 PhantomJS 与 Selenium 的优缺点:

在性能方面是否有任何真正的优势,例如执行测试用例所花费的时间? 什么时候应该更喜欢 PhantomJS 而不是 Selenium?

【问题讨论】:

【参考方案1】:

他们正在解决不同的问题。由于 PhantomJS 在命令行上完美运行,它适合作为烟雾测试的第一层,无论是作为开发工作流程的一部分和/或在持续集成服务器中。 Selenium 针对多种浏览器,因此确保跨浏览器的一致性和跨不同操作系统进行广泛的测试非常有用。

如果您的 Web 应用程序需要在各种 Web 浏览器上运行,则仅使用 PhantomJS 运行 UI 测试不会产生最大的测试覆盖率。但是,在进行深入测试之前启动 PhantomJS 并进行一些基本的健全性检查是完全可以的。想象一下,在登录屏幕意外损坏且无法正常工作的情况下测试金融应用程序是多么疯狂!

请注意,随着最新 PhantomJS 中最近的 WebDriver 支持,两者之间的界限变得有些模糊。现在可以先使用 PhantomJS 快速运行测试,然后(假设没有遇到严重错误)继续在 Selenium 设置中彻底执行相同的测试。

【讨论】:

感谢您的回答。任何可以帮助我了解人们如何使用 phantomjs 在现实世界生产应用程序中收集性能相关统计数据的链接。 Ariya Hidayat 看起来是 PhantomJs 的创造者 看来您描述的开始使用 PhantomJS 编写测试然后使用 Selenium 的工作流程假设完全重写了测试...您可以直接将 PhantomJS 脚本与 Selenium 一起使用吗?【参考方案2】:

通过最近的 WebDriver 集成(正如 Ariya 所指出的),您现在可以使用 Selenium 来驱动 PhantomJS。

这是非常强大的。

您可以在每次签入时通过您的 CI 在无头 Unix 服务器上运行一组全自动 Selenium 测试(使用 PhantomJS 作为 WebDriver 实现)。然后,如果您想测试浏览器兼容性,您可以通过将底层 WebDriver 实现更改为 Chrome、Firefox 等来在本地运行测试。

【讨论】:

【参考方案3】:

我目前正在编写一个 Web 提取框架。我有 524 个测试使用 XPath 从 250 个网站获取数据。最初该框架使用 html 解析器 HTMLCleaner,但我目前正在研究使用 Selenium,因为我需要 javascript 支持。我已经针对 HtmlUnit、Chrome、Firefox 和 PhantomJS drivers 运行了测试。以下是每种方法所花费的时间和失败次数的比较:

                    Failures    Time (secs) 
HtmlCleaner         0           82  
HtmlUnit            169         102 
Google Chrome       38          562 
Firefox             46          1159    
PhantomJS           40          575

一些cmets:

在某些情况下,“失败”可能根本不是失败,它可能是 提取器失败是因为 Javascript 正在重写 DOM。我正在分析失败的原因。

也就是说,HtmlUnit 是最快的 Selenium 驱动程序,但它也不可靠。这种不可靠性不仅仅与 Javascript 有关,在处理“混乱、肮脏、真实世界”的 HTML 时也存在问题,因为标签平衡算法似乎有问题。对此提出了一些问题,但尚未解决 - 请参阅 HTML-UNIT 1423 和 HTML-UNIT 1046。

Firefox 是最慢的 Selenium 驱动程序,即使我禁用了图像加载和样式表。这是因为它的加载和初始化速度最慢,比 Chrome 慢得多,而且每次提取失败时我都需要重新加载驱动程序(在测试中,我创建了一个包含 5 个驱动程序的池,以减轻所有用户的 URL 检索延迟Selenium 网络驱动程序)。

PhantomJS 的准确率比 Firefox 更高,略低于 Chrome,但时间大约是 Firefox 的一半。更重要的是,我可以在我的开发机器上运行它,它不会通过启动多个浏览器来“接管我的机器”,这样我就可以继续工作了。

我强烈推荐 PhantomJS。

【讨论】:

用 phantomJS 运行你的测试套件需要 9 分钟?那一定是永远的感觉…… @Kevin Yes :) - 但 HTMLCleaner 是标准测试,我标记使用 JUnit categories 将其他测试标记为可选,因此它们不是标准单元测试的一部分 谢谢。是的,我一直在进行完整的 js 测试,而且它们非常缓慢——比如几页测试需要 15-20 秒。也许我的“冰川”规模需要调整,呵呵 :) 奇怪的是,如果我手动进行,点击表格只需约 5 秒。 @lucaswxp 是的!以及介于两者之间的许多其他项目。正如我上面解释的那样,没有完美的选择。当时我用的是HtmlCleaner,但是如果要提取的页面需要的话,添加了一个使用PhantomJS的选项。 @iconoclast 否 - 不幸的是 - 以前的雇主拥有 IP。【参考方案4】:

充分利用 Selenium 和 PhantomJS 的强大功能 PhantomJS 具有无头浏览器功能,因此最好将其用作具有 selenium 的浏览器之一(除了传统浏览器,如 IE、Chrome 等) 这种方法的优点:

    可用于在 CI 中为 Web 应用程序执行 Sanity(即使代理机器没有 IE 或 chrome),测试将 有效运行。 一些开发团队使用这种方法来获得快速的结果并消耗更少的时间和资源。 phantom JS 最大的特点是截屏,使用多线程运行并行测试,这将大大减少您的执行时间。

【讨论】:

【参考方案5】:

我在使用 PhantomJS 时遇到的挑战:

我的应用程序正在为 Web 应用程序定价:

    在某些时候,在 chrome 浏览器上运行良好的定位器在 phantomJS 上无法运行。 有时在通过 selenium 执行双击或上下文单击时,我必须先进行额外检查以验证操作 coz 它没有点击。 缓存和 cookie 持久性。注销后再登录后,数据仍保留在缓存中。 |所以我们在 chrome 上进行测试。 我发现的最重要的问题之一是“文件上传问题”。我们无法在应用程序的 phantomJs 浏览器中上传文件。我们尝试了很多东西 javascriptexcutor,jqueries,但它们都没有工作。所以我们也在 Chrome 上进行了这个测试。 注意:我们在框架中广泛使用了 javascript 函数来与 PhantomJS 的 web 元素进行交互。 一件事是肯定的执行时间在 PhantomJS 中非常少。所以这取决于客户的优先级他是否想要功能/性能然后 随它去吧。如果您想测试端到端场景,请选择 chrome。

【讨论】:

以上是关于Casperjs/PhantomJs vs Selenium的主要内容,如果未能解决你的问题,请参考以下文章

通过 Charles 代理 casperjs / phantomjs

使用 casperjs/phantomjs 登录到 Amazon Developer 网页

javascript Cheatsheet:CasperJS,PhantomJS&Spooky。更多:http://journal.gentlenode.com/casperjs-2-chea

发送消息vs函数调用

mysql Concat vs OR

register_buffer vs register_parameter