Хорошая практика при использовании logback, TestNG на сервере непрерывной интеграции

#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>