欢迎使用CSDN-markdown编辑器

maven surefire plugin介绍

1.surefire plugin的作用
surefire 插件用来在maven构建生命周期的test phase执行一个应用的单元测试。它会产生两种不同形式
的测试结果报告:
1).纯文本
2).xml文件格式的
默认情况下,这些文件生成在工程的${basedir}/target/surefire-reports,目录下(basedir指的是pom文件所在的目录)。
它可以运行任何testNG,Junit,pojo写的单元测试
2.如何使用?
使用该插件很简单,使用mvn surefire:test或者mvn test都可以运行工程下的单元测试。
3.如何配置
1.依赖配置:
1).如果你是使用TestNG,那么可以按照这个配置:
在pom文件中引入testNG依赖:


org.testng
testng
5.12.1
test

不过如果你使用的版本过低(<= 5.11),就得这么配置了:


org.testng
testng
5.8
test
jdk15

很多人对classifier会有点陌生,事实上maven的包名是这样构成的

--.。(这里仅仅是针对编译后的jar包,如果是sources或者javadoc,则会变成---.,这里可以替换成sources或者javadoc)。那么按照这个规则,testng在maven仓库里完整的包名就应该是:

testng-5.8-jdk15.jar

classifier主要是用来区分不同环境或者不同jdk版本的。

2).如果你使用了Junit,那么引入这个依赖:


junit
junit
4.8.1
test

2.插件配置


org.apache.maven.plugins
maven-surefire-plugin
2.10

methods
10

这是一个很简单的配置,事实上这个插件版本已经很老了,另外它只指定了一些基本参数。但是即使如此它已经可以让你在命令行下运行mvn test或者mvn surefire:test,这样它会扫描测试类目录下(src/test/java)的测试类,只要类名符合*Test.java,那么这个测试类就会被运行。

但是这个配置似乎不太令人满意,因为它实在是没什么可以扩展的,例如我想使用jmockit,我想启动多个线程运行单元测试,我想运行某些单元测试,某些单元测试我想排除掉,这些怎么做到呢?我们继续看吧。

3.高级配置

首先给出良权限项目的配置。

parent pom.xml文件中添加插件:


org.apache.maven.plugins
maven-surefire-plugin
2.5

com.alibaba.external:test.testng
-javaagent:”${settings.localRepository}/com/alibaba/external/test.jmockit/0.999.10/test.jmockit-0.999.10.jar”
true
true
false
once

src/test/resources/testng.xml


(上面这段是本人推荐的配置)

我们观察下,多出的参数都是configuration下的。我们分别作出解释:

testNGArtifactName这个参数指明了testng jar包所在的artifactId

argLine 用来配置jvm参数,很明显我们可以推测出这是为启动一个新的jvm做准备的

useSystemClassLoader 这个故名思意,不解释

testFailureIgnore 这个决定是否忽略失败的单元测试继续跑其它的

关于forkMode需要特别解释下:

Maven运行测试用例时,是通过调用maven的surefire插件并fork一个子进程来执行用例的。forkmode属性中指明是要为每个测试创建一个进程,还是所有测试在同一个进程中完成。

forkMode 可设置值有 “never”, “once”, “always” 和 “pertest”。

pretest: 每一个测试创建一个新进程,为每个测试创建新的JVM是单独测试的最彻底方式,但也是最慢的,不适合hudson上持续回归

once:在一个进程中进行所有测试。once为默认设置,在Hudson上持续回归时建议使用默认设置。

always:在一个进程中并行的运行脚本,Junit4.7以上版本才可以使用,surefire的版本要在2.6以上提供这个功能,其中 threadCount:执行时,指定可分配的线程数量。只和参数parallel配合使用有效。默认:5。
always
methods

4

suiteXmlFiles 这个参数的作用是决定单元测试运行的规则,这个规则在文件中指定。

我们使用了相对路径src/test/resources/testng.xml,那么这个文件应该在每个工程的该路径下,我们打开一个工程,例如permission应用的testng.xml,看下它配置了什么。

testng.xml文件的内容:








这个文件指定了运行哪个package下的单元测试,事实上配置哪些需要运行,哪些不需要运行还可以有很多方式和纬度。

例如你可以指定跑哪些class:









你可以指定跑哪些group:













关于suite的东西,有兴趣的同学可以google suite查看相应的配置。

到这儿就完美了么?

当然不是,有个很大的问题,我们的插件是配置在parent pom.xml里的,这意味着每个子工程都继承这段配置,因此都需要在相应的目录下配置一个testng.xml文件。那么如果我不想对某些工程运行单元测试,又不想配置这个文件怎么办呢?

方法1,在configuration添加属性:


true

可是很明显,因为这个配置只在parent pom.xml中出现,这么配置会让所有单元测试都不能运行。

这跟你运行mvn install -DskipTests或者mvn install -Dmaven.test.skip=true是一样的效果。

方法2,在不需要运行单元测试的pom.xml文件中添加property,例如permission应用的web工程pom:


com.alibaba.lp.app
permission.parent
1.0-SNAPSHOT

permission.web.perm
permission web perm project


你可能感兴趣的:(maven,maven)