如何在 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:現在,執行 testNG.xml 或直接在 IDE 中執行 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
=============================================== 

更新於: 2023年8月17日

232 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告