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. [转]memmove、memcpy和memccpy

    原文地址:http://www.cppblog.com/kang/archive/2009/04/05/78984.html 在原文基础上进行了一些小修改~ memmove.memcpy和memccp ...

  2. errno错误号含义

    errno0 : Success errno1 : Operation not permitted errno2 : No such file or directory errno3 : No suc ...

  3. bzoj 1072 状压DP

    我们用w[i][j]来表示,i是一个二进制表示我们选取了s中的某些位,j表示这些位%d为j,w[i][j]则表示这样情况下的方案数,那么我们可以得到转移.w[i|(1<<k)][(j*10 ...

  4. 给vim安装YouCompleteMe

    要安装YouCompleteMe ,vim须支持python.看是否支持,可以在vim中:version 查看, 如果python前有+号,就是支持,减号就是不支持. 如果不支持,需要以编译安装方式重 ...

  5. QWT编译、配置、使用(Qt Creator)

    环境: Win7 32 bit / Qt Creator 3.3.1 / Qt 5.4.1 (msvc2013_opengl, 32 bit) / QWT 6.1.2 QWT, Qt Widgets ...

  6. 9.Python3标准库--数据压缩与归档

    ''' 尽管现代计算机系统的存储能力日益增长,但生成数据的增长是永无休止的. 无损(lossless)压缩算法以压缩或解压缩数据花费的时间来换取存储数据所需要的空间,以弥补存储能力的不足. Pytho ...

  7. [ python ] 购物系统

    作业需求 1. 购物系统,能够注册登录,用户第一次登录后,让用户输入金额,然后打印商品列表2. 允许用户根据商品编号购买商品3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. 购买完一 ...

  8. Bootstrap开发模板

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  9. request机制

    每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前后端的交互 基于HTML + Flask 写一 ...

  10. docvalue and fielddata

    大部分字段类型默认被索引的(inverted index),可以被搜索search: 哪个文档有这个词sort&aggregations: look up the document and f ...