我已经定制了ExtentReport,每个Test Class都将在Extent Report中显示为Parent test,并且每个@Test方法都将作为子项附加到父级 .
我可以将传递/失败测试附加到父类,但是我无法将跳过的案例追加到父类 . 而是将跳过的案例作为单独的测试添加到报告中 .
我尝试使用@AfterMethod和ITestListener解决问题,但没有运气 .
如何解决这个问题?
谢谢!
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));
}
当我基于上述配置执行我的案例时,跳过的案例不会像传递/失败案例一样附加到父案件 . 请查看报告以供参考 .