• UID13914
  • 登录2016-12-26
  • 粉丝0
  • 关注0
  • 发帖3
  • 主页
  • 金币22枚
IMWeb团队 发布于2016-11-23 20:45
0/630

测试用例的那一回事

楼层直达

测试用例的那一回事
标签:javascript技术

本文作者:imweb coverguo 原文出处:imweb社区 未经同意,禁止转载

前言


最近,团队对测试用例十分的注重,因此,下面是我对测试用例的一些解析。首先,我们需要知道:为什么需要测试用例?
理由很简单,就是为了在测试用例的辅助下,编写出高质量,可维护代码。


问题


正如因为地震的爆发,才会有地震仪的诞生。 测试用例的诞生,也必然有其需要解决的问题:当我们在开发,我们往往会有以下的问题:

需求和开发脱节


当一份需求来了, 开发人员往往不能百分百的理解需求的内容(抛弃产品自己变更需求的可能性。。),这往往会让开发人员开发出的功能会有跟需求有所差别,这会带来额外的工作量

开发和测试脱节


什么是开发和测试脱节,说的是,当开发人员按照自己的想法开发完了一个需求。然后测试人员也按照自己的想法去测试这个需求,然后由于双方的分歧,导致测试认为开发有bug,开发认为测试是sb.那么如何解决上面的问题呢?
答案就是 选择一种软件敏捷开发模式


敏捷开发模式


目前比较流行的开发模式有两种: TDD 和 BDD

TDD (Test Driven Development 测试驱动开发)

  • 测试来驱动开发
  • 其重点偏向开发
  • 测试用例是在约束开发者,使开发者的目标明确,设计出满足需求的系统


BDD (Behaviour Driven Development 行为驱动开发)

  • 基于TDD发展,保持测试先行的理念
  • 其重点偏向设计
  • 在测试代码中用一种自然通用语言的方式把系统的行为描述出来
  • 将系统的设计和测试用例结合起来,进而驱动开发工作

两种方式各有其特点,我们通常选择的是BDD的方式


测试工具


为了,方便我们编写测试用例,我们需要使用一些可靠工具,以下是我认为比较好的前端测试用例工具。

Mocha 摩卡


Mocha(发音"摩卡")诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏览器和Node环境都可以使用。 通过Mocha, 我们可以安装基于mocha的规范,轻松的编写测试用例和管理测试用例。

Mocha测试脚本如何编写


对于mocha, 一个测试用例必定包含 describe和 it,来实现一个测试用例的具体模版 describe块 称为"测试套件"(test suite),表示一组相关的测试。 it块 称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位
以上的是同步情况的测试用例若我们需要测试异步代码时,只需要在每个it的回调中,增加done的参数,具体如下

Should JS 苏德 断言库


所有的测试用例(it块)都应该含有断言。 断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。 因此,我们在上面的测试用例添加断言:如下

Nock 诺克 HTTP响应mock工具


有时,我们可能需要模拟HTTP请求的响应数据 是否有工具可以简化呢?那就是Nock啦, Nock使用起来十分方便,API都十分简单名利
 var should = require('should'); var nock = require('nock'); var teacheModel = require('teacherModel'); //定义模拟的http请求的响应结果 var cgiData = {
        retcode:0,
        result: {
           num: 10,
        }
    }; //测试方法updateTeacherData describe('测试Module.updateTeacherData()', function() {  
        it('请求接口,能够正确处理数据', function() { //这里定义,get请求XXX.qq.com域名下的/cgi-bin/teacher/get_about的数据能返回200 //并且返回结果是cgiData nock('http://xxx.qq.com')
                .get('/cgi-bin/teacher/get_about')
                .reply(200, cgiData);

            testModule.getData({}, req, function(data){
                data.retcode.should.equal(0, 'teacher数据拿到, 不能正确处理');
            })
        });

    });

通过nock,直接模拟请求结果,这样我们就可以不考虑cgi的状态,而专注于model的逻辑测试

Istanbul 伊斯坦布尔 代码覆盖率检验工具


测试用例写好了, 怎么验证是否写得好? Istanbul是可以给出测试用例的代码覆盖率检验的工具如下面我们使用istanbul,可以看到我们的util.test.js的覆盖率情况
然后,如果想知道具体覆盖率情况,可以通过打开生成的报文去查看,如下面可以知道,哪些部分测试用例没有覆盖到

mochawesome


万事俱备?NO NO NO! 我们还需要更好的视觉体验 通过使用mochawesome工具,在当命令行运行 mocha 是增加 “ --reporter mochawesome ”参数,将测试用例运行情况转成更为直观的测试报文,如下:





补充


懂得如何编写测试用例,但仍需要有一套比较明确的编写规范和,编写教程,才能让项目的测试用例生生不息,持之以恒带来功效、

0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 77261/375   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 44171/191   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 43803/0   Python爬虫:常用浏览器的useragent

  • 40349/259   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 38046/145   省时省力的Android组件群来了,非常棒的原型参考

  • 29329/142   2016抢红包软件及源码

  • 29005/2   超全!整理常用的iOS第三方资源

  • 28891/71   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 23649/159   Android版类似UC浏览器:非常赞,产品级的源码

  • 22611/30   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 22305/25   Android工程师面试题大全

  • 22171/27   2016程序员跳槽全攻略

  • 21769/9   GitHub上排名前50的iOS项目:总有一款你用得着

  • 20717/20   码魂:程序员的牛B漫画

  • 18815/10   2016年最全的Android面试考题+答案 精编版

  • 18682/85   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 18554/42   一个绚丽的loading动效分析与实现!

  • 18549/73   【持续更新中】Android福利贴(二):资料源码大放送

  • 18545/3   吐槽那些程序员的搞笑牛逼注释

  • 17474/1   iOS 动画总结

  • 17326/45   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 17138/81   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 16975/104   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 16865/23   个人收集的Android 各类功能源代码

  • 16361/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 16268/21   Android福利第三波【Android电子书】

  • 16253/10   女程序员的梦,众网友的神回复

  • 16136/53   基于瀑布流的美女图片浏览App,有注释的源代码

  • 16121/17   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 16031/81   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 15945/11   年会上现场review代码是怎么样的体验!

  • 15798/0   iOS中文版资源库,非常全

  • 15773/23   珍藏多年的素材,灵感搜寻网站

  • 15085/18   65条最常用正则表达式,你要的都在这里了

  • 14594/15   基于Android支付宝支付设计和开发方案

  • 14009/17   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 14003/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 13673/46   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 13496/0   GitHub iOS 库和框架Top100 

  • 13393/7   用程序员的姿势抢过年的火车票

  • 13356/7   一张图搞定iOS学习路线,非常全面

  • 13240/61   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 12964/10   成为Java顶尖程序员 ,看这11本书就够了

  • 12889/10   微信支付终于成功了(安卓,iOS),在此分享

  • 12810/18   一张图搞定Android学习路线,非常全面

  • 12558/29   【持续更新中】Android福利贴(一):资料源码

  • 12502/3   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 12209/4   46 个非常有用的 PHP 代码片段

  • 11762/3   即时通信第三方库

  • 11271/8   流媒体视频直播方案

  • 11194/18   八个最优秀的Android Studio插件

  • 11070/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 10898/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 10804/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 10719/10   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 10071/6   开箱即用!Android四款系统架构工具

  • 9890/10   十大技巧快速提升Android应用开发性能

  • 9810/3   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 9711/1   Android性能优化视频,文档以及工具

  • 9668/3   一张图看清Linux 内核运行原理

  • 返回顶部