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. IDEA不显示更新、提交按钮

    问题描述: IDEA右上角不显示版本管理的“更新”.“提交”等按钮,左侧代码树中,也没有文件的状态 解决办法: 点击VCS-->Enable Version Control Integratio ...

  2. MDI窗体简单方法(调用,闪屏)

    调用方式: RibbonForm mdishow = new RibbonForm(); //实例化 midshow.MdiParent = this; //设置在主窗体,以MDI的方式显示,关键属性 ...

  3. Java读取大文件的高效率实现

    1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung (http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 ...

  4. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

  5. Deep Learning基础--Softmax求导过程

    一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...

  6. SipDroid +miniSIPServer搭建SIP局域网语音通话(一)

    最近在做语音通讯功能,参考下优秀开源软件SIPDroid好就这个了,svn check下最新的源代码 http://sipdroid.googlecode.com/svn/trunk/sipdroid ...

  7. NFS生产场景优化

    1.硬件上多块网卡bond,增加吞吐量,至少千兆.sas/ssd磁盘组raid5或raid10 2.服务端配置:/data 172.16.1.0/24(rw,sync,all_squash,anonu ...

  8. caffe多个gpu数据合并到一起

    当多GPU树形拓扑构建完毕,数据预缓冲到GPU显存,开始进入多GPU并行训练.Caffe的Solver提供了两个用于多GPU训练的回调函数:on_start()和on_gradient_ready() ...

  9. POJ 2348 Euclid's Game(辗转相除博弈+自由度分析)

    题目链接:http://poj.org/problem?id=2348 题目大意:给你两个数a,b,Stan和Ollie轮流操作,每次可以将较大的数减去较小的数的整数倍,相减后结果不能小于0,谁先将其 ...

  10. Python+Selenium 自动化实现实例-单元测试报告

    代码如下: # -*- coding: utf-8 -*- from selenium import webdriver import unittest,time import HTMLTestRun ...