• 1
  • 0
分享
  • 教你使用js代码覆盖率测试工具
  • 饭团🍙 2020-08-21 13:14:36 字数 2637 阅读 1975 收藏 0

  摘 要

  喂,你那个刚测好的页面怎么又出现了bug?这里怎么交互几次页面重绘就出了问题?你到底对前端测试用例的覆盖率有几分把握,真的没有测试遗漏嘛?对于这些疑问,正在看文章的你如果能够轻松应对,那么请关掉屏幕,本文与你关系不大,出去运动一下吧。但如果你也有类似的困惑,并且正在寻找衡量js代码测试完整度的方法,那么请继续阅读,文中介绍的js覆盖率工具会让你在完善前端测试用例的征途上,走的轻松一些。

  正 文

  众所周知,前端测试需求多、改动大,业务逻辑复杂又紧密,往往首轮设计的测试用例并不能完全覆盖所有的功能点和diff代码。这时,就需要代码覆盖率工具帮助我们发现测试未能覆盖到的代码分支和逻辑,js覆盖率测试工具也就随之诞生了。

  目前,活跃在舞台上的业界主流开源js覆盖率工具有ScriptCover,Istanbul和JSCover这三款,它们均是各自适用领域内的佼佼者,簇拥者甚多。其工作原理与Java或者C++代码覆盖率测试工具相同,均要经过"代码插桩"-"覆盖率信息收集"-"生成报告"这三个步骤。掌握了这三款工具的使用,相信你便可以应对日常工作中的大部分需求。但如果你的项目特点或者工作场景是这些现有工具不能完全满足的,不必担心,借助于它们功能强大的开源api,进一步开发封装,你也可以实现属于自己的覆盖率工具。这不,作者所在的测试团队就基于JSCover进一步开发出了一款全新的测试工具-JSCover++。JSCover++不仅增加了版本diff代码的覆盖率信息,同时也对工具的可靠性和易用性进行了大幅优化。

  下面就向各位看官逐一介绍这几款工具的使用,还不快搬小板凳来围观!

  一、现有主流工具

  1.ScriptCover

  ScriptCover是2011年google开发的一款开源、免费的js覆盖率统计工具,下载地址在这里:https://code.google.com/archive/p/script-cover/downloads。该工具作为chrome浏览器的扩展插件,我们可以直接在chrome上执行测试,工具自动收集用例的覆盖情况,并生成友好的可视化报告,使用起来非常方便简单。下面几个步骤便可轻松掌握ScriptCover。

  1)安装

  登陆上面链接地址,选择最新的ScriptCover-1.0.0.2.crx下载至本地。然后打开chrome浏览器的"扩展程序"页,将应用拖拽进来(本文使用的chrome版本是47.0.2526.106 m)。在弹出的提示窗内点击"添加扩展程序",授权安装即可,如图1。

  图1.jpg

图1 ScriptCover安装提示

  2)执行测试

  安装完毕, chrome的工具栏会显示ScriptCover的图标。接下来,我们就可以在相关页面进行自己的测试工作。得力于该工具与chrome浏览器的紧密结合,我们无需做额外的准备和配置,便可透明地开展测试。

  3)查看报告

  ScripteCover会帮助我们自动收集覆盖率信息,并生成标记的覆盖率报告。如图2,点击ScriptCover的图标即可查看页面下的所有js文件及测试用例涉及到的覆盖率信息。

图2.jpg

 图2 ScriptCover报告概要

  点击图2中的"See full coverage report",会得到报告的详情页,如图3。选中左侧的文件后,右边会出现该文件的覆盖率具体信息。绿色底覆盖的代码行,是测试用例覆盖到的,其余代码行则是未覆盖到的。由此,我们就可以分析未覆盖的代码来补充测试用例。  图3.jpg

图3 ScriptCover报告详情页

  ScriptCover使用简单,易上手,但对处理复杂js文件性能欠佳。更主要的是,该工具目前已经不被chrome官方商店支持,必须从外部自行添加至chrome,一旦关闭浏览器,该插件就会被chrome阻止使用,易用性反而大打折扣。

  2.Istanbul

  Istanbul不同于ScriptCover,它更关注Node.js环境下的javascript覆盖率。这款工具不需要浏览器这样的载体,它关注的是待测脚本自身的逻辑,需要我们在代码层面设计测试用例。

  Istanbul既可以静态地、直接统计目标js文件,也可以结合测试套件,在单元测试过程中,进行目标js文件的覆盖率统计。

  1)安装

  Istanbul是一个npm模块,安装非常简单,如下命令:

  $ npm install -g istanbul

  2)覆盖率测试

  假定待测试的脚本文件是simple.js:

  var a = 1;

  var b = 1;

  if ((a + b) > 2) {

  console.log('more than two');

  }

  使用istanbul cover命令,就能得到多种覆盖率信息,如图4。

  图4.jpg

图4 Istanbul测试报告示例1

  3)与测试框架结合

  若待测试脚本sqrt.js如下:

  var My = {

  sqrt: function(x) {

  if (x < 0) throw new Error("负值没有平方根");

  return Math.exp(Math.log(x)/2);

  }

  };

  module.exports = My;

  测试脚本test.sqrt.js如下:

  var chai = require('chai');

  var expect = chai.expect;

  var My = require('../sqrt.js');

  describe("sqrt", function() {

  it("4的平方根应该等于2", function() {

  expect(My.sqrt(4)).to.equal(2);

  });

  it("参数为负值时应该报错", function() {

  expect(function(){ My.sqrt(-1); }).to.throw("负值没有平方根");

  });

  });

  执行下面命令,便可得到代码覆盖率。

  图5.jpg

图5 Istanbul测试报告示例2

  通过以上的使用过程,大家可以看出,Istanbul更适合开发人员自测脚本使用。对于前端测试这个阶段来说,这种测试方法太过拘泥于代码细节,甚至会延误整个项目的上线计划。


作者:搜狗测试 武凯 王鹏   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   埃隆·马斯克旗下人工智能公司xAI最新推出了名为GroK的人工智能聊天机器人,并面向美国地区的Premium+ X 用户开放。据悉,Grok采用了名为Grok-1的模型,与目前OpenAI旗下的ChatGPT所使用的GPT-4模型不同。  但越来越的用户注意到,埃隆·马斯克的AI工具Grok的一些回答和ChatGPT几乎一模一样,这也让用户认为,Grok就是直接从竞争对手ChatGPT那里抓取内容。换句话说,Grok是在套壳ChatGPT?  目前来看,Grok的稳定性似乎有点问题,而且表现的颇为“叛逆”,在其回答中直接调侃其创始人埃隆·马斯克。“让我们谈谈你对X的迷恋。这就像你在试图弥补...
            0 0 740
            分享
          •   一般在面试开始时,面试官会让我们先自我介绍一下,自我介绍主要讲一下自己的教育经历,项目经历,主要工作内容,优缺点等等。  自我介绍完了之后,面试官会根据我们的自我介绍及简历上的信息进行提问,那么面试过程中都会问那些问题呢?  面试常见问题1:  介绍一下你最近做的一个项目  这可能是最常见的一个问题了,那么我们该如何回答呢?  首先将项目的主要流程及功能介绍一下,然后拿出最主要的一个模块,来详细的讲解一下。比如说我一个商城的项目,介绍完了商城的主要流程及功能之后,我们要挑选最主要的一个流程,比如购买商品流程来详细的讲解一下。  这个模块是干什么的(购买商品);都有哪些方式去购买(直接购买,...
            0 0 1321
            分享
          • 前因博主上周刚面试了一家恒生系的公司,貌似是恒生全资子公司,叫啥**云融。反正总结就是一个字,菜。为什么博主要攻击他呢,这其实是有缘由的。因为博主在做他家的笔试的时候,系统崩溃了,(笔试可能才几百人参加)说实话他们的并发是真的差啊,所以博主就想着对自己的项目进行一个并发测试,下面咱们就进入正题吧。测试环境Jmeter4.0,1核2G的Linux服务器,Chrome。测试步骤下载Jmeter4.0,并且Windows+R进入命令行,利用cd指令定位到Jmeter的bin目录,运行jmeter.bat文件,启动Jmeter。Jmeter中创建线程组,编辑线程组名称,线程数量,Ramp-up Per...
            0 0 7312
            分享
          • 1.系统需求分析调研并输出系统需求文档2.系统架构设计通常和第一步并行,并在系统需求文档中体现。第1和第2步都是系统层级的,下面应该分软件和硬件两个分支,这里我们只关注软件这个分支。3.软件需求分析输出软件需求文档,这部分工作通常是由软件部门负责人完成。4.软件架构分析输出软件方案设计文档,该部分工作由软件开发人员完成5.软件设计及单元测试输出软件详细设计文档和软件如果是基于模型开发的,需要经历模型->c代码的过程,期间伴随着MIL测试、SIL测试,以上测试统称为单元测试。如果是基于C代码开发的,需要进行单元测试,注意这里的单元测试不叫SIL测试。单元测试工作由软件开发人员完成。6.软件...
            0 0 1528
            分享
          • 软件测试其实就是对程序进行一些操作,来发现程序所存在的缺陷,衡量软件的质量,并对其是否能满足设计要求进行评估的过程。软件测试方法分类基于直觉和经验的方法Ad-hoc测试方法:强调测试人员根据自己的经验,不受测试用例的约束,放开思想,灵活地进行测试。ALAC测试方法:Act like a customer,像客户那样做,对常用的功能进行测试;错误推测法:有经验的测试人员根据自己的工作经验和直觉测出程序可能存在的错误,从而有针对性地进行测试。基于输入域的测试方法等价类划分法边界值分析法基于组合及其优化的方法判定表法因果图法pair-wise方法正交试验法基于逻辑覆盖的方法语句覆盖判定覆盖条件覆盖判...
            0 0 1146
            分享
      • 51testing软件测试圈微信