2017-06-14 31 views
0

這裏我使用偵聽器以HTML格式生成報告,但它不打印出現在測試用例中的日誌。如何通過在java中使用ExtentReports監聽器來打印日誌?

樣品測試案例在BaseClass的

public void reportLog(String message) { 
    message = BREAK_LINE + message; 
    logger.info("Message: " + message); 
    Reporter.log(message); 
} 

ExtentReport監聽

public class ExtentReporterNG implements IReporter { 

private ExtentReports extent; 

public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) { 
    extent = new ExtentReports(outputDirectory + File.separator + "ExtentReport.html", true); 

    for (ISuite suite : suites) { 
     Map<String, ISuiteResult> result = suite.getResults(); 

     for (ISuiteResult r : result.values()) { 
      ITestContext context = r.getTestContext(); 
      buildTestNodes(context.getPassedTests(), LogStatus.PASS); 
      buildTestNodes(context.getFailedTests(), LogStatus.FAIL); 
      buildTestNodes(context.getSkippedTests(), LogStatus.SKIP); 
     } 
    } 

    extent.flush(); 
    extent.close(); 
} 

private void buildTestNodes(IResultMap tests, LogStatus status) { 
    ExtentTest test; 

    if (tests.size() > 0) { 
     for (ITestResult result : tests.getAllResults()) { 
      test = extent.startTest(result.getMethod().getMethodName()); 
      test.assignAuthor("360Log"); 
      test.setStartedTime(getTime(result.getStartMillis())); 
      test.setEndedTime(getTime(result.getEndMillis())); 

      for (String group : result.getMethod().getGroups()) 
       test.assignCategory(group); 
      int s = result.getStatus(); 
      if (result.getStatus() == 1) { 
       test.log(status, "Test " + status.toString().toLowerCase() + "ed"); 
      } else { 
       String screen = BaseTest.screen; 
       test.log(status, "Test " + status.toString().toLowerCase() + "ed " + test.addScreenCapture(screen)); 

      } 
      extent.endTest(test); 
     } 
    } 
    } 

} 
@Test 
public void testRedirectAllControlScreen() throws Exception { 

    reportLog("login using a valid IsoMetrix username and password."); 
    HomePage homePage = loginPage.login("username", "password"); 

    reportLog("Go to All Control page"); 
    AllControlPage allControlPage = homePage.navigateToControlPage(); 

    reportLog("Verify All Control page"); 
    allControlPage.verifyAllControlPage(); 

} 

方法現PFA的截圖。 It doesn't print logs step wise.

+0

這是幹什麼的? Reporter.log(消息); –

+0

@santhoshkumar它是TestNG爲記錄提供的默認方法。 –

+0

然後,我們需要在方法之前啓動Extent測試,並記錄爲text.log(「」);在@test方法中。 –

回答

1

以下代碼適用於Extent Report版本:v2.41.1,請試用!!!

嘗試創建一個對象報告和記錄器作爲下面的代碼。

// Base Class Usage 
public static ExtentReports report; 
public static ExtentTest logger; 

report = new ExtentReports(path);  
report.loadConfig(new File("//home//.....//extent-config.xml")); 

logger = report.startTest(this.getClass().getSimpleName()).assignCategory("Happy Path")); 

// Test Case Usage: Using it at Every Step in Each Test Case 
logger.log(LogStatus.INFO,"String Message to Log for Each Step in Test Case"); 

// @AfterMethod 
@AfterMethod(alwaysRun=true) 
    public void TearDown_AM(ITestResult result) throws IOException 
    { 
     System.out.println("@After Method"); 
    try 
    { 
     if(result.getStatus()==ITestResult.FAILURE) 
     { 
      String res = captureScreenshot(Driver, result.getName()); 
      String image= logger.addScreenCapture(res); 
      System.out.println(image); 
      String TestCaseName = this.getClass().getSimpleName() + " Test Case Failure and Title/Boolean Value Failed"; 
      logger.log(LogStatus.FAIL, TestCaseName + logger.addScreenCapture(res)); 
      // logger.log(LogStatus.FAIL, image, this.getClass().getSimpleName() + " Test Case Failure and Title/Boolean Value Failed"); 
     } 
     else if(result.getStatus()==ITestResult.SUCCESS) 
     { 
      logger.log(LogStatus.PASS, this.getClass().getSimpleName() + " Test Case Success and Title Verified"); 
     } 
     else if(result.getStatus()==ITestResult.SKIP) 
     { 
      logger.log(LogStatus.SKIP, this.getClass().getSimpleName() + " Test Case Skipped"); 
     } 
     report.endTest(logger); 
     report.flush(); 

    } 
    catch(Throwable t) 
    { 
     logger.log(LogStatus.ERROR,t.fillInStackTrace()); 
    } 

    } 

Logging in Extent Report Test Case Wise

0

不使用監聽器,我能夠實現同樣的事情。 我實施程度的測試和程度報告Baseclass.java每個人的建議是這樣的:

public static ExtentTest test; 
public static ExtentReports extent; 

@BeforeSuite 
public void before() { 
    extent = new ExtentReports("target\\surefire-reports\\ExtentReport.html", true); 
} 

@BeforeMethod 
public void setUp(Method method) throws Exception { 
      test = extent.startTest(method.getClass().getSimpleName(),method.getClass().getEnclosingMethod().getName()); 
    test.assignAuthor("Vaibhav"); 
//Rest code will be generic for browser initiliazion. 

} 

@AfterSuite 
public void tearDownSuite() { 
    // reporter.endReport(); 
    extent.flush(); 
    extent.close(); 
} 

//Method for adding logs passed from test cases 
public void reportLog(String message) {  
    test.log(LogStatus.INFO, message);//For extentTest HTML report 
    logger.info("Message: " + message); 
    Reporter.log(message); 

} 

樣品測試案例

@Test 
public void testRedirectAllControlScreen() throws Exception { 

    reportLog("login using a valid IsoMetrix username and password."); 
    HomePage homePage = loginPage.login("username", "password"); 

    reportLog("Go to All Control page"); 
    AllControlPage allControlPage = homePage.navigateToControlPage(); 

    reportLog("Verify All Control page"); 
    allControlPage.verifyAllControlPage(); 

} 
  • ExtentReport視圖

ExtentReport view