Casperjs / PhantomJs vs硒


150

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

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

Answers:


183

他们正在攻击不同的问题。由于PhantomJS可以在命令行上完美运行,因此无论作为开发工作流的一部分还是在持续集成服务器中,它都适合作为烟雾测试的第一层。Selenium面向多个浏览器,因此对于确保跨浏览器的一致性并在不同操作系统之间进行广泛的测试非常有用。

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

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


感谢您的回答。任何可以帮助我了解人们如何使用phantomjs在实际生产应用中收集与性能相关的统计信息的链接。
spirit3189

34
Ariya Hidayat有望成为PhantomJs的创作者
塞巴斯蒂安·帕滕

看来,您描述的开始使用PhantomJS编写测试然后使用Selenium的工作流程假定完全重写了测试...您可以直接将PhantomJS脚本与Selenium一起使用吗?
lajarre 2015年

1
感谢出色的PhantomJS @AriyaHidayat!:)
rinogo '17

49

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

这是非常强大的。

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


41

我目前正在编写一个Web提取框架。我有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 1423HTML-UNIT 1046

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

  • PhantomJS的准确性比Firefox更好,略低于Chrome,但大约是Firefox的一半。而且,我可以在开发箱上运行它,而不会通过启动多个浏览器来“接管我的机器”,因此我可以继续工作。

我强烈推荐PhantomJS。


1
使用phantomJS运行测试套件需要9分钟?那一定感觉像永远一样……
凯文

@Kevin是的:)-但是HTMLCleaner是标准测试,我将使用JUnit类别标记为将其他测试标记为可选,因此它们不属于标准单元测试
Mark Butler

谢谢。是的,我一直在进行完整的js测试,它们是如此出色-像几页测试那样需要15-20秒。也许我需要调整“冰川”的比例:)奇怪的是,如果我手动进行操作,则只需约5秒钟即可单击表格。
凯文(Kevin)

1
@lucaswxp是的!以及之间的许多其他项目。正如我在上面解释的那样,没有完美的选择。当时,我使用了HtmlCleaner,但是如果要提取的页面需要它,则添加了使用PhantomJS的选项。
Mark Butler

1
@iconoclast否-不幸的是,前雇主拥有IP。
Mark Butler

2

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

  1. 可以用于对CI中的Web应用程序进行完整性检查(即使代理计算机没有IE或chrome),测试也可以有效运行。
  2. 一些开发团队使用这种方法来获得快速结果,并消耗更少的时间和资源。
  3. 幻影JS的最大功能是屏幕捕获,使用多线程运行并行测试,这将大大减少您的执行时间。

1

使用PhantomJS时遇到的挑战:

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

  1. 有时,在chrome浏览器上运行良好的定位器在phantomJS上不起作用。
  2. 有时,在通过硒执行双击或上下文单击时,我不得不额外检查一下,以首先验证操作是否未单击。
  3. 缓存和cookie的持久性。完成注销后再登录的数据保留在缓存中。| 因此,我们对chrome进行了测试。
  4. 我发现“文件上传问题”是最重要的问题之一。我们无法在应用程序的phantomJs浏览器中上传文件。我们尝试了很多事情javascriptexcutor,jqueries,但它们都没有起作用。因此,我们也在Chrome上执行了此测试。注意:我们在框架中广泛使用了javascript函数来与PhantomJS的Web元素进行交互。一件事可以肯定,PhantomJS的执行时间非常短。因此,是否要功能/性能取决于客户的优先级,然后再选择它。如果要测试端到端方案,请选择chrome。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.