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

【摘要】 在测试工作场景中,经常会遇到下面的问题:1、执行自动化测试用例的时候,只想指定某个测试类,或者某个方法,又或者某一类用例等,怎么办?2、想要和 Jenkins 一起进行持续集成,可是用例又不可能在 IDE 里面执行,怎么办?这个时候就需要 Maven 登场了,利用 Maven 的Maven-Surefire-Plugin插件可以帮助我们完成上述的目标!它可以通过命令行的形式来管理我们要执行的...

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

  • 1、执行自动化测试用例的时候,只想指定某个测试类,或者某个方法,又或者某一类用例等,怎么办?
  • 2、想要和 Jenkins 一起进行持续集成,可是用例又不可能在 IDE 里面执行,怎么办?
    这个时候就需要 Maven 登场了,利用 Maven 的Maven-Surefire-Plugin插件可以帮助我们完成上述的目标!它可以通过命令行的形式来管理我们要执行的用例。
  • Maven 3.x +
  • JDK 1.7 +
    对于我们测试来说,常接触的几个用例管理框架都支持(这里指 Java 技术栈)
  • Using TestNG
  • Using JUnit 5 Platform
  • Using JUnit
    常用到的 Junit5 相关依赖:
    Maven-Surefire-Plugin:
    指定编译 JDK 版本:
    现有如下结构的测试类,在此基础上进行演示:
    使用 mvn test 命令可以一次性执行所有的用例,执行完之后可以看到控制台中的结果:
    执行完之后我们打开 target,所有 maven 执行完的结果都会在 target 目录下的 surefire-reports 下:
    其中:
  • xml:可用于 Jenkins 解析,文件与测试类对应,里面的内容代表了测试用例的执行情况。
  • txt:测试结果的命令行输出。
    使用 mvn -Dtest=${TestClass} 命令可以指定运行测试类,例如
    我这里要运行 MavenDemo1Test 下的用例,就可以使用 mvn -Dtest=MavenDemo1Test test:
    import org.junit.jupiter.api.Test; ¨K31K
    执行测试:
    $ mvn -Dtest=MavenDemo1Test test
    测试结果:
    我们还可以以 逗号 分隔指定多个测试类执行,例如这里我想执行 MavenDemo1Test 和 MavenDemo2Test:
    mvn -Dtest=MavenDemo1Test,MavenDemo2Test test
    测试结果:
    我们可以使用通配符来匹配要执行的测试类,例如这里我利用通配符同时指定测试类 MavenDemo1Test 和 MavenDemo2Test:
    $ mvn -Dtest=MavenDemoTest test
    测试结果:
    当然,上述的测试方式组合起来也是可以的,例如这里利用通配符执行 MavenDemo1Test 和 MavenDemo2Test,再精确指定执行 MavenPackageDemoTest:
    $ mvn -Dtest=MavenDemo
    Test,MavenPackageDemoTest test
    测试结果:
    除了可以指定执行测试类,还可以指定测试方法,测试类 和 测试方法 之间用 # 隔开即可例如这个我想要指定执行 MavenDemo1Test 中的 test2 方法:
    $ mvn -Dtest=MavenDemo1Test#test2 test
    测试结果:
    方法依然可以使用通配符,例如这里要执行 MavenPackageDemoTest 中的方法 MavenPackageTest,可以匹配以 Test 结尾:
    $ mvn -Dtest=MavenPackageDemoTest#*Test test
    测试结果:
    mvn 也可以指定某个测试类下面的多个方法,使用+号分隔方法,例如指定 MavenDemo1Test 下的方法 test1() 和 test2()。
    $ mvn -Dtest=MavenDemo1Test#test1+test2 test
    mvn 还提供了失败重试,设置失败重试的次数,当用例执行时直到用例成功或者失败次数达到上限,命令如下:
    mvn -Dsurefire.rerunFailingTestsCount=2 test
    可是遗憾的是,此功能只支持 Junit4,官网给出的说明如下:
    在 Junit5 中,我们其实是可以利用 @RunWith(JUnitPlatform.class) 运行测试套件的,具体内容可参考文章:[Junit5简介、构成、新特性及基本使用-常用注解、套件执行] 。
    然而当我们使用mvn来执行套件时,
    套件:
    mvn 命令:
    mvn -Dtest=TestSuite test
    会出现如下报错:
    据说是因为 surefire 插件的版本问题,当切换到 2.19 版本的时候,套件执行成功了,可是 mvn test 命令又失败了,这显然不是我们想要的结果,于是乎开始了 Google 之路。。。
    最终找到了一个相对合理的解释!抱歉,又要失望了,Google 到别人的解释如下(已翻译完成~):
    简单的说就是 surefire 插件暂时还不支持在 Junit5 下执行继承至 Junit4 的 @RunWith,所以还是需要有心人出来解决这个问题才行了~~
    例如这里我默认只想执行 MavenPackageDemoTest ,而另外两个 MavenDemo 开头的测试类我都不想执行,这个时候可以在 pom 中做如下配置,在 surefire 插件下添加 configuration:
    执行 mvn test ,查看结果:
    从结果中可以看到仅仅执行了我们默认指定的 MavenPackageDemoTest 中的 case,其余以 MavenDemo 开头的测试类均未被执行。
    这里介绍了 maven-surefire-plugin 插件在测试执行中的一些常见用法,还有很多其他的用法,例如:
  • 使用很复杂的格式匹配
  • 控制在不同级别上的多线程和多进程执行
    后续将慢慢研究补充,有兴趣也可直接参考官网学习。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派编程基础与硬件控制

1.编程语言 Python 是一种泛用型的编程语言,可以用于大量场景的程序开发中。根据基于谷歌搜 索指数的 PYPL(程序语言流行指数)统计,Python 是 2019 年 2 月全球范围内最为流行 的编程语言 相比传统的 C、Java 等编程语言&#x…

HarmonyOS 状态管理装饰器 Observed与ObjectLink 处理嵌套对象/对象数组 结构双向绑定

本文 我们还是来说 两个 harmonyos 状态管理的装饰器 Observed与ObjectLink 他们是用于 嵌套对象 或者 以对象类型为数组元素 的数据结构 做双向同步的 之前 我们说过的 state和link 都无法捕捉到 这两种数据内部结构的变化 这里 我们模拟一个类数据结构 class Person{name:…

【漏洞复现】狮子鱼CMS文件上传漏洞(image_upload.php)

Nx01 产品简介 狮子鱼CMS(Content Management System)是一种网站管理系统,它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…

uniapp设置不显示顶部返回按钮

一、pages文件中,在相应的页面中设置 "titleNView": {"autoBackButton": false} 二、对应的页面文件设置隐藏元素 document.querySelector(.uni-page-head-hd).style.display none

Python编程之旅:从入门到精通

在数字世界的无尽宇宙中,Python无疑是一颗璀璨的明星。其简洁易懂的语法、丰富的库和广泛的应用领域,使得Python成为了众多初学者的首选编程语言。那么,如何学习Python呢?本文将带你一步步踏上Python编程的旅程。 一、入门篇&…

使用R语言fifer包进行分层采样

使用R语言fifer包中的stratified()函数用来进行分层采样非常方便,但fifer包已经从CRAN存储库中删除,需要从存档中下载可用的历史版本,下载链接:Index of /src/contrib/Archive/fifer (r-project.org)https://cran.r-project.org/s…

EMC学习笔记(二十四)降低EMI的PCB设计指南(四)

降低EMI的PCB设计指南(四) 1.电路板分区2.信号走线2.1 电容和电感串扰2.2 天线2.3 端接和传输线2.4输入端的阻抗匹配 tips:资料主要来自网络,仅供学习使用。 1.电路板分区 电路板分区与电路板平面规划具有相同的基本含义&#x…

Vue3中Setup概述和使用(三)

一、引入Setup 1、Person.Vue 与Vue3编写简单的App组件(二) 中的区别是&#xff1a;取消data、methods等方法,而是将数据和方法定义全部放进setup中。 <template><div class"person"><h1>姓名:{{name}}</h1><h1>年龄:{{age}}</h…

UI自动刷新大法:DataBinding数据绑定

之前我们讲了DataBinding在Activity、Fragment、RecyclerView中的基础使用&#xff0c;而那些常规使用方法里&#xff0c;每当绑定的变量发生数据变化时&#xff0c;都需要ViewDataBinding重新设值才会刷新对应UI。而DataBinding通过内部实现的观察者模式来进行自动刷新UI&…

BKP寄存器与RTC实时时钟

BKP寄存器 BKP寄存器简介 BKP&#xff08;Backup Registers&#xff09;备份寄存器 BKP可用于存储用户应用程序数据。当VDD&#xff08;2.03.6V&#xff09;电源被切断&#xff0c;他们仍然由VBAT&#xff08;1.83.6V&#xff09;维持供电。当系统在待机模式下被唤醒&#xf…

数据结构~~树(2024/2/8)

目录 树 1、定义&#xff1a; 2、树的基本术语&#xff1a; 3、树的表示 树 1、定义&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&…

神经网络(Nature Network)

最近接触目标检测较多&#xff0c;再此对最基本的神经网络知识进行补充&#xff0c;本博客适合想入门人工智能、其含有线性代数及高等数学基础的人群观看 1.构成 由输入层、隐藏层、输出层、激活函数、损失函数组成。 输入层&#xff1a;接收原始数据隐藏层&#xff1a;进行…