Добавление лога в Allure (allure add text to overview)
Java+Selenium+TestNG+Allure. Проблема следующая, я очень хотел выводить шаги тестирования в Allure, в overview, и именно текстом, а не прикреплять файл с логом. Чтобы можно было при просмотре отчета сразу увидеть что и когда делал тест. Найти решение этого вопроса в интернете не смог, пришлось придумывать самому. Далее я напишу свое решение, возможно кто-то тоже пытался так сделать и не мог. Если у вас есть решение лучше - буду благодарен, если подробно его распишите. Мое решение рабочее, но на мой взгляд - слишком "Топорное" или "Тупое".
- У меня есть общий тестовый класс, в котором есть метод:
@BeforeMethod
public void logTestStart(Method m){
logger.info("Запущен тест: " + m.getName());
}
В целом стандартная история, но в дальнейшем станет ясно, почему я делаю на этом акцент
Я использую logback-classic для логирования. Вывод в два отдельный файла и еще в STDOUT. Один из файлов - упрощенный, сделан специально для Allure, чтобы там было только Время и Шаги, ничего лишнего. Файл для Allure перезаписывается, при перезапуске тестов.
Предыстория закончилась, теперь о главном. Создал метод
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 прикрепляется не весь лог, а только часть относящаяся к плохому тесту.