Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

вывести сообщение кастомное при неудачном тесте


(Oleg Man) #1

Здравствуйте, подскажите как вывести кастомное сообщение при неудачном прохождении теста. Что-то вроде “Тест такой упал”
проект на Java + Webdriver сборщик Maven. В качестве CI использую Jenkins

Нужно для того чтобы было понятно разработчику из майла какой тест упал и почему. Сейчас если через Jenkins тест падает то высылается маил с косоль логом.


(Александр Беликов) #2

Какой фреймворк используется для запуска тестов? JUnit? TestNG?


(Oleg Man) #3

для запуска используется TestNG


(Александр Беликов) #4

Могу сказать как используется у нас. Создается класс Listener (например, назовите как хотите). Выглядит он следующим образом:

public class Listener extends TestListenerAdapter {

@Override
public void onTestSuccess(ITestResult result) {
    System.out.printf("\033[32m%-90s PASSED\033\n", result.getTestClass().getName() + ":" + result.getMethod().getMethodName());
}

@Override
public void onTestFailure(ITestResult result) {
    System.out.printf("\033[31m%-90s FAILED  !\033\n", result.getTestClass().getName() + ":" + result.getMethod().getMethodName());
}

}
Далее, в файле testng.xml указываете его:

<listeners>
        <listener class-name="utils.Listener"/>
</listeners>

Если я конечно правильно вас понял, чего вы хотите добиться.


(sidelnikovmike) #5

Обычно, какой бы вы фреймворк не использовали, тесты падают из за того, что не прошел какой-либо заданный вами assert. Во всех фреймворках есть возможность при этом выводить сообщение какое пожелается. Это есть прямо в методе assertTrue, например. Там есть параметр, который вы проверяете и параметр-сообщение, которое будет выведено в случае не соблюдения условия.

В примере от @belikov_as88 - тоже будет результат, но правда насколько видно по коду - без причины падения. + Падение в данном случае есть любой эксепшн из метода c аннотацией @Test. А обычно интересны все же конкретные проверки


(Александр Беликов) #6

Ну тесты падают не только из-за assert-ов, а например, если какой то элемент не найден на странице или у него сменился локатор, или же при работе с ajax, мы не дождались какого-либо элемента. ТС просил подсказать, как сделать так чтобы было понятно какой тест упал. В моем примере наглядно видно, что при падении теста, выводится информация - ClassName.methodName. И да, причина падения кстати показывается.


(sidelnikovmike) #7

Причина показывается в вашем выводе листенера? там вроде как показывается имя класса и имя метода.
Если брать в целом лог - то конечно да, ошибка будет показана там.

Ваш метод просто более всеобъмелимый. Он обработает всё , что угодно.

По поводу ошибок - да, тут вы правы, бывают не только assertError’ы. Но по возможности мне кажется нужно их обрабатывать. тогда и отчет ваш будет выглядеть понятнее и красивее. Непонятный эксепшн - по моему дак в отчете ему не место. И если вы не контролируете поведение теста( в том числе и исключительные ситуации) - значит что тест можно сделать лучше. Это моё мнение.


(Oleg Man) #8

Спасибо за советы. belikov_as88 попробую реализовать ваш метод. отпишусь на след неделе тока тк переносом проекта на другой сервер буду заниматься


(Александр Беликов) #9

Согласен. Нет, у меня еще логирование включено, поэтому я получаю полный стек при падении теста