TestNG 如何获取测试方法的当前状态

TestNG 如何获取测试方法的当前状态

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

  • ITestContext

  • XmlTest

  • Method

  • ITestResult

这些依赖项有助于获取测试执行的状态。

通常,@AfterMethod支持所有这些本机依赖项,测试状态可以是成功、失败或跳过。

然而,TestNG支持以下测试状态,可以通过在正确的位置调用函数来检索。

org.testng.ITestResult
public static final int FAILURE 2
public static final int SKIP 3
public static final int STARTED 16
public static final int SUCCESS 1
public static final int SUCCESS_PERCENTAGE_FAILURE 4

在本文中,我们将使用ITestResult依赖项来展示如何检索测试状态。

当用户在执行后想要检索测试方法的状态时,可以在@AfterMethod内编写代码来检索测试方法的状态。

由于@AfterMethod在@Test方法之后每次执行一次,因此将打印已执行的测试方法名称的状态。在这里,我们将使用getStatus()方法,并将其返回的整数用作上述表中所示的方式。用户应该使用这些整数状态码来实现字符串。

步骤

  • 第1步:创建一个TestNG类 – NewTestngClass,并编写@AfterMethod方法。

  • 第2步:在@AfterMethod内写入以下代码。

  • 第3步:在NewTestngClass类中编写3个不同的@Test方法。一个成功,一个失败,一个跳过,如程序代码所示。

  • 第4步:现在按照下面所示创建testNG.xml以运行TestNG类。

  • 第5步:现在,在IDE中运行testNG.xml或直接运行testNG类,或者使用命令行进行编译和运行。

示例

以下是常见TestNG类NewTestngClass的代码:

src/ NewTestngClass.java

import org.testng.ITestResult;
import org.testng.SkipException;
import org.testng.annotations.*;

public class NewTestngClass {

    @Test()
    public void testcase1(){
        System.out.println("TestCase 1 - Execution started");
        assert true;
    }
    @Test()
    public void testcase2(){
        System.out.println("TestCase 2 - Execution started");
        assert false;
    }
    @Test()
    public void testcase3(){
        System.out.println("TestCase 3 - Execution started");
        throw new SkipException("Skipping the testcase 3");
    }
    @AfterMethod()
    public void status(ITestResult result){
        System.out.println("Status of execution is:"+result.getStatus()) ;
        try
        {
            if(result.getStatus() == ITestResult.SUCCESS)
            {
                System.out.println("Test case execution status is SUCCESS");
            }

            else if(result.getStatus() == ITestResult.FAILURE)
            {
                //Do something here
                System.out.println("Test case execution status is FAILURE");

            }

            else if(result.getStatus() == ITestResult.SKIP ){

                System.out.println("Test case execution status is SKIP");

            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }


    }
}

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">
      <classes>
    class name = "NewTestngClass"/>
      </classes>
   </test>
</suite>

输出

TestCase 1 - Execution started
Status of execution is:1
Test case execution status is SUCCESS
TestCase 2 - Execution started

java.lang.AssertionError
    at NewTestngClass.testcase2(NewTestngClass.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.util.ArrayList.forEach(ArrayList.java:1259)
    at org.testng.TestRunner.privateRun(TestRunner.java:794)
    at org.testng.TestRunner.run(TestRunner.java:596)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)
    at org.testng.SuiteRunner.run(SuiteRunner.java:276)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)
    at org.testng.TestNG.runSuites(TestNG.java:1063)
    at org.testng.TestNG.run(TestNG.java:1031)
    at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
    at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)

Status of execution is:2
Test case execution status is FAILURE
TestCase 3 - Execution started

Test ignored.
Status of execution is:3
Test case execution status is SKIP

===============================================
Suite1
Total tests run: 3, Passes: 1, Failures: 1, Skips: 1
===============================================

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

TestNG 精选笔记