我已经定制了ExtentReport,每个Test Class都将在Extent Report中显示为Parent test,并且每个@Test方法都将作为子项附加到父级 .

我可以将传递/失败测试附加到父类,但是我无法将跳过的案例追加到父类 . 而是将跳过的案例作为单独的测试添加到报告中 .

我尝试使用@AfterMethod和ITestListener解决问题,但没有运气 .

如何解决这个问题?

谢谢!

Extent Report

ExtentManager.java

public class ExtentManager {

    private static ExtentReports extent;

    public synchronized static ExtentReports getReporter() {
        if (extent == null) {

            // Set HTML reporting file location
            String workingDir = System.getProperty("user.dir");
            extent = new ExtentReports(workingDir
                    + "\\ExtentReports\\ExtentReportResults.html", true);
        }
        return extent;
    }
}

ExtentTestManager.java

public class ExtentTestManager {
    static Map<Integer, ExtentTest> extentTestMap = new HashMap<Integer, ExtentTest>();
    static ExtentReports extent = ExtentManager.getReporter();


    public static synchronized ExtentTest getTest() {
        return (ExtentTest) extentTestMap.get((int) (long) (Thread
                .currentThread().getId()));
    }

    public static synchronized void endTest() {
        extent.endTest((ExtentTest) extentTestMap.get((int) (long) (Thread
                .currentThread().getId())));
    }

    public static synchronized ExtentTest startTest(String testName) {
        ExtentTest test = extent.startTest(testName);

        extentTestMap.put((int) (long) (Thread.currentThread().getId()), test);
        return test;
    }
}

我在Test类中为父创建对象,如下所示:

@BeforeClass(alwaysRun = true)
    public void parentExtent(ITestContext context) {
        parent = ExtentManager.getReporter().startTest(
                this.getClass().getSimpleName());
    }

//在每个方法之后将每个方法结果附加到父级

@AfterMethod(alwaysRun = true)
    public void tearDown(ITestResult iTestResult) throws IOException {

        if (ITestResult.FAILURE == iTestResult.getStatus()) {
            ExtentTestManager.getTest().log(
                    LogStatus.FAIL,
                    "Test Failed",
                    ExtentTestManager.getTest().addScreenCapture(
                            CommonBaseTestCase.capture(m_driver)));

        }
        parent.appendChild(ExtentTestManager.getTest());
        m_driver.quit();
        m_driver = null;
    }

每节课结束后关闭父母:

@AfterClass(alwaysRun = true)
    public void endtest() {
        ExtentManager.getReporter().endTest(parent);
    }

下面是我的Listener类:

@Override
    public void onStart(ITestContext iTestContext) {
        iTestContext.setAttribute("WebDriver", m_driver);
    }

    @Override
    public void onFinish(ITestContext iTestContext) {

        if (m_driver != null) {
            m_driver.quit();
        }
    }

    @Override
    public void onTestStart(ITestResult iTestResult) {
        ExtentTestManager.startTest(iTestResult.getMethod().getMethodName());

        ExtentTestManager.getTest().log(LogStatus.PASS,
                iTestResult.getMethod().getMethodName(), "  Test Started");

    }

    @Override
    public void onTestSuccess(ITestResult iTestResult) {
        ExtentTestManager.getTest().log(LogStatus.PASS,
                iTestResult.getMethod().getMethodName(), "  Test passed");

    }

    @Override
    public void onTestFailure(ITestResult iTestResult) {
        ExtentTestManager.getTest().log(LogStatus.FAIL,
                iTestResult.getMethod().getMethodName() + "  Test Failed",
                iTestResult.getThrowable());
    }

    @Override
    public void onTestSkipped(ITestResult iTestResult) {

        ExtentTestManager.getTest().log(LogStatus.SKIP,
                iTestResult.getMethod().getMethodName() + "  Test Skipped",
                iTestResult.getThrowable());
        parent.appendChild(ExtentTestManager.getTest());
    }

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) {
        System.out.println("Test failed but it is in defined success ratio "
                + getTestMethodName(iTestResult));
    }

当我基于上述配置执行我的案例时,跳过的案例不会像传递/失败案例一样附加到父案件 . 请查看报告以供参考 .