Skip to content

测试用例调度与运行

JUnit5测试用例调度

maven-surefire-plugin

Maven 项目中对应有默认配置,必须引入 maven-surefire-plugin 插件,否则无法使用 Maven 的测试功能。

当需要修改一些测试相关执行策略的时候,就需要重新配置这个插件。 maven-surefire-plugin插件只支持 junit-jupiter-api构件,不支持 junit 构件.

配置pom文件

    <properties>
        <java.version>11</java.version>
        <maven.compiler.version>3.3</maven.compiler.version>
        <maven.surefire.version>3.0.0-M5</maven.surefire.version>
        <aspectj.version>1.9.5</aspectj.version>

    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
                <configuration>
                    <includes>
                        <include>com/ceshiren/testcases/RunSuite07Test</include>
                    </includes>
                    <argLine>
                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                    </argLine>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.junit.jupiter</groupId>
                        <artifactId>junit-jupiter-engine</artifactId>
                        <version>${junit.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.1.1</version>
            </plugin>

        </plugins>
    </build>

mvn 执行测试用例

测试用例写好之后,可以通过以下几种方式执行测试的命令。

  • 命令行执行
  • 配置文件执行

执行所有测试

软件下方打开terminal终端,进入当前模块,输入命令行语句执行。

  • 执行当前项目下的所有测试
    mvn test
    
  • 打开命令终端,切换到 pom.xml 所在目录下,执行命令 mvn test。执行命令 mvn test,表示执行到构件生命周期的 test 阶段,之前的阶段都会自动执行。(使用命令行执执行测试用例时注意检查配置文件中是否配置了标签的内容,如果配置了则只会执行 include 中包含的文件内容)
  • 执行过程
    • 应用下方点击 Terminal 打开终端
    • 切换到 pom.xml 所在目录下,如果只只有一个模块则不用切换,输入mvn test,回车执行。
    • 当前模块中的测试文件如下图:
    • 执行结果如下: 可以看到模块中所有测试文件均执行了

执行单个测试方法

命令行执行,使用命令行执执行测试用例时注意检查配置文件中是否配置了标签的内容,如果配置了则只会执行 include 中包含的文件内容。

  • 语句格式
mvn test -Dtest=包名.类名#方法名
  • 执行实例 - 执行前需要将 pom.xml 文件中的 include 标签中的内容清除 mvn test -Dtest="junit5assert.AssertTrueTest#expressionDemo" - 运行结果 终端中信息内容与测试方法内容相符 配置成功

执行多个测试方法

命令行执行 执行前记得检查将 pom.xml 文件中配置信息,是否存在includeexclude限制

  • 语句格式
    mvn test -Dtest=包名.类名#方法名1+方法名2
    
  • 语句示例
     mvn test -Dtest="junit5basics.FirstJUnitTest#first+second"
    
  • 终端显示信息与我们预期的测试方法中的信息一致

执行单个测试类

  • 命令行执行

    • 语句格式
    mvn test -Dtest=包名.类名
    
    • 语句示例
    mvn test -Dtest="junit5assert.AssertEqTest"
    

    如果执行失败可以尝试在 pom 配置文件中添加如下代码,表示识别模块中所有的 Test 文件,更新依赖后在次尝试。

        <includes>
            <include>**/*Test</include>
        </includes>
    
    • pom.xml 中修改的位置如下图
    • 执行结果 终端中信息内容与测试方法内容相符,测试函数成功执行。
  • 配置文件执行

    • 修改配置文件后更新 Maven 使用命令行执行mvn test
    • 包名之间用/区分
    • 有以下三种方式,使用效果无差别,每一种都可以。
    • 配置格式
      <!-- 可以是类名.java -->
      <include>包名/类名.java</include>
      <!-- 可以直接是类名 -->
      <include>包名/类名</include>
      <!-- 可以是类名.class -->
      <include>包名/类名.class</include>
      
    • 类名.java
      • pom 配置示例
            <includes>
                <include>junit5assert/AssertNotNullTest.java</include>
            </includes>
        
      • 运行结果 终端中信息内容与测试方法内容相符 配置成功
    • 使用类名 无后缀
      • pom 配置示例
            <includes>
                <include>junit5assert/AssertNotNullTest</include>
            </includes>
        
      • 运行结果 终端中信息内容与测试方法内容相符 配置成功
    • 使用类名.class
      • pom 配置示例
            <includes>
                <include>junit5assert/AssertNotNullTest.class</include>
            </includes>
        
      • 运行结果 终端中信息内容与测试方法内容相符 配置成功

执行多个测试类

除了执行全部测试用例之外,我们还会用到以下几种情况:

  • 执行同一个包下的测试类
  • 执行不同包下的测试类
  • 正则匹配模式执行多个测试类
  • 配置不被执行的测试类
1. 执行同一个包下的测试类

执行同一个包下的测试类有两种执行方式,可以采取命令行执行或者配置pom.xml文件后使用mvn test执行

  • 命令行执行 - 在执行前需要检查配置文件中是否修改了设置,如果设置了需要清除并更新依赖再使用命令行执行。 - 语句格式

    ```
    mvn test -Dtest=包名.类名1,包名.类名2,...
    ```
    
    - 语句实例
    ```
    mvn test -Dtest="junit5assert.AssertTrueTest,junit5assert.AssertNotNullTest"
    ```
    - 执行结果 终端中信息内容与测试方法内容相符,同一个包下的不同测试类成功执行。
    

  • 配置文件执行
    • pom.xml 文件格式
      <!-- 可以是类名.java -->
      <include>包名1/*.java</include>
      <!-- 可以直接是类名 -->
      <include>包名1/*</include>
      <!-- 可以是类名.class -->
      <include>包名1/*.class</include>
      
    • 配置实例
          <includes>
              <include>junit5assert/*.java</include>
          </includes>
      
    • 配置后更新依赖使用命令行 mvn test执行 终端中信息内容与测试方法内容相符 同一个包下的不同测试类成功执行。
2. 执行不同包下的测试类
  • 命令行执行

    • 多个测试类间用英文逗号连接
    • 语句格式
      mvn test -Dtest=包名1.类名1,包名2.类名2,...
      
    • 执行实例
      mvn test -Dtest="junit5assert.AssertTrueTest,JUnit5rules.DomeTest"
      
    • 执行结果 终端中信息内容与测试方法内容相符,不同包下的测试类成功执行。
  • 配置文件执行

    • pom.xml 文件格式

      <!-- 可以是类名.java -->
      
      <include>包名1/类名1.java</include>
      <include>包名2/类名2.java</include>
      
      <!-- 可以直接是类名 -->
      
      <include>包名1/类名1</include>
      <include>包名2/类名2</include>
      
      <!-- 可以是类名.class -->
      
      <include>包名1/类名1.class</include>
      <include>包名2/类名2.class</include>
      
    • 配置实例
      <include>junit5assert/AssertTrueTest.java</include>
      <include>JUnit5rules/DomeTest.java</include>
      
    • 修改好配置文件后在命令行中输入mvn test执行,不同包下的测试类成功执行。
3. 正则匹配执行多个测试类
  • 命令行执行,执行前需检查 pom.xml 文件中的信息是否添加了限制。

    • 语句格式
    mvn test -Dtest="包名.*Test"
    
    • 执行实例
    mvn test -Dtest="junit5assert.*Test"
    

    -执行结果 junit5assert 包中包含 6 个测试文件 终端中信息内容与文件内容相符。

  • 配置文件执行

    • pom.xml 文件格式 以下三种方式效果相同

      <include>包名/*Test</include>
      
      <include>包名/*Test.java</include>
      
      <include>包名/*Test.class</include>
      
    • 配置实例
      <include>junit5assert/*Test</include>
      
    • 执行结果 junit5assert 包中包含 6 个测试文件 终端中信息内容与文件内容相符。
4. 配置不被执行的测试类

配置需要执行的内容使用include标签,配置不被执行的内容使用exclude标签

  • pom.xml 文件格式
    <exclude>包名/*Test.class</exclude>
    <exclude>*Suite*Test</exclude>
    
  • 配置实例
    这里为了方便观察,使用inlcude标签规定的执行范围为junit5assert包中的所有测文件,使用exclude在junit5assert包中符合以Test结尾的文件将不会被执行
    
    <includes>
        <include>junit5basics/*</include>
    </includes>
    <excludes>
        <excludde>junit5basics/*Test.class</excludde>
    </excludes>
    
  • 执行结果 junit5basics包中包含 3 个测试文件 其中以 Test 结尾的文件被排除 仅执行了TestHogwarts 终端中信息内容与文件内容相符。