【发布时间】:2018-10-29 09:49:03
【问题描述】:
我有一个使用 log4j 作为记录器的 java 项目。要求是在日志文件中打印测试用例名称。
一个类中有多个测试并且该项目也支持并行执行。为每个测试创建一个记录器实例。
我使用 system.Setproprty 将我当前的记录器实例与测试用例名称相关联。以下是我的 log4j.properties 文件:-
log4j.appender.logFileAppender.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} [%t] ${testCaseName} %5p (%F:%L) - %m%n
log4j.appender.logFileAppender.Append=false
log4j.appender.logFileAppender.file=./log/UITest.log
并且运行时变量 ${testCaseName} 在创建记录器文件的新实例时设置如下:-
public Logger log;
public synchronized Logger initializeLogger(String testName)
{
log = LoggerFactory.getLogger(testName);
System.setProperty("testCaseName", testName);
PropertyConfigurator.configure(log4jPropertiesFilePath);
return log;
}
上面的looger实例创建方法是在@BeforeMethod中调用的。
当前记录器文件正在打印一个类中最后一个测试的测试名称(在非并行和并行执行模式下)
请帮助我确定导致多个测试用例没有在日志文件中打印其测试用例名称的问题。
【问题讨论】:
-
我认为日志文件在测试用例运行期间只初始化一次,所以只打印 1 个测试名称。你试过Java
reflection参数Method或testng注解ITestResult。您可以查看此链接stackoverflow.com/questions/2952202/… -
感谢阿米特的回复。但是我在每次测试之前都调用了“initializeLogger”方法。此外,当一个类中的 2 个测试运行时,我的日志文件中的日志名称为第二个测试用例。我使用 ITestResult 将 testName 作为参数传递来初始化记录器,它工作正常。唯一的问题是将 testCaseName 关联到不同的记录器实例。
-
有人知道这个问题的解决方案吗?