Перейти к содержимому

Фотография

Логирование "мягких" проверок. TestNG


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 16 февраля 2012 - 11:43

Ноги темы растут отсюда, только теперь необходима реализация понятного логирования для мягких проверок. Т.е. Необходимо из сообщения об ошибке понимать откуда эта проверка вызывалась.
оказалось что проблема с verify не проще :crazy:


Имеем следующую реализацию "мягкой" проверки:
public static void assertTrue(boolean condition, String message) throws Exception {
 try {
   Assert.assertTrue(condition, message);
 } catch (AssertionError ae) {
    throw new Exception(" \n" + ae.getMessage());
 }
}
//**Мягкая проверка*/
public static void verifyTrue(boolean condition, String message) throws Exception{
 try {
  assertTrue(condition,message);
 } catch (Throwable e) {
     addVerificationFailure(e); //Добавление стектрейса в пул ошибок, дабы в конце теста вывелись все.
 }
}

Имеем следующий код вызова проверки:
private void checkFieid1()throws Exception{
try{
...
commonFunc(...);
...
}catch(Exception e)
throw new Exception("Тестирование поля 1 не пройдено\n" + e.getMessage, e)
}

private void checkFieid2()throws Exception{
try{
...
commonFunc(...);
...
}catch(Exception e)
throw new Exception("Тестирование поля 2 не пройдено\n" + e.getMessage, e)
}

private void commonFunc(...)throws Exception{
try{
...
verifyTrue(...,message);
...
}catch(Exception e)
throw new Exception("message for common func", e)
}
@Test
public void createDocTest() throws Excetion{
try{
...
checkField1();
checkField2();
...
}catch(Exception e)
throw new Exception("Тест на создание документа не пройден", e) 
}

Так как экшепн ловится в функции verifyTrue, логируется и там же и затухает: проброса выше не существует.
Получаем следущий стектрейс:

java.lang.Exception: expected:<true> but was:<false>
at ru.testing.TestBase.assertTrue(TestBase.java:37)
at ru.testing.TestBase.verifyTrue(TestBase.java:99)
at ru.testing.CreateDocTest.commonFunc(CreateDocTest.java:54)
at ru.testing.CreateDocTest.checkFieid1(CreateDocTest.java:88)
at ru.testing.CreateDocTest.createDocTest(CreateDocTest.java:173)


Но! Нам необходимо вывести сообщение:

Тест на создание документа не пройден
Тестирование поля 1 не пройдено
message for common func
Какое-то сообщение передавамое в verify
expected:<true> but was:<false>


Какие видятся варианты решения проблемы:
1. Создать свой exception: все проверки verify засунуть в try{..}catch(MyException m){...}
В catch добавлять дополнительное сообщение. Возмоно что-то более хитрое используя свой exception.
2. В функцию добавить новый передаваемый параметр Message, в которые добавлять текст, обозначающий из какого метода функция была вызвана.
private void checkFieid1()throws Exception{
...
commonFunc(...,"Ощуствляется проверка поля field1");
}
private void commonFunc(parentMessage)throws Exception{
..
String message = parentMessage + "\nПроверка не пройдена\n"
verifyTrue(.., message);
}
3. Т.к. все сообщения уже содержатся в блоке сatch соотвествующего метода, создать файл содержащий все сообщения. В throws new Exception(будет строковая константа для конкретного метода)
Но остается проблема - как быстро узнать родительский метод для конкатенации итоговой строки...

В общем, я что-то совсем запутался. Какой бы метод вывода сообщения выбрали вы? Или есть какой-то более простой метод выхода из описанной ситуации?
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#2 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 16 февраля 2012 - 12:09

смотрели как тут реализован листенер?
http://seleniumexamp...ions-in-testng/
  • 0

#3 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 16 февраля 2012 - 12:17

смотрели как тут реализован листенер?
http://seleniumexamp...ions-in-testng/


Отсюда и взято. Только проапгрейдил assert методы, что бы более понятный стектрейс выдавался. Вопрос теперь в verify....
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#4 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 16 февраля 2012 - 14:00

сложно как-то все у вас получается, только ради того чтоб в консоли это написать...
  • 0

#5 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 16 февраля 2012 - 14:43

Да я знаю :(
Мне вполне достаточно стек-трейса, для того, чтобы понять где упало и что упало.

Но начальство поставило задачу: нужно чтобы мог запускать тесты человек который ни бум бум в программировании.... При этом он мог понять какой тест-кейс упал и на каком шаге. Тогда он может перепройти вручную тот же тест-кейс и описать багу либо подправить тест-кейс, если это не бага.
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#6 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 16 февраля 2012 - 16:04

Да я знаю :(
Мне вполне достаточно стек-трейса, для того, чтобы понять где упало и что упало.

Но начальство поставило задачу: нужно чтобы мог запускать тесты человек который ни бум бум в программировании.... При этом он мог понять какой тест-кейс упал и на каком шаге. Тогда он может перепройти вручную тот же тест-кейс и описать багу либо подправить тест-кейс, если это не бага.


Оно понятно то, мы для этой задачи генерируем html отчет, где все по шагам и со скришотами расписано как делается и отображено где падает.
  • 0

#7 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 17 февраля 2012 - 10:26


Да я знаю :(
Мне вполне достаточно стек-трейса, для того, чтобы понять где упало и что упало.

Но начальство поставило задачу: нужно чтобы мог запускать тесты человек который ни бум бум в программировании.... При этом он мог понять какой тест-кейс упал и на каком шаге. Тогда он может перепройти вручную тот же тест-кейс и описать багу либо подправить тест-кейс, если это не бага.


Оно понятно то, мы для этой задачи генерируем html отчет, где все по шагам и со скришотами расписано как делается и отображено где падает.


Я сейчас тоже убираю избыточное логирование, делаю как в документе - по шагам. Со скриншотом пробовал - не получилось пока... есть подозрение что запуск под хадсоном и потому скриншот снимать не с чего... хотя может просто кривые руки)
  • 0
Если ничего не помогает, прочтите наконец инструкцию!


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных