美文网首页程序员
Maven 如何配置Integration Test

Maven 如何配置Integration Test

作者: 哈比猪 | 来源:发表于2016-09-08 11:52 被阅读0次

    集成测试(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
    

    相关文章

      网友评论

        本文标题:Maven 如何配置Integration Test

        本文链接:https://www.haomeiwen.com/subject/qyesettx.html