• 15
  • 15
分享
  • 前端代码覆盖率工具JSCover的使用——软件测试圈
  • 曼倩诙谐 2021-09-15 10:15:43 字数 2898 阅读 2770 收藏 15

  一 JSCover简介

  JSCover是测试JavaScript的代码覆盖率工具,它是基于流行的JSCoverage工具开发的,通过在浏览器中执行之前向JavaScript代码中插桩实现的。JSCover提供三种方式来测试代码的覆盖率:服务器模式(web server mode),文件系统模式(file-system mode),代理服务器模式(proxy server mode)。JSCover是一个测试JavaScript代码覆盖率的免费工具,在https://sourceforge.net/projects/jscover/files/网站中下载JSCover工具,这里以JSCover-2.0.12.zip这一版本为例进行展开说明。

  二 解压文件并打开cmd命令窗口

  将下载的zip文件进行解压,如下图1所示。在解压的文件夹中路径显示框中输入“cmd”命令,回车后显示cmd命令窗口,如图2所示。这一步也可以通过win+r打开命令行窗口,然后通过cd命令将路径修改为解压后的JSCover-2.0.12文件夹。

1-1.png

图1 解压后的JSCover-2.0.12文件

1-2.png

图2 cmd命令窗口

  三 设置浏览器

  为了能导出报告,需要使用火狐浏览器,这里需要将火狐浏览器的”privacy.file_unique_origin”设置为false,具体的操作如下:

  1.在火狐浏览器的地址栏输入”about:config”并回车;

  2.在下图3所示的搜索框中输入“uniq”便会出现“privacy.file_unique_origin”的属性;

  3.双击“privacy.file_unique_origin”,便将“privacy.file_unique_origin”修改为false。

1-3.png

图3 火狐浏览器privacy.file_unique_origin属性界面

  四 调用代码覆盖率工具

  在cmd命令行中输入命令“java -jar target/dist/JSCover-all.jar -ws --document-root=doc/example  --report-dir=target”并回车,这样便打开了web服务器。其中:

  “-jar target/dist/JSCover-all.jar”这句命令:指定特定的jar包JSCover-all.jar,由于解压后的jar包文件路径相对于JSCover-2.0.12文件夹的路径是不变的,因此这句命令在使用的过程中不用改变,直接使用。

  “-ws”指定JavaScript脚本代码覆盖率的测试方式是web server mode,即网络服务器的方式。具体使用过程中还可以使用-fs的方式,即file-system mode(文件系统方式),采用文件系统模式的操作会有所不同,具体可参考http://tntim96.github.io/JSCover/manual/manual.xml#gettingStartedFileSystem

  “--document-root=doc/example”指定源文件所在的文件夹,这里可以使用绝对路径或者相对路径的方式来指定源文件所在的位置。以笔者这里为例:JSCover的文件夹路径是“D:\wechat_file\WeChatFiles\wxid_fqebf782xigp22\FileStorage\File\2021-08\JSCover-2.0.12”,所要测试的源文件所在的文件夹的路径是“D:\wechat_file\WeChatFiles\wxid_fqebf782xigp22\FileStorage\File\2021-08\JSCover-2.0.12\doc\example”,这里如果选择绝对路径表示这句命令是“--document-root=D:\wechat_file\WeChatFiles\wxid_fqebf782xigp22\FileStorage\File\2021-08\JSCover-2.0.12\doc\example”,如果用相对路径表示这句命令是“--document-root=doc/example”

  “--report-dir=target”命令是指定生成报告所在的位置,这里也可以使用绝对路径或者相对路径,我这里使用的是相对路径,生成报告的位置是“JSCover-2.0.12/target”。

  在火狐浏览器中输入“http://localhost:8080/jscoverage.html”,进入JSCover界面,如下图所示。

1-4.png

图4 JSCover界面

  五 收集覆盖率数据

  在图3 JSCover界面的URL输入框中输入“http://localhost:8080/index.html”,然后点击“Open in frame”按钮,这样便将doc/example中的index.html加载到JSCover的界面中,如下图所示。

1-5.png

图5 index.html加载到JSCover界面

  点击“Summary”按钮可以查看到此时script.js文件的代码覆盖率情况,如下图所示。

1-6.png

图6 代码覆盖率情况

  点击script.js,便可以查看到代码的具体执行情况,如下图所示,红色代表未执行的部分,绿色代表已经执行的部分,点击info会显示更多的未覆盖信息。

1-7.png

图7 代码的具体执行情况

  点击“Browser”按钮,回到index.html的界面,选择“One”,如图8所示会显示一些提示信息,然后再点击“Summary”,如图9所示,可以看到此时代码覆盖率相比于图6有所增加。

1-8.png

图8 Browser界面

1-9.png

图9 Summary界面

  点击“Browser”按钮,回到index.html的界面,依次选择“Two”、“Three”、“Four”,进入Summary界面发现代码覆盖率再次增加。

1-10.png

图10 选择“Two”后代码覆盖率情况

1-11.png

图11 选择“Three”后代码覆盖率情况

1-12.png

图12 选择“Four”后代码覆盖率情况

  此时代码覆盖率和函数覆盖率都达到了100%,分支覆盖率是87%,打开“Source”界面,点击info,显示一些提示信息,如图13所示。

1-13.png

图13 显示未覆盖的原因

  六 导出报告

  如图14所示,点击“Store”后再点击“Store Report”,此时就将报告保存在先前在cmd命令窗口中设置的文件夹中,点击“Stop Server”便关闭了服务器。注意导出的html文件的报告需要用火狐浏览器打开,使用其他浏览器打开的话会出现报告覆盖率数值异常。

1-14.png

图14 JSCover的Store界面

  

  参考:

[1]http://tntim96.github.io/JSCover/manual/manual.xml#gettingStartedServerReportStorage

[2]https://github.com/tntim96/



作者:刘芝付、冯瑶   

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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   web网站的概念:  ·采用B-S结构;  · 能够交付一组复杂的内容和功能给大量的终端用户;  · WEB网站测试是用于测试高质量Web应用系统的过程;  web网站的特点:  网络集约性:驻留在网络上,且服务于变化多样的客户群。例如时下流行的门户网站或者网络游戏。它们都可以看成一个完善的大型Web应用系统,服务于各种客户群,但其本身只需要一个服务器端,用各式各样的客户端满足不同要求的客户。  内容驱动型:web网站一般都拥有一个广大的服务群体,其服务的内容,往往由这些群体的要求所决定。在大多数情况下,一个Web网站的主要功能是使用HTML(超文本标记语言)javas...
            0 0 923
            分享
          • python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest。pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:简单灵活,容易上手;支持参数化;能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html...
            15 15 1753
            分享
          •   对于经常接触代码的人来说,git以及github并不陌生。但是对于刚接触git环境的人,尤其是对于测试人来说,使用起来还是有一定难度的。  我想大部人对于这块的疑问有可能存在下面的几点:  1.没有全局观,不理解每个工具实现的功能,也就是不理解原理,只知道直接照着网上的教程走,以至于出现问题,不知道如何解决。  2.有的资料是直接命令,有的是通过工具,也就是实现方式不唯一,不确定自己到底想要以什么方式实现。  3.不知道注意的点。缺少技巧,比如某个命令执行了,但是就是不生效,原因有可能是一类问题。  针对上面的问题,逐一简单介绍一下。  每个工具职责  pycharm  pycharm是p...
            15 15 2026
            分享
          • 从本篇文章开始,我们一起来看看Spring AOP和Spring IoC是如何整合的,自动代理的过程做了哪些事情?首先我们得清楚 Bean 的加载过程,整个过程中会调用相应的 BeanPostProcessor 对正在创建 Bean 进行处理,例如:在 Bean 的实例化前,会调用 InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation(..) 方法进行处理;在 Bean 出现循环依赖的情况下,会调用 SmartInstantiationAwareBeanPostProcessor#getEarlyBeanRefer...
            0 0 1600
            分享
          •   Carina是一个基于Java的测试自动化框架,它将所有测试层结合在一起:移动应用程序(web、本机、混合)、web应用程序、REST服务和数据库。  github:https://github.com/zebrunner/carina  特点  Carina框架构建在最流行的开源解决方案(如Selenium、Appium、TestNG)之上,可以减少对特定技术堆栈的依赖。  Carina支持所有流行浏览器(即Edge、Safari、Chrome、Firefox)和移动设备(iOS/Android)。移动域的一个特殊特性是:它在IOS/Android之间重用测试自动化代码,高达70-80%...
            0 0 235
            分享
      • 51testing软件测试圈微信