Maven 如何配置Integration Test

集成测试(Integration Test)简介

在很多项目的实际开发过程中,上线之前是需要做很多测试的,典型的有unit-test,function-test(有些项目不用),integration-test,E2E-test等,unit-test是代码粒度的测试,一般是伪造一些输入来测试函数粒度的功能,而integration-test往往需要系统部署后之后才能进行相应的测试,是系统级别输入的功能测试,所以我们在实际的代码打包过程就不能让integration-test提前执行,需要deploy新的代码,重启系统之后再执行integration-test,否则由于没有运行着的系统,integration-test是无法通过的

Maven生存期

Maven本身支持的命令(Goals)是有顺序的,越后面执行的命令,会将其前面的命令和其本身按顺序执行一遍,具体的顺序如下所示:

validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test
prepare-package
package
pre-integration-test
integration-test
post-integration-test
verify
install

从上面maven的生存期可以看出,install命令是最复杂的goal,它会将所有的goals都执行一遍,最终生成项目包,并发布到本地的或者配置的.m2仓库中,那问题就来了,我们如何使其能够在install的时候不执行某些goals呢,比如我们的integration-test就是个例子。

配置POM.XML

实际上POM.XML提供了很强大的配置功能,这里利用一个maven的插件,叫maven-failsafe-plugin,具体配置如下:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.17</version>
        <executions>
            <execution>
                <id>integration-tests</id>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
                <configuration>
                    <excludes>
                        <exclude>none</exclude>
                    </excludes>
                    <includes>
                        <include>**/*IT.java</include>
                    </includes>
              </configuration>
            </execution>
        </executions>
</plugin>

这里创建了一个execution,当执行integration-test goal的时候,执行包括“IT.java”结尾的所有java文件,那如何跳过unit test,integration-test呢?看下面利用了另外一个插件,叫maven-surefire-plugin,如下配置:

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>2.6</version>
       <configuration>
              <skip>false</skip>
       </configuration>
</plugin>

通过skip标签来指定跳过test的行为,默认是支持skipITs和skipTests,前者是跳过integration-test,后者是跳过所有的测试(稍微说明下,跳过测试方法有很多种,比如maven-failsafe-plugin本身也支持加入skip选项,只不过实现之后每个命令的含义就略微有不同了,大家选择自己最习惯的就好了).

Maven 命令

有了上面的配置,我们就可以执行相应的run commands了,具体每个命令的含义如下:

  • 打包
mvn package
  • 跳过所有测试(BTW, 测试文件还是会被编译的)
mvn package -DskipTests
  • 推荐的测试目录结构
Unit Test Classes        : src/test/java/**/**Test.java
Integration Test Classes : src/test/java/**/**IT.java
TestCases dependent files: src/test/resources/*
  • 编译并且只运行unit test
mvn clean test
  • 编译并且只运行integration-test
mvn failsafe:integration-test
  • 运行unit test和integration-test
mvn clean integration-test
  • 发布包并且不运行任何的测试
mvn install -DskipTests
  • 发布包并且只运行unit-test
mvn clean install -DskipITs
  • 发布包并且运行ut加it
mvn clean install
    原文作者:哈比猪
    原文地址: https://www.jianshu.com/p/e638d64b6955
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞