多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

如何使用maven进行测试-自动化测试

更新时间:2022-04-11 14:09:24 作者:多测师 浏览:82

  今天我们要讲的是maven测试相关的知识,主要是对测试时使用到的几个插件进行讲解

如何使用maven进行测试-自动化测试

  maven本身并不是一个测试框架,在java世界里,测试框架为junit与testng,maven要执行测试,只是在特定的生命周期中绑定具体的插件并执行相应的目标来达到测试目的的

  maven中进行测试的插件为maven-surefire-plugin

  maven-surefire-plugin插件默认会自动执行测试源码包下面遵循

  1.**/Test*.java

  2.**/*Test.java

  3.**/*TestCase.java

  命名的java测试类

  可以通过maven-help-plugin插件查看当前测试插件绑定的生命周期

  mvn help:describe -Dplugin=org.apache.maven.plugins:maven-surefire-plugin:2.7 -Ddetail

  Name: Maven Surefire Plugin

  Description: Surefire is a test framework project.

  Group Id: org.apache.maven.plugins

  Artifact Id: maven-surefire-plugin

  Version: 2.7

  Goal Prefix: surefire

  surefire:test

    Description: Run tests using Surefire.

    Implementation: org.apache.maven.plugin.surefire.SurefirePlugin

    Language: java

    Bound to phase: test

  从上面可以看出测试插件绑定的是default生命周期的test阶段

  当然可以自定义具体的测试类(可以通过命令行方式和配置文件方式来指定具体要执行的测试)

  动态指定测试类

  命令行方式

  需要注意的是命令行方式可以灵活指定需要运行的测试类,但是没有提供跳过指定测试类的方式,要实现跳过指定测试类这个功能,需要在配置文件中进行配置

  指定具体类名

  例如:mvn test -Dtest=RandomGenerateTest

  这里是运行指定的测试类RandomGenerateTest

  正则表达式

  mvn test -Dtest=Random*Test

  运行所有以Random开头,Test结尾的测试类

  同时指定多个测试类

  通过逗号","进行分隔

  mvn test -Dtest=RandomGenerateTest,AccountCopyServiceTest

  同时使用正则与多个测试类

  mvn test -Dtest=Random*Test,AccountCaptuchaServiceTest

  当使用命令mvn test -Dtest时如果没有指定测试类,则会报错,测试匹配模式是必填的

  配置文件方式

  maven提倡约定优于配置,所以用户应该尽量遵循测试类的命名,不要随意改变其结构

  1.包含指定测试类

  包含所有以Tests结尾的测试文件

  <plugin>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-surefire-plugin</artifactId>

      <version>2.7</version>

      <configuration>

          <includes>

              <include>**/*Tests.java</include>

          </includes>

      </configuration>

  </plugin>

  上面通过includes包含Tests.java结尾的测试类

  2.排除指定的测试类

  <plugin>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-surefire-plugin</artifactId>

      <version>2.7</version>

      <configuration>

          <excludes>

              <exclude>**/*Tests.java</exclude>

              <exclude>**/*TestCase.java</exclude>

          </excludes>

      </configuration>

  </plugin>

  上面通过excludes排除以Tests.java、TestCase.java结尾的测试类

  跳过测试

  maven-surefire-plugin插件提供了两种逃过测试的方式

  1.跳过测试,但仍然要对测试源码进行编译(skip/skipTests)

  mvn package -Dtest=skipTests

  [INFO] --- maven-surefire-plugin:2.20:test (default-test) @ mvn-study ---

  [INFO] Tests are skipped.

  [INFO]

  [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ mvn-study ---

  [INFO]

  [INFO] --- maven-jar-plugin:2.6:test-jar (default) @ mvn-study ---

  [INFO] ------------------------------------------------------------------------

  [INFO] BUILD SUCCESS

  [INFO] ------------------------------------------------------------------------

  [INFO] Total time: 2.362 s

  [INFO] Finished at: 2017-07-26T21:24:40+08:00

  [INFO] Final Memory: 11M/155M

  [INFO] -----------------------------------------------------------------------

  上面的方式是命令行方式,下面给出在pom中的具体配置,但是这种方式是不推荐的,因为如果长时间让项目跳过测试,那还要测试代码做什么呢?

  <plugin>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-surefire-plugin</artifactId>

      <version>2.7</version>

      <configuration>

          <skipTests>true</skipTests>

      </configuration>

  </plugin>

  2.跳过测试,同时跳过测试代码的编译

  mvn package -Dmaven.test.skip=true

  基本测试报告

  除了命令行输出,maven用户还可以以文件的方式生成更丰富的测试报告

  默认情况下,maven-surefire-plugin会在target/surefire-reports目录下生成两种格式的错误报告:

  1.简单文本格式(比如com.zheng.SayHelloTest.txt)

  2.与junit兼容的xml格式(比如TEST-com.zheng.SayHelloTest.xml)

  测试覆盖率(Cobertura插件)

  要得到测试覆盖率,需要额外的插件(cobertura-maven-plugin)支持

  具体需要引入下面插件依赖:

  <plugins>

      <plugin>

          <groupId>org.codehaus.mojo</groupId>

          <artifactId>cobertura-maven-plugin</artifactId>

          <version>2.7</version>

      </plugin>

  </plugins>

  当然可以通过maven-help-plugin插件查看cobertura插件有哪些目标

  通过运行mvn cobertura:cobertura将会在target/site/cobertura目录下生成index.html

  在上面的代码左侧显示了运行当前测试时测试执行的覆盖次数,需要注意的是,这里只有对主代码(src/main/java)里面的类进行统计,如果将测试服务代码写入测试(src/test/java)目录下则将无法进行覆盖率统计

  testng测试

  testng 是又一款流行的java测试框架,意为test next generation

  使用testng需要去掉junit依赖,并添加testng依赖

  <dependency>

      <groupId>org.testng</groupId>

      <artifactId>testng</artifactId>

      <version>5.9</version>

      <classifier>jdk15</classifier>

  </dependency>

  相比于junit,它的注解也是很好理解的

  org.junit.Test org.testng.annotations.Test测试标记

  org.junit.Assert org.testng.Assert 断言

  org.junit.Before org.testng.annotations.BeforeMethod 测试方法之前

  org.junit.After org.testng.annotations.AfterMethod 测试方法之后

  org.junit.BeforeClass org.testng.annotations.BeforeClass所有测试之前

  org.junit.AfterClass org.testng.annotations.AfterClass 所有测试之后

  testng允许用户通过配置文件的方式来制定测试计划

  需要在项目根目录下建立一个testng.xml

  <?xml version="1.0" encoding="utf-8" ?>

  <suite name="suite1" verbose="1">

      <test name="sayHello">

          <classes>

              <class name="com.zheng.SayHelloTest"/>

          </classes>

      </test>

  </suite>

  修改测试代码注释

  @Test(groups = {"test1", "test2"})

      public void sayHello() {

          HelloService helloService = new HelloServiceImpl();

          String hello = helloService.sayHello();

          System.out.println(hello);

      }

  还需要借助maven-surefire-plugin来进行打包测试

  <plugin>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-surefire-plugin</artifactId>

      <version>2.20</version>

      <configuration>

          <!--以配置文件方式执行测试用例-->

          <!--<suiteXmlFiles>-->

              <!--testng.xml-->

          <!--</suiteXmlFiles>-->

          <!--以分组的方式执行测试用例-->

          <groups>

              test1,test2

          </groups>

      </configuration>

  </plugin>

  上面的代码通过@Test,groups指定当前测试方法属于test1,test2分组的,然后通过maven-surefire-plugin指定执行的测试分组test1,test2,于是测试代码就神奇的运行起来了

  打包测试代码

  通常情况下,我们通过maven打包项目代码是不会将测试代码一起打包出来的,为了做到这一点,需要使用maven-jar-plugin插件的test-jar打包目标

  <!--打包测试代码-->

  <plugin>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-jar-plugin</artifactId>

      <version>2.6</version>

      <executions>

          <execution>

              <goals>

                  <goal>test-jar</goal>

              </goals>

          </execution>

      </executions>

  </plugin>

  在maven-jar-plugin插件中提供了两个目标: jar和test-jar,前者默认绑定在package阶段上,而后者虽然默认也是在package阶段执行,但是并没有绑定,我们通过上面的配置显示的绑定了test-jar任务,于是当运行mvn test package的时候就会打包测试代码

  通过运行mvn clean package命令就得到在target/生成的两个jar包

  mvn-study-1.0-SNAPSHOT.jar

  mvn-study-1.0-SNAPSHOT-tests.jar

  如何使用测试jar包

  通过上面的方式已经将测试代码打包成一个jar,那么我们要如何在其他项目模块中引用这个打包好的测试jar包呢?

  不要惊慌,下面就给出答案

  我们通过下面配置方式来引用被打包的测试代码:

  <dependency>

      <groupId>com.zheng.mvnstudy</groupId>

      <artifactId>mvn-study</artifactId>

      <version>1.0-SNAPSHOT</version>

      <scope>test</scope>

      <type>test-jar</type>

  </dependency>

  需要注意上面引入的测试jar包依赖跟普通的依赖有点区别的地方在于scope是test域,表示在测试时使用,而type为test-jar

  以上内容为大家介绍了自动化测试中的如何使用maven进行测试,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部