如果你用Maven进行系统构建,同时还要同步编写测试用例,获取用例成功与否以及用例覆盖率的相关报告,那么这些工具你肯定接触过不少:

  • JUnit
  • TestNG
  • maven-surefire-plugin
  • maven-surefire-report-plugin
  • emma-maven-plugin
  • jacoco-maven-plugin
  • cobertura-maven-plugin
  • maven-project-info-reports-plugin
  • maven-site-plugin

是不是已经有些头晕了?没关系,我之前担任过很长时间的CI构建系统维护者,同时还是这里面几个Maven插件的Maintainer,我将尽最大努力帮你在最短的时间里理清他们的关系,帮助大家在实际项目中充分发挥这些工具的作用,提升产品质量。首先我们先大体分几个类别,让大家有个大概的印象。

  • JUnit/TestNG是单元测试工具,可以帮你更方便的编写测试用例。
  • maven-surefire-plugin是一个Maven插件,帮你在通过Maven构建项目的时候自动执行之前编写的测试用例。它的输出文件是txt或者xml格式的测试报告。
  • maven-surefire-report-plugin是一个Maven插件,帮你将maven-surefire-plugin生成的测试报告转换为html格式,方便查看。
  • emma-maven-plugin/jacoco-maven-plugin/cobertura-maven-plugin这些是帮助生成测试覆盖率报告的Maven插件,他们的输出文件也是html格式。
  • maven-project-info-reports-plugin是一个Maven插件,他可以把maven-surefire-report-plugin/emma-maven-plugin/jacoco-maven-plugin/cobertura-maven-plugin这些插件生成的html格式文件进行汇总,帮助大家以更好的方式呈现。
  • maven-site-plugin是一个Maven插件,帮你自动生成、部署、启动你的站点,站点里面可以有很多东西,其中最重要的部分就是你使用maven-project-info-reports-plugin生成的项目报告。

接下来我们根据之前的分类详细了解下他们:

JUnit/TestNG

JUnit是老牌单元测试工具了,从3.X,4.X到最新的5.X版本,一直有广泛的群众基础。TestNG和JUnit一样,也是为了方便编写单元测试用例的Java类库,诞生之初就宣称是JUnit的下一代产品,事实也确实如此,在功能和易用性方面,TestNG都要强过于4.X及其更早版本的JUnit,网上有很多两者的对比文章,其中比较有名的一篇如下,感兴趣的话大家可以仔细阅读下:

JUnit面对市场份额被TestNG不断蚕食的情况,研发了更加强大的JUnit 5版本,补齐了能力差距,易用性方面也有了更大的提升。因此大家如果可以选择的话,我个人推荐大家直接使用JUnit 5,功能和易用性丝毫不逊色,还有广大的群众基础,出现问题也方便更快的搜索到解决方案。那你用JUnit或者TestNG工具写完了单元测试用例,怎么执行呢?你可以在各种IDE(比如Eclipse或者IntelliJ IDEA)使用对应的插件来帮助运行这些测试用例,当然你甚至都可以不用IDE,配置好依赖,直接命令行运行这些测试用例。

但是如何在Maven项目中自动执行这些步骤呢?这就是maven-surefire-plugin所做的事情了。

maven-surefire-plugin

maven-surefire-plugin是Maven内嵌的一个插件,会帮助你在执行mvn test的时候自动执行用JUnit/TestNG编写的测试用例。

除了将用例执行结果打印到屏幕上之外,还会在target\surefire-reports目录下生成两种形式的用例执行结果:

但是xml和txt格式的报告文件不太方便查看,要是能以html格式展示就好,所以你需要maven-surefire-report-plugin

maven-surefire-report-plugin

maven-surefire-report-plugin的输入就是maven-surefire-plugin所产生的的xml后者txt格式的用例执行报告,输出就是html格式的用例执行报告。当你执行surefire-report:report时,你就会获得一个html格式的文件:

内容如下:

是不是感觉很丑?没有关系,我们可以利用maven-project-info-reports-plugin让他变得漂亮些。

maven-site-plugin/maven-project-info-reports-plugin

maven-site-plugin主要作用是帮你迅速生成(site:site)一个站点,并完成站点的部署(site:deploy)和启动(site:run)。当你执行site:site时,maven会同时调用maven-project-info-reports-plugin(所以如非定制要求,你可以不在pom.xml中配置maven-project-info-reports-plugin的依赖),生成一个项目框架结构,类似这种:

其实maven-project-info-reports-plugin还能根据你在pom.xml中配置的<project><reporting><plugins>配置的report插件,生成各种各样的项目报告,比如刚才说的maven-surefire-plugin生成的用例执行报告,和马上要说的用例覆盖报告。是不是感觉这里面展示的报告样式比直接打开surefire-report.html好多了?

[Emma/emma-maven-plugin][Jacoco/jacoco-maven-plugin][Cobertura/cobertura-maven-plugin]

这坨东西可以分为两类,一类就是检查Java用例覆盖情况的工具,另一类就是为了方便maven项目使用,开发出来的对应maven插件。其中Emma和emma-maven-plugin都很长时间没人维护了,所以我fork了这两个项目,并打算继续维护,目前为止已经解决了一些常见问题:

JaCoCo/jacoco-maven-plugin是同一个团队(EclEmma)在维护,EclEmma原本是一个Emma在Eclipse上的插件,但是在插件开发过程中越来越发现Emma在框架结构上的缺陷无法彻底解决,于是另起炉灶开发了JaCoCo,也就是说EclEmma现在除了名字外已经和Emma没有关系了。

三类用例覆盖工具中JaCoCo是最新的,也是对Java 8+新标准支持最好的,但是另外两个工具也有其特长,大家工作中根据实际情况选择即可。

远不止这些

前面介绍了测试用例执行情况和用例覆盖情况的报告,其实为了提升项目质量,可以提供很多种报告供大家使用,比如静态检查的findbugs、PMD等,我之前写过一个更加全面的工具汇总文章,大家可以参考:

https://www.cnblogs.com/jiangxinnju/p/10010177.html

理论说了一大堆,大家有没有一种冲动,把这些工具引用到自己的项目中去?这边有个例子供大家参考:

20分钟理清Maven构建中的测试相关工具的关系的更多相关文章

  1. Maven的学习资料收集--(四)使用Maven构建Web项目-测试

    2014-08-04 23:21 2人阅读 评论(0) 收藏 编辑 删除   目录(?)[+]   [-] 在srcmainjava下新建一个Servlet 修改webxml 新建JSP 测试   在 ...

  2. Maven构建跳过测试步骤

    有时候我们不想再执行maven的package或者install命令时每次都执行test,那么可以在pom.xml里的build->pluginManagement->plugins新增如 ...

  3. Maven学习- 使用Maven构建Web项目

    从网上查了一些资料,才算明白(也就是怎么操作吧),怎么使用Maven构建一个Web项目,找到一篇文档,主要都是从这里学到的: 下载地址:使用Eclipse构建Maven的Web项目.docx 现自己在 ...

  4. 利用Eclipse中的Maven构建Web项目报错(二)

    利用Eclipse中的Maven构建Web项目 1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.a ...

  5. [原]Jenkins(七)---jenkins项目编译测试发布由maven构建的web项目

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...

  6. 使用Maven构建和测试Java项目

    我们在创建项目时要学习的是如何使用 Maven 来创建一个 Java 应用程序.现在将学习如何构建和测试应用程序. 进入到 C:\MVN 目录我们准备创建来 java应用程序.打开 consumerB ...

  7. Java-Maven-Runoob:Maven 构建 & 项目测试

    ylbtech-Java-Maven-Runoob:Maven 构建 & 项目测试 1.返回顶部 1. Maven 构建 & 项目测试 在上一章节中我们学会了如何使用 Maven 创建 ...

  8. 只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找

    只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找

  9. 利用Eclipse中的Maven构建Web项目(三)

    利用Eclipse中的Maven构建Web项目 1.将Maven Project转换成动态Web项目,鼠标右键项目,输入"Project Facets" 2.依据Dynamic W ...

随机推荐

  1. 给我半首歌的时间,给你说明白Immutable List

    先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...

  2. Fortify Audit Workbench 笔记索引

    Password Management: Password in Configuration File(明文存储密码) https://www.cnblogs.com/mahongbiao/p/124 ...

  3. 【前端】H5,底边按钮吸边,但是覆盖了列表循环的内容

    我的说情况大致类似于: PS:因为底边那个模块 绝对是浮动的,所有会遮住列表最下面一条现实的一部分, 解决:这个时候把body的底边的内边距调整到可显示的就可以了: body { background ...

  4. vue同时安装element ui跟 vant

    记一个卡了我比较久的问题,之前弄的心态爆炸各种问题. 现在来记录一下,首先我vant是已经安装成功了的. 然后引入element ui npm i element-ui -S 接着按需引入,安装插件 ...

  5. TCP 服务器端

    """ 建立tcp服务器 绑定本地服务器信息(ip地址,端口号) 进行监听 获取监听数据(监听到的客户端和地址) 使用监听到的客户端client_socket获取数据 输 ...

  6. Linux 文件IO简单实例

    目录 简述 代码 编译运行 简述 Linux下的所有资源都被抽象为文件,所以对所有资源的访问都是以设备文件的形式访问,设备文件的操作主要包括:打开.关闭.读.写.控制.修改属性等.下面的示例代码主要是 ...

  7. 如何设置远程MongoDB!

    默认情况下V服务连接着本地mongoDB服务,如果想连接到其他mongoDB服务,请按如下设置: 方法一:通过控制台修改 进入控制台 http://x.x.x.x:xxxx/system/consol ...

  8. 001_centos7配置网络动态获取IP地址

    笔者今天刚装完centos7的虚拟机,发现无法获取IP地址,经过网上查询资料,发现centos7是默认没有网络配置的,需要手工配置. 而centos7与centos6不同,没有了config命令,所以 ...

  9. Python制作AI贪吃蛇,很多很多细节、思路都写下来了!

    前提:本文实现AI贪吃蛇自行对战,加上人机对战,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都一样) 实现效果: 很多人学习python,不知道从何学 ...

  10. Java自学-图形界面 容器

    Swing 的容器 JFrame和JDialog java的图形界面中,容器是用来存放 按钮,输入框等组件的. 窗体型容器有两个,一个是JFrame,一个是JDialog 步骤 1 : JFrame ...