maven-surefire-plugin 插件详解

发表于:2017-11-16 16:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:felayman    来源:51Testing软件测试网采编

  简介
  Maven通过Maven Surefire Plugin插件执行单元测试。(通过Maven Failsafe Plugin插件执行集成测试)
  在pom.xml中配置JUnit,TestNG测试框架的依赖,即可自动识别和运行src/test目录下利用该框架编写的测试用例。surefire也能识别和执行符合一定命名约定的普通类中的测试方法(POJO测试)。
  生命周期中test阶段默认绑定的插件目标就是surefire中的test目标,无需额外配置,直接运行mvn test就可以。
  Maven Surefire Plugin
  要求:
  Maven 2.2.1 or 3.x
  JDK 1.6 +
  推荐 Maven 3.1.0 +
  surefire插件是在程序运行的测试阶段被使用以执行单元测试用例.它生成两种格式化的测试报告:
  text文本(.txt)
  XML 文件(.xml)
  默认情况下,生成的测试报告文件会在${basedir}/target/surefire-reports/TEST-*.xml目录下
  目标和概要
  surefire插件只有一个目标:
  surefire:test : 运行单元测试文件
  用法
  基本配置如下,下文中的配置项如无特殊说明,都位于pom文件的节点中。
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
  ......
  配置内容
  ......
    </configuration>
  </plugin>
  常用通用配置
  1.跳过测试阶段
  <skipTests>trueskipTests>
  或者
  mvn install -DskipTests
  mvn install -Dmaven.test.skip=true
  2.忽略测试失败
  Maven在测试阶段出现失败的用例时,默认的行为是停止当前构建,构建过程也会以失败结束。有时候(如测试驱动开发模式)即使测试出现失败用例,仍然希望能继续构建项目
  <testFailureIgnore>truetestFailureIgnore>
  或者
  mvn test -Dmaven.test.failure.ignore=true
  3.包含和排除特定的测试类
  surefire默认的查找测试类的模式如:
  */Test.java
  **/*Test.java
  **/*TestCase.java
  自定义包含和排除模式,支持ant-style表达式和 正则表达式(%regex[…], 按.class文件匹配而不是.java)
  <includes>
      <include>Sample.javainclude>
      <include>%regex[.*[Cat|Dog].*Test.*]include>
  <includes>
  <excludes>
      <exclude>**/TestCircle.javaexclude>
      <exclude>**/TestSquare.javaexclude>
  <excludes>
  4.运行指定的用例
  指定测试类
  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+)
  5.并发执行测试
  (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)。
  用例
  Using TestNG
  Using JUnit
  Using POJO Tests
  Skipping Tests
  Skip After Failure
  Inclusions and Exclusions of Tests
  Running a Single Test
  Re-run Failing Tests
  Class Loading and Forking
  Debugging Tests
  Using System Properties
  Configuring the Classpath
  Selecting Providers
  Fork Options and Parallel Test Execution
  Using Console Logs
  Shutdown of Forked JVM
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号