这篇文章将讨论如何在运行时获取测试用例的细节。我们可能在不同的场景中需要这些信息,比如创建定制的报告或者开发一个实时跟踪系统来监视测试用例的进度。
让我们从使用TestNG运行测试套件开始开始。然后,我们将尝试检索每个测试用例的细节,当它被标记为通过或失败时。
执行测试套件
制作两个测试类
我们将创建两个测试类,CodekruTest1和CodekruTest2。
CodekruTest1.java
package org.website.codekru;import org.testng.annotations.Test;public class CodekruTest1 {@Testpublic void testCase1() {System.out.println("Executing test case 1 in CodekruTest1");}@Testpublic void testCase2() {System.out.println("Executing test case 2 in CodekruTest1");}}
CodekruTest2.java
package org.website.codekru;import org.testng.annotations.Test;public class CodekruTest2 {@Testpublic void testCase1() {System.out.println("Executing test case 1 in CodekruTest2");}@Testpublic void testCase2() {System.out.println("Executing test case 2 in CodekruTest2");}}
通过testng.xml执行这两个类
我们将使用testng.xml文件来运行上面提到的类。使用testng.xml运行测试用例可以更好地控制执行过程,并深入了解用例将如何执行。
<suite name="codekru"><test name="Test1"><classes><class name="org.website.codekru.CodekruTest1" /></classes></test><test name="Test2"><classes><class name="org.website.codekru.CodekruTest2" /></classes></test>
</suite>
我们创造了两个测试(test),每个测试包含一个类。让我们运行上面的XML文件。
Executing test case 1 in CodekruTest1
Executing test case 2 in CodekruTest1
Executing test case 1 in CodekruTest2
Executing test case 2 in CodekruTest2
在运行时获取测试用例详细信息
TestNG提供了一个带有几个方法的ITestlog接口,这些方法允许我们获得关于正在执行的测试用例的详细信息。例如,我们可以使用onTestSuccess()方法来检索基本数据点,例如测试用例结果、运行时信息和其他相关细节,只要测试用例被标记为通过。通过利用这些功能,我们可以获得对自动化测试套件性能的有价值的洞察,并获得测试条件下应用程序行为的详细视图。
让我们来创建一个实现ITesternet接口的类。我们将尝试在测试用例通过时检索测试用例的详细信息。
package org.website.codekru;import org.testng.ITestListener;
import org.testng.ITestResult;public class TestListenerClass implements ITestListener {public void onTestSuccess(ITestResult result) {}}
我们现在将在OnTestSuccess()方法中获取以下数据点:
- 测试用例的名称
- 测试名称(testng.xml中的测试标记中使用的测试名称)
- 当前测试(test)中有多少个测试用例
- 到目前为止,有多少病例被标记为通过
在onTestSuccess()中传递的ITestResult参数描述了测试的结果,因此可以用于查找上述数据点。
如何获取当前执行的测试用例/方法的名称?
String currentTestCaseName = result.getMethod().getMethodName();
如何获取测试的名称(在测试标记中传递的名称)
String currenTestName = result.getTestContext().getCurrentXmlTest().getName();
如何获得测试中的测试用例总数?
int totalCasesInTheTest = result.getTestContext().getAllTestMethods().length;
如何获取当前测试(测试标签)中到目前为止通过的案例数?
int passedCasesTillNow = result.getTestContext().getPassedTests().size()+1;
我们将该值递增1以计数当前测试用例。
整个代码
package org.website.codekru;import org.testng.ITestListener;
import org.testng.ITestResult;public class TestListenerClass implements ITestListener {public void onTestSuccess(ITestResult result) {String currentTestCaseName = result.getMethod().getMethodName();String currenTestName = result.getTestContext().getCurrentXmlTest().getName();int totalCasesInTheTest = result.getTestContext().getAllTestMethods().length;int passedCasesTillNow = result.getTestContext().getPassedTests().size()+1;System.out.println("Current Test Case Name: " + currentTestCaseName);System.out.println("Current Test Name: " + currenTestName);System.out.println("Total Case In The Test: " + totalCasesInTheTest);System.out.println("Passed Cases Till Now In The test: " + passedCasesTillNow);}}
要在测试执行中使用该脚本,请将其包含在testng.xml文件中,如下所示:
<suite name="codekru"><listeners><listener class-name="org.website.codekru.TestListenerClass" /></listeners><test name="Test1"><classes><class name="org.website.codekru.CodekruTest1" /></classes></test><test name="Test2"><classes><class name="org.website.codekru.CodekruTest2" /></classes></test>
</suite>
现在,执行上面的XML文件。
这就是如何轻松地检索关于测试用例的相关信息。我们只使用了onTestSuccess()方法,但根据您的需求,您可能还希望使用其他方法,例如onTestStart()或onTestFailure()。