【发布时间】:2019-08-20 16:24:35
【问题描述】:
我正在使用 TestNG 和注释-“dependsonMethods”
代码示例:
@Test(dependsOnMethods = { "test2" })
public void Test1() throws IOException { }
现在,需要以编程方式获取触发了其他测试方法 (Test2) 的测试方法 (Test1) 的名称。
******************更新了上下文和代码示例**************************** ***
我正在 Maven 项目中运行 TestNg、java、extent 报告 4.0.9、selenium 测试。
CURRENT:使用 TestNg-"dependsonMethods" 调用 [addTest] 的测试 [addAndPopulateTest]。运行后,Extent Report 将 [addAndPopulateTest] 和 [addTest] 的结果分别显示为 2 个单独的测试。这是当前情况的链接:https://imgur.com/ZnBNqzo
预期:范围 HTML 报告应显示 - 单个测试,即 [addAndPopulateTest] 和 2 个子测试,即 [addTest] 和 [addAndPopulateTest]。这是ToBe情况的链接:https://imgur.com/NKMxoIB
*****代码示例
///TC_addAndPopulateTest
package com.tra.testCases;
import org.testng.annotations.Test;
import com.tram.pageObjects.BaseClass;
public class TC_addAndPopulateTest extends TC_addTest {
@Test(dependsOnMethods = { "addTest" })
public void addAndPopulateTest() throws IOException, InterruptedException {
System.out.println("Currently executing Test-> addAndPopulateTest");
}
}
///TC_addTest
package com.tram.testCases;
import java.io.IOException;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.tram.pageObjects.BaseClass;
public class TC_addTest extends BaseClass {
@Test()
public void addTest() throws IOException, InterruptedException {
System.out.println("Currently executing Test->'addTest'");
}
}
///报表类
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.tram.pageObjects.BaseClass;
public class Reporting extends BaseClass implements ITestListener {
private static ExtentReports extent =
ExtentManager.createInstance("Extent-Report.html");
private static ThreadLocal parentTest = new ThreadLocal();
private static ThreadLocal test = new ThreadLocal();
@Override
public synchronized void onStart(ITestContext context) {
}
@Override
public synchronized void onFinish(ITestContext context) {
extent.flush();
}
@Override
public synchronized void onTestStart(ITestResult result) {
**//Currently, [addTest] is ready to be executed, So, need to the find
that this test method [addTest] has triggered directly by [TC_addTest]
class or by other test method.
A] If directly by the test class, set
PARENT=result.getMethod().getMethodName()
B] if indirectly by the other test method, set PARENT= Name of the test
method [addAndPopulateTest] which has triggered the [addTest] //**
ExtentTest parent =
Extent.createTest(result.getMethod().getMethodName());
parentTest.set(parent);
}
@Override
public synchronized void onTestSuccess(ITestResult result) {
ExtentTest child = ((ExtentTest)
parentTest.get()).createNode(result.getMethod().getMethodName());
test.set(child);
((ExtentTest) test.get()).pass("Test passed");
}
@Override
public synchronized void onTestFailure(ITestResult result) {
((ExtentTest) test.get()).fail(result.getThrowable());
}
@Override
public synchronized void onTestSkipped(ITestResult result) {
((ExtentTest) test.get()).skip(result.getThrowable());
}
@Override
public synchronized void onTestFailedButWithinSuccessPercentage(ITestResult
result) {
}
}
//范围管理器
package com.tram.utilities;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
import com.aventstack.extentreports.reporter.configuration.Theme;
public class ExtentManager {
private static ExtentReports extent;
public static ExtentReports getInstance() {
if (extent == null)
createInstance("test-output/extent.html");
return extent;
}
public static ExtentReports createInstance(String fileName) {
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(fileName);
htmlReporter.config().setTheme(Theme.STANDARD);
htmlReporter.config().setDocumentTitle(fileName);
htmlReporter.config().setReportName(fileName);
extent = new ExtentReports();
extent.attachReporter(htmlReporter);
return extent;
}
}
【问题讨论】:
-
如果只需要方法名,可以通过stackoverflow.com/questions/41502326/…获取
-
@IshitaShah:我没有简单的方法名称。我想要调用方法的名称 - Test1 当我在被调用的方法 - Test2 中时。请注意,我正在执行 Test1 并且在 Test1 上方找到 dependsOnMethods = { "test2" } 后执行到 Test2。
-
使用 ITestResult 可以获得方法数组。 arg0.getMethod().getMethodsDependedUpon();并且 Test1 没有调用 Test2
-
@RahulL:我想你在这里问我一个问题..而且 Test1 没有调用 Test2?我对此的回答是否定的。当 Test2 被执行 & arg0.getMethod().getMethodsDependedUpon() 是空数组。
标签: testng extentreports selenium-extent-report