前端测试,或者UI测试一直是业界一大难题。最近Q.js使用Karma作为测试任务管理工具,本文在回顾前端测试方案的同时,也分析下为什么Q.js选用Karma而不是其他测试框架。

像素级全站对比

曾今有一批人做过这样的UI测试,即最终页面图像是否符合预期,通过图片差异对比来找出可能的问题。

如图所示,所谓像素级站点对比,即利用截屏图像前后对比来找出,站点前后差异,从而发现问题。

Q: 为什么需要这种测试呢?

A: CSS容易被破坏,在大型响应式重构案例中,像素级全站对比是一个比较好的测试方案。

目前常用的两大工具:

录制型测试

比较经典的有Selenium,本质上提供了编码型测试,但是因为提供了录制功能,所以广泛被用于录制测试。

编码测试

即通过编写代码来测试UI,但由于各种兼容性问题,这里出现了各种方案。

JsTestDriver式

即启用一个服务器,然后让测试浏览器链接该服务器,便可自动运行测试任务,下面是BusterJS中的一个演示:

  • 启动服务器

  • 打开测试浏览器,并连上服务器,按下按钮使得服务器捕获该浏览器

  • 在服务器发起一次测试,则每个被捕获的浏览器都会跑一次测试用例

静态测试

即通常的打开一个页面进行测试,下面是Mocha的静态测试页面例子:

无头浏览器测试

即通过无头浏览器,如:PhantomJSSlimerJS来进行测试

持续集成测试

这个就需要看持续集成系统能提供什么浏览器支持了,一般至少可以提供PhantomJS来进行测试,比较优秀的持续集成系统有:

下面是Backbone在Sauce Labs里的测试,可见,可使用各种浏览器进行测试:

Karma

Karma是一个测试任务管理工具,可以很容易和Jasmine、Mocha等市面上常用的测试框架打通,通过其插件可以快速集成到各种环境中。例如:本地环境、持续集成环境。

她可以使我们只需输入一行命令就就行测试,并在文件进行修改后,重跑一次用例,过程就像用NodeJS进行测试一样一样的。

所以目前在各大开源项目中使用,下面是使用Q.js进行测试的完整输出:

bogon:Q.js miniflycn$ gulp test
[23:58:30] Using gulpfile ~/github/Q.js/gulpfile.js
[23:58:30] Starting 'test'...
INFO [framework.browserify]: 70617 bytes written (0.30 seconds)
INFO [framework.browserify]: bundle built
INFO [karma]: Karma v0.12.35 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
INFO [launcher]: Starting browser PhantomJS
INFO [Chrome 41.0.2272 (Mac OS X 10.10.2)]: Connected on socket YFLQOvttbrfH9Mmxvqeu with id 10368837
WARN [web-server]: 404: /favicon.ico
INFO [PhantomJS 1.9.8 (Mac OS X 0.0.0)]: Connected on socket E1mb7b7zs7Ugi4u-vqev with id 68559341 Start:
data
✔ should able to get a vm data
✔ should able to set a vm data
✔ should able to pop a vm data
✔ should able to unshift a vm data
✔ should able to shift a vm data
✔ should able to call indexOf for a DataArray
✔ should able to call splice for a DataArray
✔ should return itself when key is undefined
✔ should able to watch vm change
✔ should able traversing a array which has some property
✔ should able to watch push method
class
✔ should able to define & require a hello component
✔ should able to create a child component
✔ should able to set the data of a children component
custom
✔ should able to create a custom filter
✔ should able to toggle class
✔ should able to set a class
if
✔ should able to use if directive
attrbute
✔ should able to set src
✔ should able to set attribute
on
✔ should able bind event
repeat
✔ should able repeat
✔ should able push a data
✔ should able splice a data
✔ should able multiple repeat
✔ should not throw a error when repeat element has been modified
✔ should throw a error when a filter hasn't implemented
✔ should able to use double repeat
utils
✔ should find a element
✔ should able to copy a array use slice
✔ should able check contains
✔ should able to set and get data
✔ should able to add & remove event
✔ should able to extend objects
✔ should able to extend from multiple srouces
✔ should able to add & remove class
✔ should able to check a object Finished in 2.447 secs / 2.318 secs SUMMARY:
✔ 78 tests completed

在这个构成中,Karma会根据我们设定的配置,自动在本地启动ChromePhantomJS进行测试。

那么我们为什么选择用Karma来测试呢?

  • 方便集成测试
  • 较为通用的开源解决方案,google出品
  • Q.js 是一个js库,不需要像素级测试,由于是程序员我们也不需要录制测试,我们需要的是静态测试(开发阶段)、以及持续集成测试(集成阶段)
  • 可以根据不同环境,选择不同浏览器进行测试。例如原来我们只能使用PhantomJS进行测试,现在我们可以在集成系统中使用FirefoxPhantomJS进行测试,在本地环境我们还可以ChromeIE进行自动化测试。如果有钱,我们更可以购买Sauce Labs(关键没钱= =)的服务来得到更多浏览器支持。

前端测试回顾及我们为什么选择Karma的更多相关文章

  1. 前端测试框架Jest系列教程 -- 简介

    写在前面: 随着互联网日新月异的发展,用户对于页面的美观度,流畅度以及各方面的体验有了更高的要求,我们的网页不再是简单的承载文字,图片等简单的信息传递给用户,我们需要的是更加美观的页面展示,更快的浏览 ...

  2. 前端测试框架对比(js单元测试框架对比)

    前端测试框架对比(js单元测试框架对比) 本文主要目的在于横评业界主流的几款前端框架,顺带说下相关的一些内容. 测试分类 通常应用会有 单元测试(Unit tests) 和 功能测试(Function ...

  3. 前端测试框架jest 简介

    转自: https://www.cnblogs.com/Wolfmanlq/p/8012847.html 作者:Ken Wang 出处:http://www.cnblogs.com/Wolfmanlq ...

  4. 前端测试框架 Jest

    前端测试工具一览 前端测试工具也和前端的框架一样纷繁复杂,其中常见的测试工具,大致可分为测试框架.断言库.测试覆盖率工具等几类.在正式开始本文之前,我们先来大致了解下它们: 测试框架 测试框架的作用是 ...

  5. 前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)

    写在前面: 在JavaScript代码中,异步运行是很常见的.当你有异步运行的代码时,Jest需要知道它测试的代码何时完成,然后才能继续进行另一个测试.Jest提供了几种方法来处理这个问题. 测试异步 ...

  6. 前端测试框架Jest系列教程 -- Matchers(匹配器)

    写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...

  7. 前端测试框架Jest系列教程 -- Mock Functions

    写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...

  8. 前端测试框架Jest系列教程 -- Global Functions(全局函数)

    写在前面: Jest中定义了很多全局性的Function供我们使用,我们不必再去引用别的包来去实现类似的功能,下面将列举Jest中实现的全局函数. Jest Global Functions afte ...

  9. 前端测试框架Jest系列教程 -- Expect(验证)

    写在前面 在编写测试时,我们通常需要检查值是否满足某些条件,Jest中提供的expect允许你访问很多“Matchers”,这些“匹配器”允许您验证不同的东西. Expect 可以验证什么 Jest中 ...

随机推荐

  1. Python-pycharm

    进入博客园的第一篇随笔,作为一个编程菜鸟,最近在学习Python,为毕设做准备.总觉得Python自带的idle不太好用,一位“大鸟”向我推荐了pycharm,于是我就抱着试试看的态度下了一个,目前感 ...

  2. hibernate cascade=CascadeType.All

    因为时间关系,我在这里测试的环境是一对多的关系里面用到的注解方式的级联,网上也有很多贴子,我也看过了,但是呢,我还是自己总结一下吧,这觉得级联是单向的,不是双向的,意思就是说,我们在设置两个类的对象之 ...

  3. jQuery官方基础教程笔记(转载)

    本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...

  4. 黑马程序员_Java基础:多功能小窗口,swing,io,net综合应用

    ------- android培训.java培训.期待与您交流! ---------- 概念原理的理解,不代表能熟练应用. 如果将多个知识点关联并应用起来,这能加快我们对知识的掌握. 作为一个初学者, ...

  5. Mac上创建cocos2d-x工程

    1.自选版本-下载 http://www.cocos2d-x.org/download 2.解压(自选路径) 3.在cocos2d-x解压目录下新建 Projects 文件夹. 3.打开终端 4.进入 ...

  6. java知识点--重写与重载

    重载(Overload): (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现.      ...

  7. 捉BUG记(To Catch a Bug)

    大约有一年整没有写一篇博客了,由于各种原(jia)因(ban)导致闲暇时间要么拿着IPad看岛国奇怪的片(dong)子(hua).要么拿着kindle看各种各样的资(xiao)料(shuo).本来想写 ...

  8. SRS用列建模

    基本规则: 五子棋是两个人之间进行的竞技活动,由于对黑方白方 规则不同,黑棋必须先行.五子棋专用盘为 15×15 , 五连子的方向为横.竖.斜. 禁手是对局中被判为负的行棋手段.白棋无禁手. 在棋盘上 ...

  9. C语言位运算详解[转]

    作者:911 说明:本文参考了http://www2.tsu.edu.cn/www/cjc/online/cyuyan/,算是对其的修正,在此将本文列为原创,实有抄袭之嫌疑.甚是惭愧! 位运算是指按二 ...

  10. Unity3D——相机跟随物体移动

    public Transform target; public float moveSmooth=5f; Vector3 offset; void Start () { offset = transf ...