如何在 testng.xml 中使用通配符运行 TestNG 类?


testng.xml 的格式为 <classes>,我们在其中定义要执行的所有测试类。在 <classes> 中的类中没有提供正则表达式的特定方法。但是,有一些变通方法可用于运行类中的特定 @Test。TestNG 在 include、exclude 和 package 标签中支持正则表达式。

以下是几个在测试套件中运行测试类时使用正则表达式的便捷方法。

  • 在 <classes> 中提及所有类名。并在类中使用 <methods> 和 <include name =”test.*” />。它将排除从给定类开始名称为 test 的所有测试。

  • 如果类存在于嵌套或不同的包中,则在 <packages><package name=”common_package.*”> 中使用包名称直到公共名称以及正则表达式。它将运行在以 common_package 开头的包名称内存在的所有类。

在本文中,我们将讨论 #1 和 #2。

场景 1

使用正则表达式在类中运行特定方法。在这里,我们将拥有一个包含多个测试方法的类,我们将看到如何配置 testng.xml 以仅基于正则表达式运行少量测试。我们将运行所有以“test.”开头的 @Test。

解决此问题的方法/算法

  • 步骤 1:创建一个 TestNG 类 - NewTestngClass。

  • 步骤 2:在类中编写 3 个不同的 @Test 方法 - NewTestngClass,名称分别为 test1、test2 和 findingAddition。

  • 步骤 3:现在创建如下所示的 testNG.xml。

  • 步骤 4:现在,运行 testNG.xml 或直接在 IDE 中运行 TestNG 类,或者使用命令行编译并运行它。

示例

以下代码演示了如何从大型套件中仅运行 1 个测试方法

src/ NewTestngClass.java

 import org.testng.annotations.Test;

public class NewTestngClass {

    @Test
    public void testCase1() {
        System.out.println("in test case 1 of NewTestngClass");
    }
    @Test
    public void testCase2() {
        System.out.println("in test case 2 of NewTestngClass");
    }
    @Test
    public void findingAddition() {
        System.out.println("in finding addition of NewTestngClass");
    }
}  

testng.xml

这是一个用于组织和运行 TestNG 测试用例的配置文件。

当只需要执行有限的测试而不是完整套件时,它非常方便。

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1" parallel = "none">
    <test name = "test1" preserve-order = "true">
        <classes>
            <class name="NewTestngClass">
                <methods>
                    <include name="test.*"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>

输出

in test case 1 of NewTestngClass
in test case 2 of NewTestngClass

===============================================
Suite1
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================

场景 2

使用正则表达式在类中运行特定方法。在这里,我们将拥有一个包,其中包含多个具有多个测试方法的类,我们将看到如何配置 testng.xml 以仅基于正则表达式运行特定包。我们将运行存在于以 com 开头的包中的类。

解决此问题的方法/算法

  • 步骤 1:在 src 下创建 2 个包,分别为 com.test 和 com.work

  • 步骤 2:创建 2 个 TestNG 类 - NewTestngClass 在包 com.test 中,OrderofTestExecutionInTestNG 在包 com.work 中

  • 步骤 3:在两个类中编写 2 个不同的 @Test 方法 - 名称分别为 test1 和 test2。

  • 步骤 3:现在创建如下所示的 testNG.xml。

  • 步骤 4:现在,运行 testNG.xml 或直接在 IDE 中运行 TestNG 类,或者使用命令行编译并运行它。

示例

以下代码演示了如何从大型套件中仅运行 1 个测试方法

src/ com.test.NewTestngClass.java

import org.testng.annotations.Test;

public class NewTestngClass {

    @Test
    public void testCase1() {
        System.out.println("in test case 1 of NewTestngClass");
    }
    @Test
    public void testCase2() {
        System.out.println("in test case 2 of NewTestngClass");
    }  
}

src/com.work.OrderofTestExecutionInTestNG.java

package com.test.exclude.class;
import org.testng.annotations.Test;

public class OrderofTestExecutionInTestNG {
    // test case 1
    @Test
    public void testCase3() {
        System.out.println("in test case 3 of OrderofTestExecutionInTestNG");
    }
    // test case 2
    @Test
    public void testCase4() {
        System.out.println("in test case 4 of OrderofTestExecutionInTestNG");
    }
}  

testng.xml

这是一个用于组织和运行 TestNG 测试用例的配置文件。

当只需要执行有限的测试而不是完整套件时,它非常方便。

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
   <test name = "test1">
      <packages>
            <package name="com.*">
            </package>
        </packages>
   </test>
</suite>

输出

in test case 1 of NewTestngClass
in test case 2 of NewTestngClass
in test case 3 of OrderofTestExecutionInTestNG
in test case 4 of OrderofTestExecutionInTestNG

===============================================
Suite1
Total tests run: 4, Passes: 4, Failures: 0, Skips: 0
=======================

更新于: 2023年8月16日

300 次查看

启动你的 职业生涯

通过完成课程获得认证

开始
广告