maven-surefire-plugin
阅读数:192 评论数:0
跳转到新版页面分类
应用软件
正文
如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin。它是maven里执行测试用例的插件。
1、配置junit
(1)插件自动匹配
最简单的配置方式就是不配置或者只声明插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
</plugin>
(2)插件手动配置
明确用的是JUnit4.7及以上版本。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19</version>
</dependency>
</dependencies>
</plugin>
2、跳过测试用例
(1)在configuration中声明
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19</version>
</dependency>
</dependencies>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
(2)在properties中声明
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
或
<properties>
<skipTests>true</skipTests>
</properties>
(3)在执行命令中声明
mvn test -Dmaven.test.skip=true
或
mvn test -DskipTests=true
3、执行指定测试用例
(1)通过命令 -Dtest参数
执行多个测试用例可以用逗号分开,例如:
mvn test -Dtest=App2Test,AppTest
.
也可以用ant风格的路径表达式,例如:
mvn test -Dtest=*2Test
,mvn test -Dtest=???2Test
.
甚至指定具体的测试方法,例如:
mvn test -Dtest=*Test#testAdd
.
指定具体包里的测试用例,例如:
mvn test -Dtest=com/qyf404/learn/maven/*
.
(2)pom文件中指定
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19</version>
</dependency>
</dependencies>
<configuration>
<!--配置是否跳过测试用例执行-->
<!--<skipTests>true</skipTests>-->
<includes>
<include>**/AppTest.java</include>
</includes>
<excludes>
<exclude>**/App2Test.java</exclude>
</excludes>
</configuration>
</plugin>
<include>
和<exclude>
里的配置方式和-Dtest
后面的一样可以配置表达式:
-
指定具体类
<include>AppTest</include>
. -
指定具体类
<include>AppTest.java</include>
. -
指定具体类
<include>AppTest.class</include>
. -
指定具体类
<include>com/qyf404/learn/maven/AppTest.class</include>
. -
指定具体类
<include>com/qyf404/learn/maven/AppTest.class,App2Test</include>
. -
叹号[!]表示否定
<include>!*2Test.class</include>
. -
使用ant风格的路径表达式
<include>**/*Test</include>
. -
使用ant风格的路径表达式
<include>**/???Test</include>
. -
更复杂的
%regex[expr]
表达式<include>%regex[com.qyf404.learn.maven.*Test.class]</include>
. -
更复杂的
%regex[expr]
表达式<include>%regex[com.qyf404.*.*Test.class]</include>
. -
更复杂的
%regex[expr]
表达式<include>%regex[com.qyf404.[learn|test].*Test.class]</include>
,中间的方括号表示或的概念,即learn或test的情况. -
更复杂的
%regex[expr]
表达式<include>!%regex[com.qyf404.*.*2Test.class]</include>
,这里面的叹号表示否定,即包含不符合该表达式的测试用例. -
更复杂的
%regex[expr]
表达式<include>%regex[.*2Test.class]</include>
,这种配置方式忽略了包前缀,可以理解成倒着匹配全类名. -
更复杂的
%regex[expr]
表达式里最好不要有问号[?],而且匹配的是类的全类名. -
不可以指定具体方法,这种配置是错误的
<include>*Test#testAdd</include>
. -
不可以指定java文件在
%regex[expr]
里具体方法,这种配置是错误的<include>%regex[com.qyf404.learn.maven.*Test.java]</include>
. -
如果同时配置了
<include>
和<exclude>
,最终执行的测试用例是二者的交集.
4、分组执行测试用例
package com.qyf404.learn.maven;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
public class AppTest {
private App app;
@Before
public void setUp() {
app = new App();
}
@Test
@Category(com.qyf404.learn.maven.FastTests.class)
public void testAdd() throws InterruptedException {
int a = 1;
int b = 2;
int result = app.add(a, b);
System.out.println("---" + Thread.currentThread().getName());
Assert.assertEquals(a + b, result);
}
@Test()
@Category(com.qyf404.learn.maven.SlowTests.class)
public void testSubtract() throws InterruptedException {
int a = 1;
int b = 2;
int result = app.subtract(a, b);
System.out.println("---" + Thread.currentThread().getName());
Assert.assertEquals(a - b, result);
}
@After
public void tearDown() throws Exception {
}
}
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<groups>com.qyf404.learn.maven.SlowTests</groups>
</configuration>
</plugin>
5、若有测试执行失败则跳过其他测试
<configuration>
<skipAfterFailureCount>1</skipAfterFailureCount>
</configuration>
6、重新运行失败的测试用例
换句话说,当一个测试用例执行N次,有一次执行成功就认为成功.这个时候我们就需要配置一个参数,运行执行失败的此时用例重新执行.
<configuration>
<rerunFailingTestsCount>2</rerunFailingTestsCount>
</configuration>
7、并发执行测试用例
如果测试用例很多,而且并行执行时不会互相影响,这时我们可以配置一个线程数来加快测试用例的执行效率.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>