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

简介: 测试开发基础 mvn test | 利用 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 插件在测试执行中的一些常见用法,还有很多其他的用法,例如:
  • 使用很复杂的格式匹配
  • 控制在不同级别上的多线程和多进程执行
    后续将慢慢研究补充,有兴趣也可直接参考官网学习。更多技术文章


相关文章
|
2月前
|
Java Maven
Maven 项目测试
接下来我们要学习如何构建和测试这个项目。
46 5
|
4月前
|
运维 测试技术
测试与开发问题之测试开发工程师与软件开发工程师和测试工程师如何区别
测试与开发问题之测试开发工程师与软件开发工程师和测试工程师如何区别
|
4月前
|
JavaScript 前端开发 测试技术
Vue.js开发者必看!Vue Test Utils携手端到端测试,打造无懈可击的应用体验,引领前端测试新风尚!
【8月更文挑战第30天】随着Vue.js的普及,构建可靠的Vue应用至关重要。测试不仅能确保应用质量,还能提升开发效率。Vue Test Utils作为官方测试库,方便进行单元测试,而结合端到端(E2E)测试,则能构建全面的测试体系,保障应用稳定性。本文将带你深入了解如何使用Vue Test Utils进行单元测试,通过具体示例展示如何测试组件行为;并通过Cypress进行E2E测试,确保整个应用流程的正确性。无论是单元测试还是E2E测试,都能显著提高Vue应用的质量,让你更加自信地交付高质量的应用。
80 0
|
4月前
|
监控 安全 测试技术
测试与开发问题之为什么测试开发工程师需要有安全生产意识,文档编写能力对于测试开发工程师的重要性如何理解
测试与开发问题之为什么测试开发工程师需要有安全生产意识,文档编写能力对于测试开发工程师的重要性如何理解
|
4月前
|
Java 测试技术
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
75 0
|
5月前
|
Java 测试技术 程序员
测试气味Test Smells-整洁单元测试
摘要:本文讨论了代码中的“Code Smell”现象,即可能表明代码质量问题的模式。这些包括重复代码、过长函数、过大类、过长参数列表等。识别并重构Code Smell有助于提升代码质量和可维护性。在单元测试中,也有类似的“测试味道”问题,如无信息的测试名称、缺少arrange-act-assert结构、不恰当的变量名和重复使用以及杀虫剂效应。好的单元测试应有明确的命名、遵循arrange-act-assert模式、使用有意义的变量名,并避免重复测试同一情况,以提供有价值的错误信息。
|
4月前
|
测试技术 数据库 开发者
Python全栈测试开发Chapter11 Mock测试
总结起来,Mock测试是一种有效的隔离测试环境、提高测试效率的方法,它让我们能够在不依赖外部条件的情况下进行全面的单元测试。在Python全栈测试中,Mock的应用是一种非常实用的技能。
29 0
|
6月前
|
Java Maven
maven跳过测试清理、打包、安装
maven跳过测试清理、打包、安装
127 4
|
5月前
|
运维 监控 大数据
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
部署-Linux01,后端开发,运维开发,大数据开发,测试开发,后端软件,大数据系统,运维监控,测试程序,网页服务都要在Linux中进行部署
|
5月前
|
Java Maven
Cannot resolve plugin org.apache.maven.plugins:maven-site-plugin:3.3
Cannot resolve plugin org.apache.maven.plugins:maven-site-plugin:3.3

推荐镜像

更多