#java #teamcity #testng #logback
#java #teamcity #testng #logback
Вопрос:
Мы используем logback и TestNG для нашего проекта. Logback настроен на вывод как на консоль, так и в файл, с уровнем ТРАССИРОВКИ, когда мы выполняем тесты (задается в logback-test.xml
файле).
Теперь есть две проблемы. Во-первых, при запуске этого на сервере CI (TeamCity) мы получаем файл BuildLog объемом более 700 МБ, который является пустой тратой места (файл журнала уже есть) и перегружает браузер. Во-вторых, мы не можем напечатать ошибки утверждения в журнале. Поскольку они перехватываются TestNG, они отображаются только в пользовательском интерфейсе TeamCity, но не в журналах файлов.
Какие здесь должны быть хорошие подходы? Я подумываю о регистрации на информационном уровне на консоли, если выполняется под TeamCity, и ТРАССИРОВКЕ в противном случае. Этого я мог бы достичь, используя фильтр, управляемый через переменную среды. Что касается второй проблемы, у меня все еще нет идеи.
тиа, Никола
Ответ №1:
Чтобы получить AssertionError
s, напечатанные в журналах файлов, я закончил реализацию TestNG ITestListener
:
public class ListenerLogger implements ITestListener
{
private static final Logger LOG = LoggerFactory.getLogger(ListenerLogger.class);
@Override
public void onTestStart(ITestResult result)
{
LOG.info("Starting {}.{} with parameters {}", result.getTestClass().getName(), result.getTestName(), result.getParameters());
}
@Override
public void onTestSuccess(ITestResult iTestResult)
{
LOG.info("Test successful");
}
// This belongs to ITestListener and will execute only on the event of fail test
public void onTestFailure(ITestResult result)
{
LOG.error("Test failed!", result.getThrowable());
}
...
}
И добавил это в pom.xml
проект, который у меня есть под CI:
<dependency>
<groupId>my.awesome.project</groupId>
<artifactId>ci-helper</artifactId>
<version>1.0.1</version>
<scope>test</scope>
</dependency>