Allure steps annotation on any assertion

Всем привет.

Есть потребность отображать асерты, как степы в allure. Покрутив и повертев я понял, что на все ассерт либы (testng, assertj, etc) прикрутить это дело можно заэкстендившись полностью переопределить методы (в которых всеравно взывать super().foo).

Кажется, что без модификации исходного класса даже кастомные адаптеры не спасут. А в рантайме через рефлексию проставлять аннотации это вообще… я сам себя за такое побью.

Мне эти решения ой как не нравятся.

Пробовал ли кто-либо делать подобное?

Я делал враппер, как альтернатива могу посоветовать глянуть в сторону AspectJ. С помощью него можно без рефлексии и аннотаций внедрится в поток выполнения и выполнить код до/после вызова метода ассерта

2 лайка

Да, но только на C#: AllureLifecycle.Instance.Verify class · Noksa/Allure.NUnit Wiki · GitHub

2 лайка

@Noksa, я правильно понимаю, что это расширение стандартного перехватчика ошибок в аллюре? Т.е. он отобразит как шаги только упавшие шаги и проверки, но не покажет успешные? Я почему-то подумал, что @myTalala хотел все проверки в отчёт выводить. И ещё вопрос по решению (смотрю с телефона не очень удобно), как там мульти ошибки формируются? Разве тест не падает при первой же? И вопрос про классы ошибок, если допустим в самом тесте ошибка и происходит обычный exception, то с ними что будет происходить?

Это перепаянный целиком аллюр на шарпе, с добавлением в удобном виде отсутствующего функционала (заполнение блока Environment, удобные категории итд)

  1. Все проверки попадут в отчет - и зеленые, и красные. В красных так же будут отдельно прописаны шагом все исключения, если таковые имели место быть, а так же доп. инфа, которую можно добавить через тюнинг методы (например скриншот в шаге в момент ошибки).
  2. Мульти ошибки - это как раз использование класса Verify, если в ходе проверки будет непредвиденная ошибка или проверка просто не пройдет, то шаг проверки будет красным и будет иметь подшаг с текстом исключения. Если требуется чтобы тест упал, если проверка не прошла, надо использовать метод RunStep
  3. Если в тесте просто будет ошибка, то тест будет красным, а так же будет информация об исключении.
1 лайк

Согласен - аспектами проще всего.
Экстендить только для отчетов - так себе идея имхо

Прошу прощения, что пропал. Да, как верно заметил @Mihail_Bratuhin в отчет писать даже успешную проверку. Сьют даже при хард ассертах будет проходить до конца.

Пойду покурю AspectJ. Если игра будет стоить свеч - запилю решение.