Maven Surefire Plugin 做测试用例基础执行管理

 

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客跳槽涨薪的朋友们有福了,今天给大家推荐一个软件测试面试的刷题小程序。https://blog.csdn.net/weixin_54696666/article/details/139783730?spm=1001.2014.3001.5501https://blog.csdn.net/weixin_54696666/article/details/139783730?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/weixin_54696666/article/details/139783730?spm=1001.2014.3001.5501

一、需求

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

  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

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

  mvn -Dtest=MavenDemo1Test,MavenDemo2Test test

  测试结果:

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

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

  $ mvn -Dtest=MavenDemo*Test test

  测试结果:

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

  当然,上述的测试方式组合起来也是可以的,例如这里利用通配符执行 MavenDemo1Test 和 MavenDemo2Test,再精确指定执行 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 插件在测试执行中的一些常见用法,还有很多其他的用法,例如:

  · 使用很复杂的格式匹配

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

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员二黑

V:testerhei

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值