我们正在使用 Selenium 来自动化我们的UI
测试。最近我们看到我们的大多数用户都在使用 Chrome。所以我们想知道——使用 PhantomJS 和 Selenium 的优缺点:
- 在性能方面是否有任何真正的优势,例如执行测试用例所花费的时间?
- 什么时候应该更喜欢 PhantomJS 而不是 Selenium?
我们正在使用 Selenium 来自动化我们的UI
测试。最近我们看到我们的大多数用户都在使用 Chrome。所以我们想知道——使用 PhantomJS 和 Selenium 的优缺点:
他们正在解决不同的问题。由于 PhantomJS 在命令行上完美运行,它适合作为烟雾测试的第一层,无论是作为开发工作流程的一部分和/或在持续集成服务器中。Selenium 针对多个浏览器,因此确保跨浏览器的一致性和跨不同操作系统进行广泛的测试非常有用。
如果您的 Web 应用程序需要在各种 Web 浏览器上运行,仅使用 PhantomJS 运行 UI 测试不会产生最大的测试覆盖率。但是,在进行深入测试之前启动 PhantomJS 并进行一些基本的健全性检查是完全可以的。想象一下,在登录屏幕意外损坏且无法正常工作的情况下测试金融应用程序是多么疯狂!
请注意,随着最新 PhantomJS 中最近的 WebDriver 支持,两者之间的界限变得有些模糊。现在可以先使用 PhantomJS 快速运行测试,然后(假设没有遇到严重错误)继续在 Selenium 设置中彻底执行相同的测试。
通过最近的 WebDriver 集成(正如 Ariya 所指出的),您现在可以使用 Selenium 来驱动 PhantomJS。
这是非常强大的。
您可以在每次签入时通过您的 CI 在无头 Unix 服务器上运行一组全自动 Selenium 测试(使用 PhantomJS 作为 WebDriver 实现)。然后,如果您想测试浏览器兼容性,您可以通过将底层 WebDriver 实现更改为 Chrome、Firefox 等来在本地运行测试。
我目前正在编写一个网络提取框架。我有 524 个测试使用 XPath 从 250 个网站获取数据。最初该框架使用 HTML 解析器 HTMLCleaner,但我目前正在研究使用Selenium,因为我需要 Javascript 支持。我已经针对 HtmlUnit、Chrome、Firefox 和PhantomJS 驱动程序运行了测试。以下是每种方法所花费的时间和失败次数的比较:
Failures Time (secs)
HtmlCleaner 0 82
HtmlUnit 169 102
Google Chrome 38 562
Firefox 46 1159
PhantomJS 40 575
一些评论:
在某些情况下,“失败”可能根本不是失败,可能是提取器失败了,因为 Javascript 正在重写 DOM。我正在分析失败以找出原因。
也就是说,HtmlUnit 是最快的 Selenium 驱动程序,但它也不可靠。这种不可靠性不仅仅与 Javascript 有关,在处理“混乱、肮脏、真实世界”的 HTML 时也存在问题,因为标签平衡算法似乎有问题。对此提出了一些问题,但尚未解决 - 请参阅HTML-UNIT 1423和HTML-UNIT 1046。
Firefox 是最慢的 Selenium 驱动程序,即使我禁用了图像加载和样式表。这是因为它的加载和初始化速度最慢,比 Chrome 慢得多,并且每次提取失败时我都需要重新加载驱动程序(在测试中,我创建了一个包含 5 个驱动程序的池,以减轻所有人的 URL 检索延迟Selenium 网络驱动程序)。
PhantomJS 比 Firefox 实现了更好的准确性,略低于 Chrome,但大约是 Firefox 的一半时间。更重要的是,我可以在我的开发盒上运行它,它不会通过启动多个浏览器来“接管我的机器”,这样我就可以继续工作了。
我强烈推荐 PhantomJS。
利用 Selenium 和 PhantomJS 的强大 功能 PhantomJS 具有无头浏览器功能,因此最好将其用作具有 selenium 的浏览器之一(除了 IE、Chrome 等传统浏览器之外)这种方法的优点:
我在使用 PhantomJS 时遇到的挑战:
我的应用程序为 Web 应用程序定价: