1.maven-surefire-plugin简介
Maven本身并不是一个单元测试框架,它只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这个插
件就是maven-surefire-plugin,也可以称为测试运行器(Test Runner),它能兼容JUnit 3、JUnit
4以及TestNG。
在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类。这组模式为:
- **/Test*.java:任何子目录下所有命名以Test开关的Java类。
- **/*Test.java:任何子目录下所有命名以Test结尾的Java类。
- **/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。
2.跳过测试
要想跳过测试,在命令行加入参数skipTests就可以了。如:
-
<
plugin
>
-
<
groupId
>
org.apache.maven.plugins
</
groupId
>
-
<
artifactId
>
maven-surefire-plugin
</
artifactId
>
-
<
version
>
2.5
</
version
>
-
<
configuration
>
-
<
skipTests
>
true
</
skipTests
>
-
</
configuration
>
-
</
plugin
>
有时候可能不仅仅需要跳过测试运行,还要跳过测试代码的编译:
-
mvn package -Dmaven.test.skip=true
也可以在pom中配置maven.test.skip:
-
<
plugin
>
-
<
groupId
>
org.apache.maven.plugin
</
groupId
>
-
<
artifactId
>
maven-compiler-plugin
</
artifactId
>
-
<
version
>
2.1
</
version
>
-
<
configuration
>
-
<
skip
>
true
</
skip
>
-
</
configuration
>
-
</
plugin
>
-
<
plugin
>
-
<
groupId
>
org.apache.maven.plugins
</
groupId
>
-
<
artifactId
>
maven-surefire-plugin
</
artifactId
>
-
<
version
>
2.5
</
version
>
-
<
configuration
>
-
<
skip
>
true
</
skip
>
-
</
configuration
>
-
</
plugin
>
3.动态指定要运行的测试用例
maven-surefire-plugin提供了一个test参数让Maven用户能够在命令行指定要运行的测试用例。如:
-
mvn test -Dtest=RandomGeneratorTest
也可以使用通配符:
-
mvn test -Dtest=Random*Test
或者也可以使用“,”号指定多个测试类:
-
mvn test -Dtest=Random*Test,AccountCaptchaServiceTest
如果没有指定测试类,那么会报错并导致构建失败。
这时候可以添加-DfailIfNoTests=false参数告诉maven-surefire-plugin即使没有任何测试也不要报错。
-
mvn test -Dtest -DfailIfNoTests=false
由此可见,命令行参数-Dtest -DfailIfNoTests=false是另外一种路过测试的方法
4.包含与排除测试用例
如果由于历史原因,测试类不符合默认的三种命名模式,可以通过pom.xml设置maven-surefire-plugin插件添加命名模式或排除一些命名模式。
-
<
plugin
>
-
<
groupId
>
org.apache.maven.plugins
</
groupId
>
-
<
artifactId
>
maven-surefire-plugin
</
artifactId
>
-
<
version
>
2.5
</
version
>
-
<
configuration
>
-
<
includes
>
-
<
include
>
**/*Tests.java
</
include
>
-
</
includes
>
-
<
excludes
>
-
<
exclude
>
**/*ServiceTest.java
</
exclude
>
-
<
exclude
>
**/TempDaoTest.java
</
exclude
>
-
</
excludes
>
-
</
configuration
>
-
</
plugin
>
5.生成测试报告
5.1基本测试报告
默认情况下,maven-surefire-plugin会在项目的target/surefire-reports目录下生成两种格式的错误报告。
- 简单文本格式——内容十分简单,可以看出哪个测试项出错。
- 与JUnit兼容的XML格式——XML格式已经成为了Java单元测试报告的事实标准,这个文件可以用其他的工具如IDE来查看。
5.2测试覆盖率报告
测试覆盖率是衡量项目代码质量的一个重要的参考指标。Cobertura是一个优秀的开源测试覆盖率统计工具(详见
http://cobertura.sourceforge.net/),Maven通过cobertura-maven-plugin与之集成,用户可
以使用简单的命令为Maven项目生成测试覆盖率报告。运行下面命令生成报告:
6.运行TestNG测试
TestNG是Java社区中除了JUnit之外另一个流行的单元测试框架。TestNG在JUnit的基础上增加了很多特性,其站点是
http://testng.org/
.添加TestNG依赖:
-
<
dependency
>
-
<
groupId
>
org.testng
</
groupId
>
-
<
artifactId
>
testng
</
artifactId
>
-
<
version
>
5.9
</
version
>
-
<
scope
>
test
</
scope
>
-
<
classifier
>
jdk15
</
classifier
>
-
</
dependency
>
下面是JUnit和TestNG的常用类库对应关系
JUnit类 |
TestNG类 |
作用 |
org.junit.Test |
org.testng.annotations.Test |
标注方法为测试方法 |
org.junit.Assert |
org.testng.Assert |
检查测试结果 |
org.junit.Before |
org.testng.annotations.BeforeMethod |
标注方法在每个测试方法之前运行 |
org.junit.After |
org.testng.annotations.AfterMethod |
标注方法在每个测试方法之后运行 |
org.junit.BeforeClass |
org.testng.annotations.BeforeClass |
标注方法在所有测试方法之前运行 |
org.junit.AfterClass |
org.testng.annotations.AfterClass |
标注方法在所有测试方法之后运行 |
TestNG允许用户使用一个名为testng.xml的文件来配置想要运行的测试集合。如在类路径上添加testng.xml文件,配置只运行RandomGeneratorTest
-
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
-
<
suite
name
=
"Suite1"
verbose
=
"1"
>
-
<
test
name
=
"Regression1"
>
-
<
classes
>
-
<
class
name
=
"com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest"
/>
-
</
classes
>
-
</
test
>
-
</
suite
>
同时再配置maven-surefire-plugin使用该testng.xml,如:
-
<
plugin
>
-
<
groupId
>
org.apache.maven.plugins
</
groupId
>
-
<
artifactId
>
maven-surefire-plugin
</
artifactId
>
-
<
version
>
2.5
</
version
>
-
<
configuration
>
-
<
suiteXmlFiles
>
-
<
suiteXmlFile
>
testng.xml
</
suiteXmlFile
>
-
</
suiteXmlFiles
>
-
</
configuration
>
-
</
plugin
>
TestNG较JUnit的一大优势在于它支持测试组的概念。如可以在方法级别声明测试组:
-
@Test
(groups={
"util"
,
"medium"
})
然后可以在pom中配置运行一个或多个测试组:
-
<
plugin
>
-
<
groupId
>
org.apache.maven.plugins
</
groupId
>
-
<
artifactId
>
maven-surefire-plugin
</
artifactId
>
-
<
version
>
2.5
</
version
>
-
<
configuration
>
-
<
groups
>
util,medium
</
groups
>
-
</
configuration
>
-
</
plugin
>
7.重用测试代码
当命令行运行mvn package的时候,Maven只会打包主代码及资源文件,并不会对测试代码打包。如果测试代码中有需要重用的代码,这时候就需要对测试代码打包了。
这时候需要配置maven-jar-plugin将测试类打包,如:
-
<
plugin
>
-
<
groupId
>
org.apache.maven.plugins
</
groupId
>
-
<
artifactId
>
maven-jar-plugin
</
artifactId
>
-
<
version
>
2.2
</
version
>
-
<
executions
>
-
<
execution
>
-
<
goals
>
-
<
goal
>
test-jar
</
goal
>
-
</
goals
>
-
</
execution
>
-
</
executions
>
-
</
plugin
>
maven-jar-plugin有两个目标,分别为jar和test-jar。这两个目标都默认绑定到default生命周期的package阶段运行,只是test-jar并没有在超级POM中配置,因此需要我们另外在pom中配置。
现在如要引用test-jar生成的测试代码包,可以如下配置:
-
<
dependency
>
-
<
groupId
>
com.juvenxu.mvnbook.account
</
groupId
>
-
<
artifactId
>
account-captcha
</
artifactId
>
-
<
version
>
1.0.0-SNAPSHOT
</
version
>
-
<
type
>
test-jar
</
type
>
-
<
scope
>
test
</
scope
>
-
</
dependency
>
分享到:
相关推荐
- 在执行编译或打包时,如果不想运行测试,可以加上`-DskipTests`参数,如`mvn package -DskipTests`。 8. **更新依赖**: - `mvn dependency:update` 用来更新项目所有的依赖到最新版本。 9. **显示依赖树**: ...
Maven 2 使用插件系统执行特定的任务,如编译代码、运行测试、打包应用等。每个插件都有一个或多个目标(goal),这些目标可以被绑定到生命周期的特定阶段。 **4. 配置与继承** POM 文件可以包含父POM引用,实现...
在Java开发中,Maven是一个广泛使用的项目管理和自动化构建工具。它可以用来管理项目所需的各种依赖关系,并且可以执行项目的构建、测试和打包等生命周期管理工作。不过,在使用Maven时,开发者可能会遇到“maven ...
Maven与Jenkins、Travis CI等持续集成工具兼容良好,可以在每次构建时自动执行测试,确保代码质量。 总之,Maven的Dependency测试是Java开发中至关重要的部分,通过合理地配置和管理依赖,可以保证项目的稳定性...
运行Maven的测试命令`mvn test`,Maven会自动编译源代码,执行测试,并报告测试结果。如果一切顺利,你会看到测试通过的消息。 此外,Maven还有一些其他重要的生命周期阶段,比如`compile`用于编译源代码,`package...
Maven默认的生命周期中包含了多个阶段,其中一个重要的阶段是`test`阶段,该阶段主要用于运行项目的单元测试。Maven使用`s surefire-plugin`插件来执行Java应用程序的单元测试,这个插件提供了丰富的配置选项来控制...
当代码提交并推送后,可以通过持续集成工具(如Jenkins)触发构建流程,自动执行Maven的部署步骤。 7. **自动更新**: 在开发环境中,如果设置了自动拉取远程仓库的依赖,当项目被发布到远程仓库后,其他依赖该...
- `mvn test`:运行测试。 - `mvn package`:打包项目,如生成jar或war文件。 - `mvn install`:将项目安装到本地仓库,供其他项目依赖。 - `mvn deploy`:将项目部署到远程仓库。 ### 五、Maven依赖管理 在`pom....
如果插件配置要求,它们将安装容器,创建本地独立配置,自动部署定义的部署单元到容器,并在父Maven实例退出时自动关闭容器。 通过以上知识点,可以看出在Maven下使用Cargo插件实现自动化部署Tomcat7的过程是相对...
在自动部署中,Maven可以执行编译、测试、打包等任务,确保代码的质量符合部署要求。 **Shell脚本** 是Linux或Unix环境下的命令行脚本,可以执行一系列操作,如复制文件、运行程序、修改文件权限等。在自动部署过程...
POM是Maven理解和操作项目的基础,通过解析POM,Maven能够执行各种构建任务,如编译源代码、运行测试、打包应用、生成文档等。 ### 构建生命周期 Maven的构建生命周期由一系列阶段组成,每个阶段代表构建过程中的...
当我们执行`mvn clean install`命令时,Maven将会按照以下顺序执行: 1. **clean**:执行Clean生命周期中的`clean`阶段,清理之前的构建结果。 2. **validate**:执行Default生命周期中的`validate`阶段,验证项目...
1. **maven install**:执行`install`命令,Maven会首先进行编译、测试(除非配置了跳过测试)和打包操作,然后将生成的工件(jar或war)安装到本地仓库。这意味着其他项目可以立即引用这个新版本的工件,而无需等待...
- **触发构建**: 设置定时任务或其他触发机制来自动执行构建和测试流程。 #### 总结 本文详细介绍了如何搭建基于Selenium3+Java+Maven+TestNG+ReportNG+SVN+Jenkins的自动化测试环境。通过这一系列的配置和设置,...
4. **执行命令**:在Maven项目中,我们通常使用命令行工具执行`mvn clean compile`来清理、编译项目,`mvn test`来运行测试,`mvn package`来打包项目,以及`mvn install`将项目安装到本地仓库。 5. **源码分析**:...
通过插件,可以扩展Maven的功能,执行如Javadoc生成、单元测试、性能测试、代码覆盖率报告等多种任务。例如,`maven-jar-plugin` 用于打包Java应用为jar文件,而`maven-surefire-plugin` 则用于执行单元测试。 在...
5. **执行构建**:通过`mvn clean compile`命令清理并编译项目,`mvn test`运行单元测试,`mvn package`打包应用。 ** Maven的常用命令 ** - `mvn clean`:清除上一次构建生成的目标文件。 - `mvn compile`:编译...
在本地进行Maven工程的自动发布,首先需要确保你的项目是一个有效的Maven项目,拥有正确的pom.xml配置,能通过命令行执行`mvn clean install`完成编译、测试和打包。 2. Maven打包:Maven的打包目标`package`会根据...
通过 Maven 可以自动化项目的构建过程,包括编译、测试、打包、部署等,并且能够管理项目的依赖关系,简化开发流程。 #### Maven 本地安装包制作 在给定的信息中,主要介绍了如何将 `alipay-sdk-java2010.jar` ...