且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Maven中测试插件(surefire)的相关配置及常用方法

更新时间:2022-08-15 23:24:36


原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong

1. 在Maven中配置测试插件surefire

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
      </plugin>

2. 默认被执行的测试
   
   默认情况下,surefire会执行文件名以Test开头或结尾的测试用例,或者是以TestCase结尾的测试用例。
"**/Test*.java" - includes all of its subdirectories and all java filenames that start with "Test".
"**/*Test.java" - includes all of its subdirectories and all java filenames that end with "Test".
"**/*TestCase.java" - includes all of its subdirectories and all java filenames that end with "TestCase".</span>

3. 跳过测试   Skipping Tests
<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
       <span style="color:#009900;"> <configuration>
          <skipTests>true</skipTests>
        </configuration></span>
      </plugin>
    </plugins>
  </build>

补充:如果使用Junit或者TestNG也可以直接在当前测试方法上加注解@Ignore忽略,这是加了该注解的也都会被skip

4. 排除测试 Exclusions (Junit & TestNG 通用)
<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
         <span style="color:#009900;"> <excludes>
            <exclude>**/TestCircle.java</exclude>
            <exclude>**/TestSquare.java</exclude>
          </excludes></span>
        </configuration>
      </plugin>
    </plugins>
  </build>
5. 仅执行一个/一类测试(repeat)   Running a Single Test   (Junit & TestNG 通用)

在开发过程中配置命令:
mvn -Dtest=TestCircle test   test表示当前测试方法所在的测试类,不需要扩展名 The value for the test parameter is the name of the test class
mvn -Dtest=TestCi*le test    *表示任何
mvn -Dtest=TestSquare,TestCi*le test    如果测试类没有使用规范的命名,可以显示的直接指定测试方法的名称

Running a set of methods in a Single Test Class

With version 2.7.3, you can run only n tests in a single Test Class.
 NOTE : it's supported for junit 4.x and TestNG. 
You must use the following syntax
mvn -Dtest=TestCircle#mytest test
You can use patterns too
mvn -Dtest=TestCircle#test* test
As of surefire 2.12.1, you can select multiple methods (JUnit4X only at this time, patches welcome)
mvn -Dtest=TestCircle#testOne+testTwo test

6. 如何使用TestNG

<dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.3.1</version>
      <scope>test</scope>
    </dependency>
If  using an older version of TestNG (<= 5.11)
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>5.11</version>
      <scope>test</scope>
     <span style="color:#009900;"> <classifier>jdk15</classifier></span>
    </dependency>

默认会执行的测试用例*Test.java

7. 如何使用TestNG的 suite
<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
          <span style="color:#009900;"><suiteXmlFiles>
                <suiteXmlFile>testng.xml</suiteXmlFile>
            </suiteXmlFiles></span>
        </configuration>
      </plugin>
注意:This configuration will override the includes and excludes patterns and run all tests in the suite files.

原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong

8.  执行群组测试 execute one or more specific groups  (Junit & TestNG 通用)


 <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
         <span style="color:#009900;"> <groups>functest,perftest</groups></span>
        </configuration>
      </plugin>

9. 多线程的运行测试用例 Running tests in parallel (Junit & TestNG 通用)


<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
          <span style="color:#009900;"><parallel>methods</parallel>
          <threadCount>10</threadCount></span>
        </configuration>
      </plugin>

10. 如何使用Junit  Using JUnit


<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>
11. 如何使用Junit Category    Using JUnit Categories

<plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.11</version>
      <configuration>
       <span style="color:#009900;"> <strong><groups>com.mycompany.SlowTests</groups></strong></span>
      </configuration>
    </plugin>

仅有带该注解的测试 或者 是当前注解 类/接口的 子类 会被执行,
This will execute only those tests annotated with the @Category(com.mycompany.SlowTests.class) annotation and 
those tests annotated with @Category(com.mycompany.SlowerTests.class) if class/interface SlowerTests is subclass of SlowTests:
    public interface SlowTests{}
    public interface SlowerTests extends SlowTests{}
    ------------------------------------------------------------------------------------------------
public class AppTest {
      @Test
      @Category(com.mycompany.SlowTests.class)
      public void testSlow() {
        System.out.println("slow");
      }

      @Test
      @Category(com.mycompany.SlowerTests.class)
      public void testSlower() {
        System.out.println("slower");
      }

      @Test
      @Category(com.cmycompany.FastTests.class)
      public void testSlow() {
        System.out.println("fast");
      }
    }
参考:
Junit的@Category详解

12. 如何debug TestCases


mvnDebug -DforkCount=0 test   dubug非fork的测试
在debug的需求时,还是使用Eclipse最方便

13. 使用系统属性    Using System Properties

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
          <span style="color:#009900;"><systemPropertyVariables>
            <propertyName>propertyValue</propertyName>
            <buildDirectory>${project.build.directory}</buildDirectory>
            [...]
          </systemPropertyVariables></span>
        </configuration>
      </plugin>
    </plugins>
  </build>

14. 选择surefire provider
surefire 默认会根据工程的classpath中已有的Junit|TestNG的版本来选择 test-framework provider,我们也可以手动的选择和覆盖当前的provider
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.17</version>
    <dependencies>
      <dependency>
        <groupId>org.apache.maven.surefire</groupId>
       <span style="color:#009900;"> <artifactId>surefire-junit47</artifactId></span>
        <version>2.17</version>
      </dependency>
    </dependencies>
  </plugin>
目前已经提供的provider有surefire-junit3, surefire-junit4, surefire-junit47 and surefire-testng
参考:http://mvnrepository.com/artifact/org.apache.maven.surefire
注意:选择手动指定provider时,不要忘记安装test framework
15. class Loading issues
please refer to:
http://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html


原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong

1、别低估任何人。

——收敛自己的脾气,经常要保持沉默,因为冲动会做下让自己无法挽回的事情