测试开发基础 mvn test | 利用 Maven Surefire Plugin 做测试用例基础执行管理

news2025/2/28 2:54:07

一、需求

在测试工作场景中,经常会遇到下面的问题:

  • 1、执行自动化测试用例的时候,只想指定某个测试类,或者某个方法,又或者某一类用例等,怎么办?

  • 2、想要和 Jenkins 一起进行持续集成,可是用例又不可能在 IDE 里面执行,怎么办?

这个时候就需要 Maven 登场了,利用 Maven 的Maven-Surefire-Plugin插件可以帮助我们完成上述的目标!它可以通过命令行的形式来管理我们要执行的用例。

二、环境

2.1 环境要求

  • Maven 3.x +

  • JDK 1.7 +

2.2 支持框架

对于我们测试来说,常接触的几个用例管理框架都支持(这里指 Java 技术栈)

  • Using TestNG

  • Using JUnit 5 Platform

  • Using JUnit

2.3 相关依赖

本文将以 Junit5 为例进行研究学习,所以下面的依赖添加也以 Junit5 为准。

常用到的 Junit5 相关依赖:

    <dependency>       <groupId>org.junit.platform</groupId>        <artifactId>junit-platform-launcher</artifactId>        <version>1.6.2</version>        <scope>test</scope>    </dependency>    <dependency>        <groupId>org.junit.platform</groupId>        <artifactId>junit-platform-runner</artifactId>        <version>1.5.1</version>        <scope>test</scope>    </dependency>    <dependency>        <groupId>org.junit.jupiter</groupId>        <artifactId>junit-jupiter-engine</artifactId>        <version>5.6.2</version>        <scope>test</scope>    </dependency>    <dependency>        <groupId>org.junit.vintage</groupId>        <artifactId>junit-vintage-engine</artifactId>        <version>5.6.2</version>        <scope>test</scope>    </dependency>

Maven-Surefire-Plugin:

<build>   <plugins>       <plugin>           <groupId>org.apache.maven.plugins</groupId>           <artifactId>maven-surefire-plugin</artifactId>           <version>2.22.0</version>       </plugin>       <plugin>           <groupId>org.apache.maven.plugins</groupId>           <artifactId>maven-compiler-plugin</artifactId>           <version>3.8.1</version>           <configuration>               <source>8</source>               <target>8</target>           </configuration>            </plugin>   </plugins></build>

指定编译 JDK 版本:

<properties>    <aspectj.version>1.8.10</aspectj.version>    <maven.compiler.source>1.8</maven.compiler.source>    <maven.compiler.target>1.8</maven.compiler.target></properties>

三、指定测试类

现有如下结构的测试类,在此基础上进行演示:

3.1 mvn test

使用 mvn test 命令可以一次性执行所有的用例,执行完之后可以看到控制台中的结果:

执行完之后我们打开 target,所有 maven 执行完的结果都会在 target 目录下的 surefire-reports 下:

其中:

  • xml:可用于 Jenkins 解析,文件与测试类对应,里面的内容代表了测试用例的执行情况。

  • txt:测试结果的命令行输出。

3.2 mvn -Dtest=${TestClass} test

使用 mvn -Dtest=${TestClass} 命令可以指定运行测试类,例如

我这里要运行 MavenDemo1Test 下的用例,就可以使用 mvn -Dtest=MavenDemo1Test test

import org.junit.jupiter.api.Test; ¨K31K

执行测试:

$ mvn -Dtest=MavenDemo1Test test

测试结果:

3.3 mvn -Dtest=${TestClass1},${TestClass2} test

我们还可以以 逗号 分隔指定多个测试类执行,例如这里我想执行 MavenDemo1TestMavenDemo2Test

mvn -Dtest=MavenDemo1Test,MavenDemo2Test test

测试结果:

3.4 mvn -Dtest=${TestCi*le} test

我们可以使用通配符来匹配要执行的测试类,例如这里我利用通配符同时指定测试类 MavenDemo1TestMavenDemo2Test

$ mvn -Dtest=MavenDemo*Test test

测试结果:

3.5 mvn -Dtest=${TestCi*le},${TestClass} test

当然,上述的测试方式组合起来也是可以的,例如这里利用通配符执行 MavenDemo1TestMavenDemo2Test,再精确指定执行 MavenPackageDemoTest:

$ mvn -Dtest=MavenDemo*Test,MavenPackageDemoTest test

测试结果:

四、指定测试方法

4.1 mvn -Dtest=TestCircle#mytest test

除了可以指定执行测试类,还可以指定测试方法,测试类测试方法 之间用 # 隔开即可例如这个我想要指定执行 MavenDemo1Test 中的 test2 方法:

$ mvn -Dtest=MavenDemo1Test#test2 test

测试结果:

4.2 mvn -Dtest=TestCircle#test* test

方法依然可以使用通配符,例如这里要执行 MavenPackageDemoTest 中的方法 MavenPackageTest,可以匹配以 Test 结尾:

$ mvn -Dtest=MavenPackageDemoTest#*Test test

测试结果:

4.3 mvn -Dtest=TestCircle#testOne+testTwo test

mvn 也可以指定某个测试类下面的多个方法,使用+号分隔方法,例如指定 MavenDemo1Test 下的方法 test1()test2()

$ mvn -Dtest=MavenDemo1Test#test1+test2 test

五、失败重试

mvn 还提供了失败重试,设置失败重试的次数,当用例执行时直到用例成功或者失败次数达到上限,命令如下:

mvn -Dsurefire.rerunFailingTestsCount=2 test

可是遗憾的是,此功能只支持 Junit4,官网给出的说明如下:

六、套件运行

在 Junit5 中,我们其实是可以利用 @RunWith(JUnitPlatform.class) 运行测试套件的,具体内容可参考文章:[Junit5简介、构成、新特性及基本使用-常用注解、套件执行] 。

然而当我们使用mvn来执行套件时,

套件:

    import MavenTestPackage1.MavenPackageDemoTest;    import org.junit.platform.runner.JUnitPlatform;    import org.junit.platform.suite.api.SelectClasses;    import org.junit.platform.suite.api.SuiteDisplayName;    import org.junit.runner.RunWith;    @RunWith(JUnitPlatform.class)    @SuiteDisplayName("测试套件")    @SelectClasses({            MavenPackageDemoTest.class,MavenDemo1Test.class    }    )    public class TestSuite {    }

mvn 命令:

mvn -Dtest=TestSuite test

会出现如下报错:

据说是因为 surefire 插件的版本问题,当切换到 2.19 版本的时候,套件执行成功了,可是 mvn test 命令又失败了,这显然不是我们想要的结果,于是乎开始了 Google 之路。。。

最终找到了一个相对合理的解释!抱歉,又要失望了,Google 到别人的解释如下(已翻译完成~):

简单的说就是 surefire 插件暂时还不支持在 Junit5 下执行继承至 Junit4@RunWith,所以还是需要有心人出来解决这个问题才行了~~

六、Pom 中指定默认执行

除了使用命令行,我们还可以在 pom 中指定我们默认需要执行的类或者不需要执行的类。

例如这里我默认只想执行 MavenPackageDemoTest ,而另外两个 MavenDemo 开头的测试类我都不想执行,这个时候可以在 pom 中做如下配置,在 surefire 插件下添加 configuration

    <plugin>       <groupId>org.apache.maven.plugins</groupId>       <artifactId>maven-surefire-plugin</artifactId>       <version>3.0.0-M3</version>       <configuration>           <includes>               <include>MavenPackageDemoTest.java</include>           </includes>           <excludes>               <exclude>MavenDemo*.java</exclude>           </excludes>       </configuration>    </plugin>
 

执行 mvn test ,查看结果:

从结果中可以看到仅仅执行了我们默认指定的 MavenPackageDemoTest 中的 case,其余以 MavenDemo 开头的测试类均未被执行。

七、写在最后

这里介绍了 maven-surefire-plugin 插件在测试执行中的一些常见用法,还有很多其他的用法,例如:

  • 使用很复杂的格式匹配

  • 控制在不同级别上的多线程和多进程执行

后续将慢慢研究补充,有兴趣也可直接参考官网学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言_文件操作(下)

目录 8. 文件的随机读写 8.1 fseek 8.2 ftell 8.3 rewind ​9. 文件结束判定 10. perror 8. 文件的随机读写 假设文件中存放的是abcdef&#xff0c;如下图&#xff0c;通常在读文件时&#xff0c;是先读取首元素地址&#xff0c;也就是文件指针指向a&#xff0c;每读一…

【Linux进程信号】

Linux进程信号技术应用角度的信号信号的发送与记录信号处理常见方式产生信号通过终端按键产生信号通过系统函数向进程发信号由软件条件产生信号由硬件异常产生信号阻塞信号信号其他相关常见概念在内核中的表示sigset_t信号集操作函数sigprocmasksigpending捕捉信号内核空间与用…

three.js 之 入门篇 5之几何体的认知( 顶点创建矩阵、炫酷三角形科技物体、基础网格材质 material )

目录three.js 之 入门篇 5之几何体的认知01BufferGeometry设置顶点创建矩阵02 生产炫酷三角形科技物体03 常见的网格几何体 geometry04 基础网格材质 material04-1 初识别材质与纹理04-2 初识别材质与纹理 &#xff08; 平移、旋转 &#xff09;04-3 纹理显示设置&#xff08; …

C语言——指针面试题详解

&#x1f412;个人主页&#xff1a;平凡的小苏&#x1f4da;学习格言&#xff1a;别人可以拷贝我的模式&#xff0c;但不能拷贝我不断往前的激情目录 1. 指针和数组笔试题解析 一维数组 字符数组 二维数组 2. 指针笔试题 笔试题1&#xff1a; 笔试题2&#xff1a; 笔试题…

ffmpeg 颜色空间转换分析

颜色空间转换有很多相关标准&#xff1a; https://docs.opencv.org/3.4.0/de/d25/imgproc_color_conversions.html https://www.itu.int/rec/R-REC-BT.601-4-199407-S/en ffmpeg命令行颜色空间转换是通过调用vf_scale中的swscale来进行转码。 我们通过gdb来调试ffmpeg. 首先编译…

《Getting Started with NLP》chap11:Named-entity recognition

《Getting Started with NLP》chap11&#xff1a;Named-entity recognition 最近需要做一些NER相关的任务&#xff0c;来学习一下这本书的第十一章 文章目录《Getting Started with NLP》chap11&#xff1a;Named-entity recognition11.1 Named entity recognition: Definition…

jar转成dex文件

jar转成dex文件 dx 可以利用android studio中的dx工具。 可以看到android的tool安装位置: 在此路径下的如下目录有dx.bat,这个正是我们需要使用的工具。 D:\sdk\build-tools\30.0.3将dx.bat添加到环境变量 基本指令 > dx --dex --output 输出路径 待转化的jar包C

高性能网络模式:Reactor 和 Proactor

文章目录演进多 Reactor 多进程 / 线程Proactor总结演进 如果要让服务器服务多个客户端&#xff0c;那么最直接的方式就是为每一条连接创建线程。其实创建进程也是可以的&#xff0c;原理是一样的&#xff0c;进程和线程的区别在于线程比较轻量级些&#xff0c;线程的创建和线…

【Dash搭建可视化网站】项目12:全球恐怖主义数据大屏制作步骤详解

全球恐怖主义数据大屏制作步骤详解1 项目效果图2 项目架构3 文件介绍和功能完善3.1 assets文件夹介绍3.2 app.py和index.py文件完善3.3 header.py文件完善3.4 filteritem.py文件完善3.5 api.py文件和api.ipynb文件完善3.6 staclbarline.py文件完善3.7 piechart.py文件完善3.8 m…

IO多路复用之select、poll、epoll之间的区别总结

一、IO多路复用基本概念 select、poll、epoll都是IO多路复用的机制。IO多路复用就是通过一种机制&#xff0c;让一个进程/线程可以监视多个描述符&#xff0c;一旦某个描述符就绪&#xff08;一般是读写就绪&#xff09;&#xff0c;能够通知应用程序进行相应的读写操作。 I/…

并网逆变器学习笔记5---三电平DPWM

参考文献&#xff1a;《中压三电平全功率风电变流器关键技术研究---任康乐》 1、调制策略分析 DPWM由于其在任意时刻均有一相钳位在某个电平&#xff0c;使得该相的功率器件不发生开关动作&#xff0c;因而可以大大降低开关损耗&#xff08;平均降低1/3&#xff09;&#xff…

Java多线程案例——定时器

一&#xff0c;定时器1.定时器的概念定时器是Java开发中一个重要的组件&#xff08;功能类似于闹钟&#xff09;&#xff0c;可以指定一个任务在多长时间后执行&#xff08;尤其在网络编程的时候&#xff0c;如果网络卡顿很长时间没有响应用户的需求&#xff0c;此时可以使用定…

分享|UWB使用频段大幅收窄,新标准对于行业发展是好是坏?

近日&#xff0c;工信部无线电管理局发布了《超宽带&#xff08;UWB&#xff09;设备无线电管理规定&#xff08;征求意见稿&#xff09;》&#xff08;以下简称“新版《规定》”&#xff09;。 根据新版《规定》&#xff0c;未来国内UWB技术的使用频段为&#xff1a;7235-875…

seo的基本知识(概述网站内部优化和外部优化)

了解网站外部优化的4大重点 网站优化的时候都会重视网站的外部优化&#xff0c;所以网站外部优化的4大重点&#xff01;今天就来和大家说一说&#xff01; 1.高质量的内容和外链 未来的SEO道路高质量的有价值的内容是非常重要的&#xff0c;还有就是高质量的外链也是重要之…

北大硕士LeetCode算法专题课-查找相关问题

黑马算法面试专题 北大硕士LeetCode算法专题课-字符串相关问题 北大硕士LeetCode算法专题课-数组相关问题_​​​​​​ 北大硕士LeetCode算法专题课-基础算法查找_ 北大硕士LeetCode算法专题课-基础算法之排序_客 北大硕士LeetCode算法专题课---算法复杂度介绍_…

Neo4j框架学习之一安装和使用

文章目录1、何为Neo4j2、安装和使用2.1 安装2.2 基础概念1、何为Neo4j ​ Neo4j是一个高性能的NOSQL图形数据库&#xff0c;是一个嵌入式的、基于磁盘的&#xff0c;数据结果为网格(图)、具备完全的事务特性的Java持久化引擎。 数据结构 ​ 在一个图中包含两种基本的数据类型…

从浏览器里输入URL构建你的前端知识体系

嗨&#xff01;我是团子&#xff0c;好久不见~ 记得22年寒假复习八股的时候&#xff0c;一直在苦恼怎样才能把八股的内容真正的转换为自己的知识。毕竟光靠死记硬背每个知识点&#xff0c;是不能在面试中给面试官留下不错的印象的。后面在整理《浏览器里输入URL后发生了什么》…

Stellarium 1.2 正式发布

导读Stellarium 1.2 已发布。Stellarium 是一款免费开源 GPL&#xff08;自由软件基金会 GNU 通用公共许可证&#xff09;软件&#xff0c;它使用 OpenGL 图形接口对星空进行实时渲染。 软件可以模拟肉眼、双筒望远镜和小型天文等观察天空&#xff0c;根据观测者所处时间和位置…

项目管理:项目经理如何创建项目日程计划表

当项目经理接手项目后&#xff0c;要做好项目的日程安排&#xff0c;这是决定项目是否成功完成的最重要任务之一。 项目经理都希望项目按照制定好的进度计划完工&#xff0c;但在实际的情况中&#xff0c;总会有那么一两个项目会出现进度延迟的情况&#xff0c;管理者可以使用…

忆享科技戟星安全实验室|OSS的STS模式授权案例

戟星安全实验室忆享科技旗下高端的网络安全攻防服务团队.安服内容包括渗透测试、代码审计、应急响应、漏洞研究、威胁情报、安全运维、攻防演练等。本文约957字&#xff0c;阅读约需3分钟。前言《漏洞挖掘系列》将作为一个期刊持续更新&#xff0c;我们会将项目中所遇到的觉得有…