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
===============================================