原文链接:https://www.cnblogs.com/pixy/p/4718176.html

  • 对maven-surefire-plugin有想了解的,看这篇:https://blog.csdn.net/sinat_28317385/article/details/108492517

基本配置

  • 如下,下文中的配置项如无特殊说明,都位于pom文件的节点中。
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration>......      配置内容      ......</configuration>
</plugin>

常用通用配置

跳过测试阶段

<skipTests>true</skipTests>
  • 或者
mvn install -DskipTests
  • 或者 (Compliler插件也会根据该参数跳过编译测试类)
mvn install -Dmaven.test.skip=true

忽略测试失败

  • Maven在测试阶段出现失败的用例时,默认的行为是停止当前构建,构建过程也会以失败结束。有时候(如测试驱动开发模式)即使测试出现失败用例,仍然希望能继续构建项目。
<testFailureIgnore>true</testFailureIgnore>

或者

mvn test -Dmaven.test.failure.ignore=true

包含和排除特定的测试类

  • surefire默认的查找测试类的模式如下:
**/Test*.java
**/*Test.java
**/*TestCase.java
  • 自定义包含和排除模式,支持ant-style表达式和 正则表达式(%regex[…], 按.class文件匹配而不是.java)
<includes><include>Sample.java</include><include>%regex[.*[Cat|Dog].*Test.*]</include>
</includes>
<excludes><exclude>**/TestCircle.java</exclude><exclude>**/TestSquare.java</exclude>
</excludes>

运行指定的用例

  • 指定测试类
mvn -Dtest=TestClassName test
mvn -Dtest=TestCi*le test
mvn -Dtest=TestSquare,TestCi*le test
  • 指定单个测试类中的多个方法(Junit4+, TestNG)
mvn -Dtest=TestCircle#mytest test
mvn -Dtest=TestCircle#test* test
mvn -Dtest=TestCircle#testOne+testTwo test   #(Surefire2.12.1+, Junit4.x+)

并发执行测试

  • mvn命令加-T选项,多模块项目的各个模块可以并行构建。

  • 两个方式:

方法一

  • 是使用parallel 参数,在一个进程中执行多个线程。
  • Junit4.7+可用值有:
methods,classes,both(classesAndMethods),suites, suitesAndClasses,suitesAndMethods,classAndMethods,all。 
  • Junit Runner必须继承自orig.junit.runners.ParentRunner或为指定@org.junit.runner.RunWith。

  • 线程数配置:

useUnlimitedThreads 为true,不限制线程数。useUnlimitedThreads 为false时可以使用threadCount和perCoreThreadCount参数。还可以通过threadCountSuites,threadCountClasses,threadCountMethods在不同粒度限制线程。parallelTestsTimeoutInSeconds和parallelTestsTimeoutForcedInSeconds参数设置线程的超时时间。Junit中@NotThreadSafe注解的内容会单线程执行,避免并发。 

方法二

  • 是使用forkCount参数,创建多个测试进程。
如果forkCount参数值后加C,表示乘以CPU核数(如forkCount=2.5C)。reuseForks表示一个测试进程执行完了之后是杀掉还是重用来继续执行后续的测试。默认配置为forkCount=1/reuseForks=true。进程的测试单元是class,逐个class的传递给测试进程。可以用systemPropertyVariables 传入系统参数(mvn test -D...或配置元素),也可以使用argLine传入JVM选项。argLine或者systemPropertyVariables配置里中也能用${surefire.forkNumber}占位符,代表每个进程自己的fork编号(1...n),用来向每个进程传入独立的资源配置(forkCount=0时,该占位符值为1)。如果使用-T n同时执行多个mvn模块,每个模块都会有forkCount个进程,${surefire.forkNumber}的值为1..n*forkCount。
  • surefire2.14之前的版本使用forkMode进行配置,对应关系如下。
Old Setting New Setting
forkMode=once (default) forkCount=1 (default), reuseForks=true (default)
forkMode=always forkCount=1 (default), reuseForks=false
forkMode=never forkCount=0
forkMode=perthread, threadCount=N forkCount=N, (reuseForks=false, if you did not had that one set)

多种并行方式组合

只要forkCount不为0,就可以和-T组合。forkCount=0, 或forkCount=1/reuseForks=true,可以和parallel自由组合。forkCount的测试进程是按类为单位执行的,测试类整个整个的传到测试进程中执行。reuseForks=false或forkCount>1时,就会使用独立的测试进程,所以parallel=classes就失效了。但是还是可以组合parallel=methods/threadCount=n指定每个测试进程里的并发线程数。

POJO测试

  • 不使用测试框架,直接编写名称为**/Test类,其中的test方法也会被surefire执行。
  • 类中定义的public void setUp()和public void tearDown()方法也会被surefire识别。
  • 验证可使用JAVA assert关键字。
  • 无法并发执行。

TestNG

  • TestNG默认查找执行test包下的*Test.java。Pom.xml中添加TestNG依赖就能执行testng测试。
  • 指定SuiteXML文件
<suiteXmlFiles><suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
  • 为TestNG @Parameters 注解提供参数
<build><pluginManagement><plugins><!-- 添加maven-surefire-plugins插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration><!-- 设置参数--><systemPropertyVariables><phone>123456789</phone><pwd>abcd1234</pwd><propertyName>${phone}</propertyName><propertyName>${pwd}</propertyName></systemPropertyVariables><suiteXmlFiles><!--此处testng.xml即为要运行的testng.xml文件 --><suiteXmlFile>testng.xml</suiteXmlFile></suiteXmlFiles></configuration></plugin></plugins></pluginManagement>
</build>
  • testNG通过@Parameters({ “phone”, “pwd” })获取参数
@Test
@Parameters({ "phone", "pwd" })
public void test(String phone, String pwd) {System.out.println("phone:"+phone);System.out.println("pwd:"+pwd);
}
  • 指定group
<groups>functest,perftest</groups>
  • 指定Listeners和Reporters

  • TestNG支持在测试时附加自定义的listener, reporter, annotation transformer, method interceptor。默认会使用基本的listener生成HTML和XML报告。

  • Listener实现org.testng.ITestListener接口,会在测试开始、通过、失败等时刻实时发送通知。

  • Reporter实现org.testng.IReporter接口,在整个测试运行完毕之后才会发送通知,参数为对象列表,包含整个测试的执行结果状况。

<properties><property><name>usedefaultlisteners</name><value>false</value> <!-- disabling default listeners is optional --></property><property><name>listener</name><value>com.mycompany.MyResultListener,com.mycompany.MyAnnotationTransformer,com.mycompany.MyMethodInterceptor</value></property><property><name>reporter</name><value>listenReport.Reporter</value></property>
</properties>

JUnit

  • 指定Listener(JUnit4+)
<properties><property><name>listener</name><value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value></property></properties>
  • 指定Categories(Junit4.8+)。分组可以用在测试方法或测试类上。Junit使用接口和类的类型分组,选择注解为@Category(基类)的分组时,所有注解了@Category(子类)的分组也会被选中。
<groups>com.mycompany.SlowTests</groups>
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");}}
  • Security Manager
<argLine>-Djava.security.manager -Djava.security.policy=${basedir}/src/test/resources/java.policy</argLine>
  • Junit3还可以如下配置(forkCount为0时):
<systemPropertyVariables><surefire.security.manager>java.lang.SecurityManager</surefire.security.manager>
</systemPropertyVariables>

其他不常用的通用配置

  • 失败重跑
mvn -Dsurefire.rerunFailingTestsCount=2 test   #(JUnit需要4.x版本)
  • 指定VM参数
<argLine>-Djava.endorsed.dirs=...</argLine>
  • 调试
    默认情况下,surefire在新的进程中执行,命令mvn -Dmaven.surefire.debug test创建的测试进程会等待远程调试器(Eclipse)连接到5005端口。要配置不同的端口命令为:
mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test
  • 如果forkCount选项配置为0(mvn -DforkCount=0 test),不会创建新的测试进程,测试在maven主线程中执行。命令mvnDebug -DforkCount=0 test会使maven以调试模式运行,可以将远程调试器连接到maven进程。

maven-surefire-plugin常用配置相关推荐

  1. maven deploy plugin_学习Maven之Maven Surefire Plugin

    1.maven-surefire-plugin是个什么鬼? 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了.maven- ...

  2. maven surefire的executions配置

    以前一直稀里糊涂的配置surefire插件,还出现用例被执行2次的问题.现在刚搞清楚,原来是我多配置了一个execution导致的. 每个execution都可以配置一套不同的参数,execution ...

  3. 【maven】pom常用配置

    前言 mvn:3.5.0 eclipse:4.7 此处所说的配置,均为修改pom.xml文件 指定JDK版本 指定使用JDK1.8 <project>...<properties&g ...

  4. maven安装以及常用配置,idea如何配置maven

    maven安装,解压缩即可 配置环境变量 新增一个环境变量,变量名为MAVEN_HOME,变量值为D:\softwareDir\apache-maven-3.6.3(替换为你的maven地址即可):在 ...

  5. maven配置testng_TestNG Maven Surefire插件配置

    maven配置testng TestNG Maven surefire plugin configurations let us define which tests to execute when ...

  6. Maven pom.xml 全配置(二)不常用配置

    Maven pom.xml 全配置(二)不常用配置 这里贴出Maven pom.xml文件中使用率较少的配置参数,如果此篇文档中没有找到你想要的参数,移步Maven pom.xml 全配置(一)常用配 ...

  7. Maven pom.xml 全配置(一)常用配置

    Maven pom.xml 全配置(一)常用配置 这里贴出一个Maven中出现频率较高的配置参数注释,方便理解项目中Maven的配置具体的作用.如果在此博文中没有找到你想看到的参数,可以移步Maven ...

  8. maven运行时的配置及命令详解

    上面是指定端口运行程序的,也可以先指定好,直接在上面的地方写jettty:run           当然,如果你是在控制台运行且安装了maven,直接可以进入项目的文件中:mvn jetty:run ...

  9. Maven的安装、配置及使用入门

    原文地址为: Maven的安装.配置及使用入门 本书代码下载 大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联 ...

  10. IDEA常用配置和常用插件及常用快捷键

    欢迎转载,转载请注明出处! 知乎:迷人滴海嘉 思否:迷人滴海嘉 简书:迷人滴海嘉 前言 本人使用 IntelliJ IDEA 两年多了,觉得还是非常好用的.在使用过程中总结了个人的IDEA常用配置和常 ...

最新文章

  1. 世界级Linux技术大师首次公开大量技术内幕
  2. iOS 修改搜索框的样式为白色
  3. 【PAT乙级】1091 N-自守数 (15 分)
  4. Java压缩html
  5. 微软亚洲研究院谭旭:AI音乐,技术与艺术的碰撞
  6. 机器学习近年来之怪现状
  7. android ListView控件滑动时出现黑色背景问题解法方案
  8. Python之函数参数介绍
  9. Num37 spring 事务 ssh整合
  10. Atitit.软件仪表盘(7)--温度监测子系统--电脑重要部件温度与监控and警报
  11. ps污点修复画笔用法和案例:去除脸上痘痘
  12. ThunderSoft Apple Music Converter Mac(drm限制解除工具)
  13. 39 项目实战---购物+转账系统
  14. 由和与加数进行凑数的遍历算法
  15. Python脚本操作Excel实现批量替换
  16. java工程师主要是做什么的?我来聊聊如何提高自身的工作水平
  17. 新手学网站建设解疑与技巧1200例
  18. 转] 动漫电影 剧集 (怕自己有一天不小心忘了,写下来记住)
  19. 盘点那些具有特色的写作软件
  20. 颜料增效剂市场现状及未来发展趋势

热门文章

  1. ubuntu php开发工具
  2. 查询瀚高数据库的创建时间
  3. multisim收敛助手有啥用_Multisim 收敛助手报告
  4. hr面试性格测试30题_人事面试--测试篇--30
  5. C++ string类的使用
  6. GO 打开WINDOWS的默认浏览器
  7. 龙芯电脑usb和硬盘两种方式安装系统
  8. 龙芯LoongArch电脑上用dh-make打包deb包
  9. vue综合项目——悦听音乐播放器
  10. python函数找钱_找钱问题–动态规划一例