从断言中获取日志消息
Get log message from Assertions
我正在使用范围报告库(版本 4)将 html-报告集成到我们的测试框架中。
为此我写了一个包装器,它封装了我们默认的 TestNG 记录器(用于控制台输出)和 ExtentReport 记录器(ExtentTest.log,为 html-报告收集数据)。
我们使用 TestNg 作为我们的测试框架。
从失败的断言(软断言和硬断言)中捕获日志消息以将其显示在 html-报告中时遇到问题,它们只会进入控制台日志。
捕获这些 Assert 日志消息以在 html-report 中显示它们的可能解决方案是什么?
我无法扩展 Assert(或 SoftAssert)类 并添加我自己的实现(通过在其中添加 ExtentTest.log 的实例),因为我必须替换数十个中的所有断言测试。
public class Loggers {
private static final Loggers instance = new Loggers();
private static ExtentTest test;
private static ExtentReports extent;
private static Logger LOG;
private static final String REPORT_LOCATION = "test-output/reports.extent.html";
/**
* Returns an instance of {@link ExtentReports} object. If it doesn't exist creates a new instance and returns it
*/
public static ExtentReports getLogger() {
if ( extent == null ) {
createInstance();
}
return extent;
}
/**
* Create ExtentReport and attaches htmlReporter to it
*/
public static void createInstance() {
ExtentHtmlReporter htmlReporter = getHTMLReporter();
extent = new ExtentReports();
extent.attachReporter( htmlReporter );
}
/**
* This method creates, configures and returns an instance of ExtentHtmlReporter
*
*/
public static ExtentHtmlReporter getHTMLReporter() {
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter( REPORT_LOCATION );
return htmlReporter;
}
/**
* This method logs a message with the INFO level for both instances of TestNG Logger and ExtentTest
*/
public void info( String message ) {
LOG.info( message );
test.log( Status.INFO, message );
}
找到解决方案。如果有人有类似的问题,请 post 在这里。
如果您在侦听器 class 中找到您的记录器,您可以将您的记录器放在那里并使用 ITestResult 作为参数,特别是它的方法 getThrowable(它 returns 在运行方法)
/**
* Triggered upon the failure of a test
*/
public void onTestFailure( ITestResult testResult ) {
LOG.fail( testResult.getThrowable() );
}
它将在报告中打印失败的断言或抛出的异常。
下面的代码适用于我的范围报告试试吧!
1) 初始化范围报告和记录器
public static Logger log = Logger.getLogger("devpinoyLogger");
public ExtentReports rep = ExtentManager.getInstance();
public static ExtentTest test;
2) 将配置文件 ReportsConfig.xml 用于可从 extentreports 官方网站获取的范围报告。
3) 创建 class ExtentManager 加载配置文件并设置 Extent 报告文件的输出。
public class ExtentManager {
private static ExtentReports extent;
public static ExtentReports getInstance(){
if(extent==null){
System.out.println("Path of user DIR"+System.getProperty("user.dir"));
extent = new ExtentReports(System.getProperty("user.dir")+"\target\surefire-reports\ExecutionReport.html",true,DisplayOrder.OLDEST_FIRST);
extent.loadConfig(new File(System.getProperty("user.dir")+"\src\main\java\extentconfig\ReportsConfig.xml"));
}
return extent;
}
}
4) 使用您正在创建的 INFO 和 ERROR 登录方法在 Extent 报告中显示日志。
public void click(String xpath) {
try {
driver.findElement(By.xpath(Variables.OR.getProperty(xpath))).click();
System.out.println(xpath + "Button clicked");
test.log(LogStatus.INFO, xpath + " Button clicked");
Thread.sleep(1000);
} catch (Exception e) {
System.err.println("Cannot Click " + e.getMessage());
test.log(LogStatus.ERROR,"Unable to click on :: " + xpath + " Button");
throw new AssertionError("Unable to click on :: " + xpath + " Button", e);
}
}
5) 使用自定义侦听器 class CustomListeners
public class CustomListeners extends TestBase implements ITestListener, ISuiteListener {
public boolean flag;
..implement all methods of CustomListeners class and use logs in onTestSuccess and onTestFailure Methods.
public void onTestSuccess(ITestResult arg0) {
test.log(LogStatus.PASS, arg0.getName().toUpperCase() + " PASS");
rep.endTest(test);
rep.flush();
}
public void onTestFailure(ITestResult arg0) {
System.out.println(arg0 + " =================Test Case Failed===========================");
flag = true;
System.out.println("Flag is inside onTestFailure " + flag);
System.setProperty("org.uncommons.reportng.escape-output", "false");
try {
test.log(LogStatus.FAIL, arg0.getName().toUpperCase() + " Failed with exception : " + arg0.getThrowable());
rep.endTest(test);
rep.flush();
} catch (IOException e) {
System.err.println("IOException occurs " + e.getMessage());
e.printStackTrace();
}
}
}
- 通过测试用例的 ExtentReport 视图
- FAIL 测试用例的 ExtentReport 视图
我正在使用范围报告库(版本 4)将 html-报告集成到我们的测试框架中。
为此我写了一个包装器,它封装了我们默认的 TestNG 记录器(用于控制台输出)和 ExtentReport 记录器(ExtentTest.log,为 html-报告收集数据)。 我们使用 TestNg 作为我们的测试框架。
从失败的断言(软断言和硬断言)中捕获日志消息以将其显示在 html-报告中时遇到问题,它们只会进入控制台日志。 捕获这些 Assert 日志消息以在 html-report 中显示它们的可能解决方案是什么?
我无法扩展 Assert(或 SoftAssert)类 并添加我自己的实现(通过在其中添加 ExtentTest.log 的实例),因为我必须替换数十个中的所有断言测试。
public class Loggers {
private static final Loggers instance = new Loggers();
private static ExtentTest test;
private static ExtentReports extent;
private static Logger LOG;
private static final String REPORT_LOCATION = "test-output/reports.extent.html";
/**
* Returns an instance of {@link ExtentReports} object. If it doesn't exist creates a new instance and returns it
*/
public static ExtentReports getLogger() {
if ( extent == null ) {
createInstance();
}
return extent;
}
/**
* Create ExtentReport and attaches htmlReporter to it
*/
public static void createInstance() {
ExtentHtmlReporter htmlReporter = getHTMLReporter();
extent = new ExtentReports();
extent.attachReporter( htmlReporter );
}
/**
* This method creates, configures and returns an instance of ExtentHtmlReporter
*
*/
public static ExtentHtmlReporter getHTMLReporter() {
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter( REPORT_LOCATION );
return htmlReporter;
}
/**
* This method logs a message with the INFO level for both instances of TestNG Logger and ExtentTest
*/
public void info( String message ) {
LOG.info( message );
test.log( Status.INFO, message );
}
找到解决方案。如果有人有类似的问题,请 post 在这里。
如果您在侦听器 class 中找到您的记录器,您可以将您的记录器放在那里并使用 ITestResult 作为参数,特别是它的方法 getThrowable(它 returns 在运行方法)
/**
* Triggered upon the failure of a test
*/
public void onTestFailure( ITestResult testResult ) {
LOG.fail( testResult.getThrowable() );
}
它将在报告中打印失败的断言或抛出的异常。
下面的代码适用于我的范围报告试试吧!
1) 初始化范围报告和记录器
public static Logger log = Logger.getLogger("devpinoyLogger");
public ExtentReports rep = ExtentManager.getInstance();
public static ExtentTest test;
2) 将配置文件 ReportsConfig.xml 用于可从 extentreports 官方网站获取的范围报告。
3) 创建 class ExtentManager 加载配置文件并设置 Extent 报告文件的输出。
public class ExtentManager {
private static ExtentReports extent;
public static ExtentReports getInstance(){
if(extent==null){
System.out.println("Path of user DIR"+System.getProperty("user.dir"));
extent = new ExtentReports(System.getProperty("user.dir")+"\target\surefire-reports\ExecutionReport.html",true,DisplayOrder.OLDEST_FIRST);
extent.loadConfig(new File(System.getProperty("user.dir")+"\src\main\java\extentconfig\ReportsConfig.xml"));
}
return extent;
}
}
4) 使用您正在创建的 INFO 和 ERROR 登录方法在 Extent 报告中显示日志。
public void click(String xpath) {
try {
driver.findElement(By.xpath(Variables.OR.getProperty(xpath))).click();
System.out.println(xpath + "Button clicked");
test.log(LogStatus.INFO, xpath + " Button clicked");
Thread.sleep(1000);
} catch (Exception e) {
System.err.println("Cannot Click " + e.getMessage());
test.log(LogStatus.ERROR,"Unable to click on :: " + xpath + " Button");
throw new AssertionError("Unable to click on :: " + xpath + " Button", e);
}
}
5) 使用自定义侦听器 class CustomListeners
public class CustomListeners extends TestBase implements ITestListener, ISuiteListener {
public boolean flag;
..implement all methods of CustomListeners class and use logs in onTestSuccess and onTestFailure Methods.
public void onTestSuccess(ITestResult arg0) {
test.log(LogStatus.PASS, arg0.getName().toUpperCase() + " PASS");
rep.endTest(test);
rep.flush();
}
public void onTestFailure(ITestResult arg0) {
System.out.println(arg0 + " =================Test Case Failed===========================");
flag = true;
System.out.println("Flag is inside onTestFailure " + flag);
System.setProperty("org.uncommons.reportng.escape-output", "false");
try {
test.log(LogStatus.FAIL, arg0.getName().toUpperCase() + " Failed with exception : " + arg0.getThrowable());
rep.endTest(test);
rep.flush();
} catch (IOException e) {
System.err.println("IOException occurs " + e.getMessage());
e.printStackTrace();
}
}
}
- 通过测试用例的 ExtentReport 视图
- FAIL 测试用例的 ExtentReport 视图