Добавление лога в Allure (allure add text to overview)

Java+Selenium+TestNG+Allure. Проблема следующая, я очень хотел выводить шаги тестирования в Allure, в overview, и именно текстом, а не прикреплять файл с логом. Чтобы можно было при просмотре отчета сразу увидеть что и когда делал тест. Найти решение этого вопроса в интернете не смог, пришлось придумывать самому. Далее я напишу свое решение, возможно кто-то тоже пытался так сделать и не мог. Если у вас есть решение лучше - буду благодарен, если подробно его распишите. Мое решение рабочее, но на мой взгляд - слишком "Топорное" или "Тупое".

  1. У меня есть общий тестовый класс, в котором есть метод:
  @BeforeMethod
  public void logTestStart(Method m){
    logger.info("Запущен тест: " + m.getName());
  }

В целом стандартная история, но в дальнейшем станет ясно, почему я делаю на этом акцент

  1. Я использую logback-classic для логирования. Вывод в два отдельный файла и еще в STDOUT. Один из файлов - упрощенный, сделан специально для Allure, чтобы там было только Время и Шаги, ничего лишнего. Файл для Allure перезаписывается, при перезапуске тестов.

  2. Предыстория закончилась, теперь о главном. Создал метод

  public void addAllureLog()  {
    String fileName = "Путь к лог файлу для Allure";
    String content = null;
    try {
      content = Files.lines(Paths.get(fileName)).reduce("",(a, b) -> a + "\n" + b);
    } catch (IOException e) {
      e.printStackTrace();
    }
    String[] split = content.split("Запущен тест: ");
    int i = split.length - 1;
    String s = split[i];
    Allure.getLifecycle().updateTestCase((t) -> {
      t.setStatusDetails( t.getStatusDetails().setMessage(s));
    });
  }

Который запускаю в конце каждого теста. Пришлось поместить вызов метода именно в тело теста, как как если его поместить в @BeforeMethod, то Allure не понимает к какому тесту надо прикреплять сообщение. (Если кто-то знает как это можно решить - буду очень благодарен за подробное объяснение.) Этот метод можно написать более коротко, но я не стал. В нем происходить следующее...

  • Находит файл с логом, который я специально делал для Allure
  • Приводит его к нужному мне виду, чтобы он был не в 1 строчку, а каждая строчка с новой строки
  • Далее я файл делю на части, где за основу беру сообщение "Запущен тест: ". Как мы помним - у меня перед каждым тестом оно есть
  • Из полученного массива беру самый последний по индексу элемент, так как в конце - тест, который выполняется на текущий момент
  • Последним пунктом прикрепляю этот элемент к отчету.

Собственно вот и все, таким образом в overview отображается все, что мне нужно. И еще, этот вариант работает только для успешных тестов. Если тест упал, то в overview пишется лог падения. Итог

Если кто-то:

  • знает способ лучше/удобнее, буду очень благодарен, если поделитесь. Особенно если кто-то знает, как созданный метод запихнуть в @BefoerMethod, а не запускать в теле теста.
  • знает как сделать это не доставая данные из файла, а как-то получить поток логов, который был в тесте и именно их прикрепить а Allure.

буду рад, если подскажите как это сделать.

П.С. Я еще аналогичную историю сделал для прикрепления лог файла, на случай падения тестов. Переопределил метод onTestFailure и через Allure.addAttachment прикрепляю файл в случая падения. Для создания файла использую метод похожий на addAllureLog(), который показан выше. Таким образом при падении теста в Allure прикрепляется не весь лог, а только часть относящаяся к плохому тесту.


Ответы (0 шт):