Allure 2 - атачменти сохрянаються в allure-results но не крепяться в репорту. Иногда работает, иногда нет

Проблема (Вопрос) заключается …
Очень странное поведение при собирании репорта.
В папку з результатами атачменти видни, правильного формата, файли откриваються, итд. После команди mvn allure:report иногда они атачаться к репорту, иногда нет.
Сами атачменти генеряться в testng лисенере, которий добавлен в surefire-plugin-е

Сам allure-testng добавлен в parent проекте для 3 мавеновских модулей, которие как депенденси добавлени в проект с тестами.

Я попытался сделать …
Поменять версии плагина, testng, aspectj, пробовал атачить через Allure.addAttachment(…), @Attachment аннотацию

Я залогал баг в гите Allure 2:

и прикрепил .zip с папкой репорта allure-results которая сгенерилась, - если ету папку натравить на mvn allure:report - атачменти не видни в репорте просто напросто.

Сам я с таким не сталкивался, но чисто теоретически такое может происходить, если ваш screenshot taking event выполняется после stop test case Allure event. Т.е. на момент снятия скрина для Allure вы уже находитесь out of test scope.

И root cause тут скорее всего связан с тем, что TestNG не гарантирует порядок выполнения слушателей. Т.е. если алюровский слушатель выполняется раньше вашего, то результаты финализируются до непосредственного снятия скриншота.

Чисто технически, перенос события снятия скриншота из onTestFailure в afterInvocation должен помочь, ибо afterInvocation выполняется раньше. А финализация теста как раз таки происходит в переопределенных алюровских onTest[Status].

Лично я всю жизнь снимаю скрины в afterInvocation. И таких проблем не замечал. Пробуйте.

2 лайка

по хоже на ету проблему.
по хоже что InvoketionListener проблему решил… но хотелось б понять, если атачмент есть в allure-results но после allure:report команди не крепиться в репорт , то проблема в том что он “фигово” попал таки в allure-results из-за проблеми с listener-ом ?

Атачмент не “фигово” попал в репорт, а вообще не попал туда. Уже ответил в issue.

Вкратце, если заглянуть в ваши json results, там нет attachment нодов в принципе, что говорит о том, что результаты были сохранены раньше, чем вы сняли скриншот.

Вы можете посмотреть на реализацию Allure TestNG слушателя. Там test closure активности происходят в onTestFailure и подобных методах. Т.е. если ваш слушатель сработал после аллюровского, результаты сохранились без ссылок на скриншоты.

П.С. Мейвен плагин, впрочем, как и другие, не отвечает за логику сбора данных. Он лишь генерит репорт из указанной папки. И если в этой папке с результатами нет ссылок на скриншоты, естественно вы их нигде в итоге не увидите.

UPDATE:

Вот так выглядит результат с атачментами:

  "steps": [
    {
      "name": "Type username = Sergey",
      "status": "passed",
      "stage": "finished",
      "start": 1503241354266,
      "stop": 1503241354286,
      "attachments": [
        {
          "name": "test",
          "source": "9690d1ac-a7b8-4adf-908d-82e8f0bd1693-attachment.txt",
          "type": "text/plain"
        }
      ],
      "parameters": [
        {
          "name": "username",
          "value": "Sergey"
        }
      ]
    }

ну типа “фигово” я как раз наверное и имел в виду что оно сгенерило файли но не линкануло их никуда в aggregation json-е