当前位置: 首页 > 知识库问答 >
问题:

让logger在其执行期间生成的所有日志上始终预先添加测试方法名称的优雅方法是什么?

东方淇
2023-03-14

考虑以下设置:

@Test
class MyTest {

    @Test
    fun testX(sessionId: String) {
        methodName = object {}.javaClass.enclosingMethod.name
        LOGGER.info("Test {}: Doing", methodName)
        helper(methodName)
        LOGGER.info("Test {}: Done", methodName)
    }

    fun helper(methodName: String) {
        LOGGER.info("Test {}: Helping", methodName)
    }
}

我想知道是否有一种更优雅的方法来配置记录器以始终将测试名称(如上所述)添加到测试范围内完成的所有日志中,s,t。我不必到处传递方法名称。

我能想到的一个选项是MDC(https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html)。但是,我可以看到它在TestNG中不会很好地工作,因为相同的类实例在测试用例之间共享(与JUnit不同)。

共有1个答案

施琦
2023-03-14

我建议使用TestNG侦听器。

下面是一个小例子。创建一个实现ITestListener的类:

class MyListener: ITestListener {
    private val logger: Logger = getLogger(MyListener::class.java)

    override fun onTestStart(result: ITestResult?) {
        logger.info("Test {}: doing", result?.name)
    }
}

然后,用这个注释注册它:

import org.testng.annotations.Listeners
import org.testng.annotations.Test

@Listeners(MyListener::class)
class MyTest {
    @Test
    fun testX() {
        // ...
    }

    @Test
    fun testY() {
        // ...
    }

    @Test
    fun testZ() {
        // ...
    }
}

所以运行你的测试,你应该得到这样的东西:

13:38:57.008 [Test worker] INFO MyListener - Test testX: doing
13:38:57.015 [Test worker] INFO MyListener - Test testY: doing
13:38:57.016 [Test worker] INFO MyListener - Test testZ: doing

希望这有帮助

 类似资料:
  • 我在JUnit测试类中使用Javautil日志(JUL),JUL在默认配置中工作(即打印到控制台)。 使用和注释的方法中的日志语句在执行时将被打印,但“@Test”方法中的日志仅在所有测试执行完成后才被打印。 不确定到底是哪里出了问题,因为同样的方法在更早的时候就起作用了。 记录器实例化: 记录器用途: 测试用例使用maven运行。我注意到,只有在我开始使用这个surefire配置并行运行测试类后

  • 正如前面的回答中所解释的,更改Spark cluster详细信息的理想方法是更改相应的log4j。财产。但是,在dataproc上,Spark在Thread上运行,因此我们必须调整全局配置,而不是/usr/lib/Spark/conf 若干建议: 在dataproc上,我们有几个gcloud命令和属性可以在集群创建期间传递。如有可能更改log4j,请参阅文档。在/etc/hadoop/conf下指

  • 问题内容: 经过大量搜索,我发现有几种方法可以向现有实例对象添加绑定方法或未绑定类方法 此类方法包括以下代码采用的方法。 让我烦恼的是,输入该函数的名称,或两次。 有什么简单的方法可以将现有功能添加到类或实例中,而无需再次键入该功能的名称? 例如, 将现有功能添加到实例或类将是一种非常优雅的方法,因为该功能已经具有属性。 问题答案: 通常,当您使用点分访问查找对象字典时,存储在对象字典中的函数不会

  • 问题内容: 在Python 2.7中执行元组算术的最优雅,简洁的方法(不创建带有运算符重载的我自己的类)? 可以说我有两个元组: 我的预期结果是 我目前使用: 我也尝试过: 但结果是。我相信以上内容是嵌套的for循环,导致4次迭代和4个值。 问题答案: 如果您正在快速寻找,可以使用numpy: 如果您想将其保存在一个元组中:

  • 本文向大家介绍nginx日志按天生成和定期删除日志的方法,包括了nginx日志按天生成和定期删除日志的方法的使用技巧和注意事项,需要的朋友参考一下 问题:nginx会按照nginx.conf的配置生成access.log和error.log,随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度,nginx没有这种按天或更细粒度生成日志的机制。所以下面

  • 我目前正在处理一个问题,其中DateTime.addMonths(iStartDateH,DurationAsInt)正在增加一天。它在内部使用格鲁吉亚日历。我们目前正在这个项目中使用Java 5,例如:24个月 我尝试检查完整的日期/时间差异,并将其作为730.77393518518518555请帮助。