TestNG 如何从AfterClass获取当前类名

TestNG 如何从AfterClass获取当前类名

TestNG支持本地依赖注入。它允许在方法中声明额外的参数。在运行时,TestNG会自动填充这些参数的正确值。以下是TestNG中的一些本地依赖项:

  • ITestContext

  • XmlTest

  • Method

  • ITestResult

这些依赖项有助于根据调用它们的位置来检索测试类名。如果用户希望在执行后检索测试类名,最好的位置是@AfterClass。

@AfterClass支持ITestContext和XmlTest。

但是,这些依赖项的完全访问如下所示:

Annotation ITestContext XmlTest Method ITestResult
BeforeSuite Yes No No No
BeforeTest Yes Yes No No
BeforeGroups Yes Yes No No
BeforeClass Yes Yes No No
BeforeMethod Yes Yes Yes Yes
Test Yes No No No
AfterMethod Yes Yes Yes Yes
AfterClass Yes Yes No No
AfterGroups Yes Yes No No
AfterTest Yes Yes No No
AfterSuite Yes No No No

在本文中,我们将使用ITestContext依赖项来展示如何检索测试类名称,而无需使用任何依赖项。

场景1

当用户想要在执行后检索测试类的名称时。在这种情况下,将在@AfterClass中编写代码以检索将要执行的当前类名。

由于@AfterClass在最后执行,所以在执行任何类后,类名将被打印出来。

步骤

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

  • 步骤2:在类中的@AfterClass中编写以下代码;

public void name(ITestContext context) {
        System.out.println("在NewTestngClass的Afterclass中");
        System.out.println("使用ITestContext获取测试类名称:"+context.getCurrentXmlTest().getClasses().stream().findFirst().get().getName());
        System.out.println("不使用ITestContext获取测试类名称:"+this.getClass().getName());

}
  • 第一行将打印我们所在的类。这是硬编码的。

  • 代码的第二行将使用ITestContext依赖项在运行时打印测试类名。

  • 代码的第三行将在运行时打印测试类名,而不使用任何依赖项。

    • 步骤3:现在创建如下的testNG.xml以运行TestNG类。

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

示例

以下是通用TestNG类NewTestngClass的代码−NewTestngClass:

src/NewTestngClass.java

import org.testng.ITestContext;
import org.testng.annotations.*;

public class NewTestngClass {

    // test case 1
    @Test()
    public void testCase1() {

        System.out.println("in test case 1 of NewTestngClass");
    }
    // test case 2
    @Test()
    public void testCase2() {
        System.out.println("in test case 2 of NewTestngClass");
    }
    @AfterClass
    public void name(ITestContext context) {
        System.out.println("in Afterclass of NewTestngClass");
        System.out.println("Test Class name using ITestContext is:"+context. getCurrentXmlTest().getClasses().stream().findFirst().get().getName());
    System.out.println("Test Class name without using ITestContext is:"+this.getClass().getName());

    }
}

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"/>

        </classes>
    </test>
</suite>

输出

in test case 1 of NewTestngClass
in test case 2 of NewTestngClass
Test Class name using ITestContext is: NewTestngClass
in Afterclass of NewTestngClass
Test Class name without using ITestContext is: NewTestngClass

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

TestNG 精选笔记