测试开发基础 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=MavenDemo*Test 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月前
|
数据采集 运维 安全
测试需要写测试用例吗?
测试需要写测试用例吗?
30 0
|
3月前
|
前端开发 测试技术
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
|
3月前
|
存储 测试技术 Python
软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动
软件测试/测试开发全日制|Pytest结合CSV实现测试的数据驱动
35 0
|
1月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程)
【2月更文挑战第13天】《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程) 上一篇文章,宏哥已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中给小伙伴们 或者童鞋们演示一下。
66 1
|
3月前
|
设计模式 Java 测试技术
软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
软件测试/测试开发/全日制|Page Object模式:为什么它是Web自动化测试的必备工具
54 0
|
2月前
|
测试技术
接口测试测试用例编写注意事项
接口测试测试用例编写注意事项
|
2天前
|
测试技术 API 网络架构
Python的api自动化测试 编写测试用例
【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
11 2
|
1月前
|
Java 测试技术 Maven
《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程)
【2月更文挑战第11天】《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程) 是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。由于现在企业和公司中Java的大部分项目都是基于Maven, 因此宏哥为了照顾到企业或者公司用的java项目中用到maven的童鞋或者小伙伴们,这里也简单的介绍和分享一下。在Maven项目中使用Selenium. 非常简单。
67 3
|
1月前
|
测试技术
模型驱动测试引领测试开发新风向
模型驱动测试引领测试开发新风向
19 3
|
2月前
|
Java 测试技术 Maven
单元测试添加运行参数的maven插件
单元测试添加运行参数的maven插件
20 0

推荐镜像

更多