从PhantomJS迁移到node-webkit:自动化测试框架简单比较

jopen 10年前
注* PhantomJS 和 node-webkit 是基于Webkit实现的一套用Web技术实现跨平台桌面程序应用的解决方案,PhantomJS此前多用于自动化测试方面。Node-Webkit是由 Intel公司开源技术中心的王文睿(Rogerwang)发起的一个开源项目,此项目将node与webkit进行了融合。

我的网站有一些兼容性测试组件;从不同的网页截图然后同期望的图片进行对比。


这个周末,我从PhantomJS 迁移到了node-webkit,我很高兴做成了这件事。


comparison.png

好的方面


  • node_modules/ 下的模块仍然可以使用 (比如没有 process 是 undefined 的问题)
  • node_modules/ 可以自动通过require获取

不好的方面


  • node-webkit 的启动时间较长
  • 需要定义index.html和package.json去加载node友好的上下文。
             这一点可以通过封装一层脚本来解决。(比如为它创建一个node的模块)


一些坑


  • 这里有一些并发的问题,如果同一时间截两张图就需要手动kill掉这个进程。
             否则你偶尔会看到一些白色的截图
  • node-webkit@0.10.5会偶尔在链接下面出现下划现。实际上不应该出现的。
            升级到node-webkit@0.11.1就可以了
  • 需要使用Xvfb去扩大桌面载图的尺寸(比如2000的高在1080的分辨率下)
  • 需要使用 Vagrant 去匹配 Travis CI 渲染

为什么不用atom-shell?


我刚开始用的是atom-shell。但是最近的版本在截图上有BUG(0.19.3)


最新可以捕捉屏幕截图的版本(0.17.2)缺少一个机制,从网站读取数据时node-integration被禁用。这将无法保证该网站是否尽可能准确。

为什么不用Selenium?


Selenium也许是目前截图最精确的。然而它的配置,安装和维护都没有node-webkit容易。

更外,我希望尽早验证node-webkit是不是PhantomJS脚本的一个很好的替代者。



注* node-webkit 与 atom-shell 都是基于 node.js 和 Chromium 实现的一种使用Web技术实现桌面程序的解决方案,他们有哪些不同呢?以下来译自: Technical differences to Node-Webkit

1. 应用入口
node-webkit的入口是一个网页,而atom-shell的入口是一个JS脚本,这一点跟phantomjs比较像。

2. 编绎流程
Atom-shell使用 libchromiumcontent 访问Chromium的上下文API,而无需编绎整个Chromium项目,较低配置的机器就可以完成编绎。

3. Node集成
在Node-Webkit中需要修改Chromium的源代码完成集成(注* 比如在一次访谈中
Rogerwang曾经提到,node-webkit将node和Chromium的EventLoop进行了合并),而atom-shell将使用了不同的集成方式(参见第四条),从而避免对chromium的源代码进行修改。

4. 多个上下文
如果你是Node-Webkit用户,你可能知道Node Context(上下文)和Web Context,
通过 multi-context, atom-shell没有在网页中引入新的JavaScript 上下文。

注* atom-shell 是由github开发的,在github是一家比较有影响力的开源公司,node社区应github的要求在v0.12版本中加入了这个特性(尚未发布,参见: multi-context)。类似在一个事件循环中实现多个线程? 但这也不可避免地将node.js变得复杂了一些。
原文地址: twolfson.com
来自:http://ourjs.com/detail/54792b570dad0fbb6d000005