Каким элегантным способом заставить регистратор всегда добавлять имя тестового метода ко всем журналам, созданным во время его выполнения? - PullRequest
0 голосов
/ 09 мая 2020

Рассмотрим следующую настройку ниже:

@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)
    }
}

Я хотел бы знать, есть ли более элегантный способ настроить регистратор, чтобы всегда добавлять имя теста (как указано выше) ко всем журналам, выполняемым в объем испытания, с, т. Мне не нужно везде передавать имя метода.

Один из вариантов, который я могу придумать, - это MD C (https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html). Однако я вижу, что в TestNG это не сработает, поскольку один и тот же экземпляр класса используется в разных тестовых примерах (в отличие от JUnit).

1 Ответ

1 голос
/ 09 мая 2020

Я бы посоветовал использовать для этого прослушиватели 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

Надеюсь, это поможет

...