如果你用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. Java基础单词总结

    单词总结 Actualpayment --- 实际付款   Aggregatemount --- 合计金额      MemberPoints --- 会员积分 Management --- 管理   ...

  2. 数字转字符串&&字符串转数字

    一开始写错了呜呜呜 先是<< 再是>>

  3. Explain关键字解析

    Explain 用法 explain模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理你的SQL语句的.分析你的查询语句或是表结构的性能瓶颈. 语法:Explain + SQ ...

  4. Python for循环使用 else 语句

    Python for循环使用 else 语句: else:当 for 所有的语句代码块正常运行完,才会运行 else 语句. 示例: ''' for 迭代对象 in 序列: 代码块(一行语句或多行代码 ...

  5. 【JZOJ4726】种花 题解(贪心+堆)

    题目大意:在一个长度为$n$的环型序列中取出$m$个数使这$m$个数的和最大,且要求这$m$个数互不相邻. ---------------------- 考虑维护$nxt$和$lst$,即一个数的前驱 ...

  6. 2080ti的各种问题

    1.循环登录 https://blog.csdn.net/miclover_feng/article/details/79201865 2.多版本cuda切换 https://blog.csdn.ne ...

  7. “随手记”开发记录day07

    今天完成了关于我们页面中的相关信息,由于之前没有做过这个东西,只想着用一个view解决 可是发现我们整的太简单了,还是太年轻,最后想出来要跟java代码一起解决这个问题, 效果

  8. Jenkins持续集成(上)-Windows下安装Jenkins

    环境:Windows 2008 R2.Jenkins2.235.1: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成SLB.配置管理.Jenkins)> ...

  9. Webpack 定义process.env的时机

    定义 process.env的时机 如果已经提取了公共配置文件 webpack.common.js 分别定义了开发配置webpack.dev.js和生产配置webpack.prod.js 在webpa ...

  10. Spring同时集成JPA与Mybatis

    @ 目录 ORM Spring ORM Spring ORM 同时集成JPA与Mybatis 一.创建一个SpringBoot项目 二.建立用户信息登记表 三.Web应用项目集成mysql 四.添加S ...