什么是无头测试?
首先我们来看看什么是“浏览器”? 看起来像这样子
Headless测试是在不显示浏览器UI的情况下运行基于UI的浏览器测试。它在浏览器上运行测试或运行脚本,但浏览器没有进行UI部分的启动。
为什么要使用无头浏览器?
采用这种方法有很多优点和缺点。使用无头浏览器可能对浏览网页没有太大帮助,但对于自动化任务和测试来说,它是非常棒的。
为什么要关心无头浏览器的测试?
向钱看是老生常谈话题,但它却是一个我们测试发展中关键指标,为什么是真正的趋势,什么是我应该关注的。例如,Sauce Labs刚刚推出了一项名为Sauce Headless的新服务,这是一个基于云的Headless测试解决方案。
我知道sauce lab的人都很聪明。他们不会开发任何多余的东西,除非他们从用户那里得到反馈,说这是需要的功能。
我相信他们不会是唯一一个专注于无头测试的人。
随着我们在软件开发生命周期中越来越多的左移,我们需要越来越快地向开发人员提供反馈。一种方法是利用无头浏览器进行快速检查。
软件生产中的自动化
如果你了解我,你也会知道我是一个非常推崇自动化的人。
对我来说,自动化不仅仅只是自动化测试。
它是任何您可以自动化的东西,来节省人们在软件交付生命周期的任何部分的时间或精力---无论是开发、质量、测试、DevOps还是安装软件;我将其中任何一个过程都称为自动化。无头浏览器实际上也可以用于很多向这样的工作。
无头浏览器比真正的浏览器更快
无头浏览器的一个明显的“优势”是它们通常比真正的浏览器更快;
原因在于您没有启动浏览器GUI,所以您可以绕过真正的浏览器加载CSS、JavaScript、打开和呈现HTML所花费的所有时间。
但我必须承认,这并不完全像白天黑夜简洁明了。但使用无头浏览器时,您通常会看到性能提高了2倍至15倍。
因此,如果性能对您至关重要,那么无头浏览器可能是一个不错的选择。
利用无头浏览器爬网站数据
无头浏览器的另一个优点是,它们可以用来抓取网站。但是,要做到这一点,您不必手动启动一个网站。你可以不加思索地利用它,只抓取部分HTML。你不需要渲染一个完整的浏览器。
例如,你的工作需要研究统计一些体育数据,或比较不同网站之间的价格。
因为它只是您正在寻找的数据,所以没有必要启动一个完整的浏览器实例;这只是额外的开销-----有时候开销越少,返回结果的速度就越快。
它不一定是一个测试,这没关系。同样,您希望利用正确的工具来做正确的事情。
我还认为许多测试人员没有使用无头浏览器抓取-----这很遗憾。
因此,如果您想做一些网站抓取来帮助您进行测试,您将不需要启动一个成熟的浏览器;您可以使用无头浏览器来为您获得该功能。
节省开发人员的时间
我知道很多开发人员使用无头浏览器对他们的网站和移动应用程序的代码更改进行单元测试。在不需要手动刷新或启动浏览器的情况下,通过命令行就可以完成所有这些操作,从而节省了大量工作。例如,《PhantomJS烹饪书》的作者Rob Friesel在一次testtalk采访中解释了他的开发人员是如何使用PhantomJS无头浏览器的:
“虽然PhantomJs本身并不是一个测试框架,但它确实是煤矿里的一只很好的金丝雀,可以给你一些信心;如果你的测试通过了,你就可以对你的代码很有信心。”
使用无头浏览器脚本监视性能
另一个常见的用法是使用无头浏览器脚本监视网络应用程序的性能。
有些人甚至使用它来自动渲染和屏幕捕捉他们的网站图像,利用自动化方式来执行布局检查。
我想这就是为什么google还开发了一个名为Puppeteer的新的无头Chrome API,用于处理许多开发人员的用例。
无头浏览器测试的想法
除了我们已经讨论过的,下面是我遇到的一些无头浏览器的其他用途:
- 在没有界面的机器上运行测试
- 设置数据
- 测试SSL
- 在一台机器上模拟多个浏览器
- 在没有GUI的Linux OS这样的无头系统上运行测试
- 检索和呈现pdf文件
- 布局测试-由于无头浏览器渲染和解释CSS和HTML像一个真正的浏览器,你可以使用它来测试样式元素。
您可能不希望使用无头浏览器的例子
当然,使用真正的浏览器而不是无头浏览器的原因有很多。例如:
您需要模拟真实的用户
您需要直观地看到测试运行
如果您需要进行大量调试,那么无头调试可能会很困难。
Popular Headless Browsers
- Google Puppeteer---它提供了一个高级API,可以通过DevTools协议控制headless Chrome或Chromium。它也可以调整使用全(非无头)铬或铬。
- PhantomJS---是一个无头的WebKit脚本,带有JavaScript API。它对各种web标准(DOM处理、CSS选择器、JSON、画布和SVG)提供了快速和本机支持。*这已不再维持。正因为如此,你可能需要避免使用它。
- HtmlUnit---是一个“用于Java程序的无gui浏览器”。它为HTML文档建模,并提供一个API,允许您调用页面、填写表单、单击链接等等,就像您在“普通”浏览器中所做的那样。
- Splinter--- Splinter是一个以python为中心的无头浏览器选项。它是开源的,用于使用Python测试web应用程序。例如,您可以使用它来自动化浏览器操作,例如访问url并与它们的条目进行交互。
- jBrowserDriver--- 一个可编程的嵌入式web浏览器驱动程序,兼容Selenium WebDriver规范-无头,基于webkit,纯Java
什么时候使用无头浏览器进行测试?
那么,什么时候应该使用无头浏览进行测试呢?正如您所看到的,这取决于您的测试目标。
左派人士经常会说,“永远不要使用无头浏览器。”一个真正的用户永远不会使用它,那么为什么要使用它呢?与此同时,右翼人士会说,“你应该一直使用无头浏览器,因为它们总是更快,更快总是更好。”
然而,我们都知道,这并不总是一个对另一个,而是根据情况为正确的任务选择正确的工具。
记住——为工作使用正确的工具,并始终问自己它将如何影响最终用户,以及当在这两种方法之间做出决定时,测试的目标是什么。