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. JVM调优总结(2):基本垃圾回收算法

    可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数. ...

  2. c# 重载运算符(ovveride operator)踩坑记,关于null比对

    场景描述: 需要比对两个版本的对应对象是否完全一致(每个属性值一致),不一致的导出报表颜色标识,以便提醒后续使用报表人员. 实现思路: 对象重载ToString方法,另实现一比对基类(为了通用)重载= ...

  3. VS调试程序快捷键和系统快捷键

    调试程序快捷键 编译程序:F7 运行程序:ctrl + F5 打断点:F9 运行到断点位置:F5 单步执行:F10 单步进入函数:F11 结束调试:shift+F5 注释代码:ctrl+k,ctrl+ ...

  4. C++中string.find()函数,string.find_first_of函数与string::npos

    查找字符串a是否包含子串b,不是用strA.find(strB) > 0而是strA.find(strB) != string:nposstring::size_type pos = strA. ...

  5. python使用unittest模块selenium访问斗鱼获取直播信息

    import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...

  6. jplayer.js 与 video.js

    HTML5 - 两款基于JS的视频播放器 都是基于h5 video 标签,如果不支持则会自动转成flash,这里个人比较推荐使用jplayer; 1.video.js pc端有时候会与视频打交道,如果 ...

  7. word2vec参数

    架构:skip-gram(慢.对罕见字有利)vs CBOW(快) ·         训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利) 负例采样准确率提高,速度会慢, ...

  8. Nginx1.8.1 编译扩展https

    nginx无缝编译扩展https 本贴只限用于通过编译安装的nginx,如果用的是yum源安装请卸载后参见 http://www.cnblogs.com/rslai/p/7851220.html 安装 ...

  9. 数据库连接池(c3p0与druid)

    1.数据库连接池概念 其实就是一个容器(集合),存放数据库连接的容器.当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归 ...

  10. HDU 1079 Calendar Game(博弈找规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1079 题目大意:给你一个日期(包含年月日),这里我表示成year,month,day,两人轮流操作,每 ...