https://sq.163yun.com/blog/article/173632756223238144

目前很多项目组的测试代码工程都是采用MAVEN+TESTNG的方式构造的。

因此测试代码project内的pom.xml就必不可少的有以下配置:

在pom.xml中配置testNG的依赖,以便自动下载应用于project

<dependencies>

[...]

<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>

<version>6.8.8</version>

<scope>test</scope>

</dependency>

[...]

</dependencies>

当然还需要有build中的插件配置:

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.16</version>

<configuration>

<suiteXmlFiles>

<suiteXmlFile>src/test/resources/basic.xml</suiteXmlFile>

</suiteXmlFiles>

</configuration>

</plugin>

简单说下maven-surefire-plugin是个什么插件,它是一个用于mvn 生命周期的测试阶段的插件,可以通过一些参数设置方便的在testNG或junit下对测试阶段进行自定义。然而大家的时候一般都会按我上面的例子去配置,很少用到一些灵活的参数,这样的会不利于我们的测试效率,违背了maven-surefire-plugin插件设计的初衷。

上面表格中的配置的意思就是默认指定了一个叫basic.xml测试集合。

执行命令:mvn clean test

这样执行的就是我想要的basci.xml里面的测试用例。

这样可以满足我们执行1个测试集的需求,然而当我们的工程里有多个测试集例如:a.xml b.xml c.xml的时候该怎么办呢?

第一、首先能想到的一个最原始的办法:修改pom.xml文件

将  <suiteXmlFile>src/test/resources/basic.xml</suiteXmlFile>这一行更改为a.xml,或者b.xml 然后执行mvn clean test。

操作步骤演示如下:

然而这样的话如果我想在持续集成里面连续运行多个执行集的话就不方便这样操作,因为需要使用shell语言去控制你要运行测试的命令,这样的话就想到两种方式:用sed替换文本,或者直接复制多个pom.xml文件,用的时候重命名一下,这里选用第二种方式。

第二、在工程下构造多个xml文件

例如pom_a.xml pom_b.xml,他们内容的区别就是maven-surefire-plugin的suiteXmlFile属性分别指向a.xml和b.xml。然后运行的时候使用对应的pom*.xml文件。

操作步骤演示如下:

但是这样的话还是会造成多个pom.xml文件,并且如果这些pom文件中涉及到depend依赖更新,就全部都需要更新一遍,造成不必要的维护工作量。而且感觉这样总不是根本办法。其实maven-surefire-plugin本身就支持指定不同的测试套件xml,只需要在pom中配置一下,使用相应的命令就可以调用执行对应的测试套件了。

第三、maven-surefire-plugin设置灵活的测试套件参数

将上述pom.xml中的    <suiteXmlFile>src/test/resources/basic.xml</suiteXmlFile>改为如下配置                    <suiteXmlFile>${suiteXmlFile}</suiteXmlFile>

然后在pom.xml中的properties里加一行<suiteXmlFile>testng.xml</suiteXmlFile>

注意testng.xml不需要改成对应的测试套件名称,只是定义了一个变量,因此执行不同的测试套件时不需要修改pom.xml文件。

pom.xml修改后如下所示:

<properties>

<suiteXmlFile>testng.xml</suiteXmlFile>

</properties>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.16</version>

<configuration>

<argLine>-Dfile.encoding=UTF-8</argLine>

<suiteXmlFiles>

<suiteXmlFile>${suiteXmlFile}</suiteXmlFile>

</suiteXmlFiles>

</configuration>

</plugin>

</plugins>

执行:mvn clean test -DsuiteXmlFile=src/test/resources/xml/a.xml 就可以调用你对应的a.xml中包含的测试用例了。

操作步骤演示如下:

是不是很简单呢,快快配起来吧

另外maven-surefire-plugin支持的一些常用命令参数列表见下:

mvn clean test -Dtest=Testabc 其中Testabc表示当前测试方法所在的测试类,不需要扩展名,即运行Testabc.java中的所有测试方法。

mvn clean test -Dtest=Test*c   其中以Test开头c结尾的所有类的所有测试方法都会运行。

更多maven-surefire-plugin的高级功能等待广大筒子进一步探索~

maven-surefire-plugin插件的更多相关文章

  1. 学习Maven之Maven Surefire Plugin(JUnit篇)

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

  2. maven surefire plugin介绍

    示例 <!-- 测试运行器,生成测试报告 --> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  3. maven release plugin插件

    1.打包版本区别 SNAPSHOT 快照版本(开发阶段,不稳定,容易出现bug)RELEASE 正式版本(外部依赖使用阶段,稳定,很少出现bug)Tag :标记每次代码提交的版本(比较稳定,类似分支) ...

  4. Maven版本管理-Maven Release Plugin插件

    一.什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基 ...

  5. 记录一次maven打包时将test目录下的类打包到jar中,Maven Assembly Plugin的使用

    今天有人问我打包后找不到主类,运行的类写在test中.按照常规,test目录下的文件不会打包到jar包中.(但是我测试一个springboot工程就可以,这里之后再研究) 具体解决如下 第一步:在po ...

  6. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  7. 学习Maven之Maven Enforcer Plugin

    1.Maven Enforcer plugin是什么鬼? 在说这个插件是什么前我们先思考这么一个问题:当我们开发人员进入项目组进行开发前,要准备开发环境,而领导总是会强调工具的统一,编译环境的统一.比 ...

  8. [Apache Maven Shade Plugin] [example] [001] 官方例子:includes-excludes

    链接地址:[Selecting Contents for Uber JAR](http://maven.apache.org/plugins/maven-shade-plugin/examples/i ...

  9. mavne install 报错org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException

    maven install 报错 org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.Invoc ...

  10. 施用 maven shade plugin 解决 jar 或类的多版本冲突

    施用 maven shade plugin 解决 jar 或类的多版本冲突   使用 maven shade plugin 解决 jar 或类的多版本冲突java 应用经常会碰到的依赖的三方库出现版本 ...

随机推荐

  1. each()和eq()

    今天工作的时候要遍历一个表格,于是我就想到了each(),也没看文档就开始写,大概是这么写的 $(".class").each(function(){ this.click(fun ...

  2. .NET面试题系列(一)基本概念

    什么是CLR CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底 ...

  3. JobEngine 基于quartz.net 跨平台作业框架

    github:https://github.com/zzhi/JobEngine 基于quartz.net 的跨平台作业框架 quartz.net(https://github.com/quartzn ...

  4. javascript在IE下不能用 trim函数解决方法

    javascript 的trim 函数在firefox 下面使用没有问题 <script language="javascript"> var test1 = &quo ...

  5. CSS浏览器兼容问题集-第二部分

    11.高度不适应 高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或paddign 时.   例:  #box {background-color:# ...

  6. js父页面和子页面相互取值

    iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head& ...

  7. JWT机制了解

    JWT简介 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象安 ...

  8. 深入理解Spring系列之三:BeanFactory解析

    转载 https://mp.weixin.qq.com/s?__biz=MzI0NjUxNTY5Nw==&mid=2247483824&idx=1&sn=9b7c2603093 ...

  9. ruby post json

    require 'net/http' require 'json' uri = URI('http://localhost/test1.php') req = Net::HTTP::Post.new ...

  10. Perl6多线程3: Promise start / in / await

    创建一个Promise 并自动运行: my $p = Promise.start({say 'Hello, Promise!'}); 如果把代码改成如下, 我们会发现什么也没打印: ;say 'Hel ...