assertEquals()
#1
Отправлено 12 июня 2008 - 19:40
Недавно познакомился с селениум рц, но возник вопрос с методом assertEquals(), который в случае несоответствия объектов, прерывает тест, генерируя при этом исключительную ситуацию. А есть ли какой-то метод, который бы не прерывал выполнение теста, а переходил к выполнению следующей команды? запихивать каждый асерт в try-catch не хочется. Может есть варианты другие?
#2
Отправлено 13 июня 2008 - 06:20
2) при запуске юнит тестов из анта поиграться параметрами таска Junit (failonerror,haltonfailure) (если конечно вы пишете в Java, для остальных языков тоже есть что то подобное)
3)Попробовать использовать альтернативные способы запуска тестов (в Java например TestNG позволяет обработать подобное)
#3
Отправлено 13 июня 2008 - 06:53
А есть ли какой-то метод, который бы не прерывал выполнение теста, а переходил к выполнению следующей команды? запихивать каждый асерт в try-catch не хочется. Может есть варианты другие?
В дополнение к сказанному the_norn:
Совсем не обязательно оборачивать каждый ассерт в попытайся/поймай, можно использовать verifyXYQ() методы из SeleneseTestCase, самостоятельно переопределить нужный ассерт, либо написать собственный верифай вроде такого (для Джавы):
public void verifyEquals (String message,Object o1, Object o2){ try{ assertEquals(message, o1,o2); } catch(AssertionError e){ logVerificationError("4to-to informativnoe"); countVerificationErrors++; } }
В конце теста отслеживать значение countVerificationErrors и т.д., это уже как Вам удобно.
#4
Отправлено 12 ноября 2008 - 11:46
Совсем не обязательно оборачивать каждый ассерт в попытайся/поймай, можно использовать verifyXYQ() методы из SeleneseTestCase, самостоятельно переопределить нужный ассерт, либо написать собственный верифай вроде такого (для Джавы):
В конце теста отслеживать значение countVerificationErrors и т.д., это уже как Вам удобно.
А напишите поподробнее, что это за методы verifyXYQ()? Пример такого метода и как его вызывать в коде?
Пробую использовать IDE-подобные verifyVisible итп - компилятор их не видит. Класс myTest наследую от SeleneseTestCase.
#5
Отправлено 12 ноября 2008 - 12:04
Я использую класс отнаследованный от DefaultSelenium и собственно тесты не наследую от SeleneseTestCase (так уж исторически сложилось ;) ). В "моём" селениуме есть методы вроде :Совсем не обязательно оборачивать каждый ассерт в попытайся/поймай, можно использовать verifyXYQ() методы из SeleneseTestCase, самостоятельно переопределить нужный ассерт, либо написать собственный верифай вроде такого (для Джавы):
В конце теста отслеживать значение countVerificationErrors и т.д., это уже как Вам удобно.
А напишите поподробнее, что это за методы verifyXYQ()? Пример такого метода и как его вызывать в коде?
Пробую использовать IDE-подобные verifyVisible итп - компилятор их не видит. Класс myTest наследую от SeleneseTestCase.
public void verifyTrue (String message, boolean exp){ try{ assertTrue(exp); } catch(AssertionError e){ logVerificationError("Verification error, expression is not true." + "\n Location is: "+ super.getLocation() + "\n Err. message: "+e.getMessage() + "\n Details: "+e.toString() + "\n Comment: " +message); captureScreenshot(LoggingUtils.timeStampForFileName() + " VerificationError_Expression is not true_" + AuxiliaryMethods.getOnlyAlphaNumeric(message)); } }
вызов в тесте:
... selenium.verifyTrue(expression); ...
В SeleneseTestCase они заявляли наличие публичных методов из серии verifyTrue(), соответственно если Вы наследуете от SeleneseTestCase, то вызов в тесте
простым написанием имени метода
verifyTrue(expression);
#6
Отправлено 12 ноября 2008 - 13:43
В SeleneseTestCase они заявляли наличие публичных методов из серии verifyTrue(), соответственно если Вы наследуете от SeleneseTestCase, то вызов в тесте
простым написанием имени метода
verifyTrue(expression);
Да, вот такой код компилируется:
verifyTrue(browser.isElementPresent("LoginTextBox"));
Однако он всегда проходит успешно, даже когда должна показаться ошибка, например для verifyTrue(browser.isElementPresent("LoginTextBoxsfgsdgfdgdfgdfg"));
Или я что-то неправильно делаю?
#7
Отправлено 12 ноября 2008 - 16:35
Всё правильно, но:Или я что-то неправильно делаю?
Так что смотри в tearDown'е. Кстати, в JUnit tearDown не запустится если setUp выкинул исключение, это надо учитывать.This class adds a number of "verify" commands, which are like "assert" commands,
* but they don't stop the test when they fail. Instead, verification errors are all
* thrown at once during tearDown.
#8
Отправлено 13 ноября 2008 - 14:51
Так что смотри в tearDown'е. Кстати, в JUnit tearDown не запустится если setUp выкинул исключение, это надо учитывать.This class adds a number of "verify" commands, which are like "assert" commands,
* but they don't stop the test when they fail. Instead, verification errors are all
* thrown at once during tearDown.
Вот такой вот tearDown:
public void tearDown() {
browser.stop();
}
Нужно что-то добавить в него, чтобы после прохождения теста видеть, в каких местах были ошибки?
#9
Отправлено 13 ноября 2008 - 20:56
Конечно, не хватает вызова super.tearDown() в самом начале.[кусь]
Нужно что-то добавить в него, чтобы после прохождения теста видеть, в каких местах были ошибки?
А вообще я бы не стал пользоваться этим SeleneseTestCase, очень уж он древний (по коду). Наследуется от TestCase (так было в стародавние времена JUnit 3) да и вообще в нём мало чего полезного, так, для начала можно попользовать, но если смотреть в будущее и закладываться на правильную и удобную для себя архитектуру, то от него лучше отказаться.
#10
Отправлено 19 ноября 2008 - 10:12
Конечно, не хватает вызова super.tearDown() в самом начале.
Извините за глупый вопрос, но где именно "в самом начале"?
Вообще tearDown вызывается и так после теста.
#11
Отправлено 19 ноября 2008 - 10:17
Извините за глупый вопрос, но где именно "в самом начале"?
Вообще tearDown вызывается и так после теста.
В самом начале переопределённого метода tearDown. Т.е. примерно вот так должно быть:
public void tearDown() { super.tearDown(); browser.stop(); }Правда если родительский метод может выкинуть исключение (надо посмотреть), то надо заворачивать в try/catch.
#12
Отправлено 19 ноября 2008 - 12:27
public void tearDown() {
try {super.tearDown();}
catch (Exception e){}
finally {
browser.stop();}
}
Но возникает еще один вопрос:
Описанный выше вариант отлавливает ошибки verify(). Но если при этом не был найден какой-либо компонент формы, то обычный в таком случае "Element not found" не выдается.
Можно ли после прохождения теста просматиривать ВСЕ исключения, которые были сгенерированы?
#13
Отправлено 19 ноября 2008 - 12:36
Это как? Element not found проявляется в виде исключения, которое выкидывает драйвер, а соответственно тест должен протолкнуть его дальше либо не обрабатывать, в этом случае он не может не выдаваться.Но если при этом не был найден какой-либо компонент формы, то обычный в таком случае "Element not found" не выдается.
Можно посмотреть пример кода когда такое происходит?
#14
Отправлено 19 ноября 2008 - 13:39
Вариант 1: Запускаю тест с ложным verify()
verifyTrue(browser.isElementPresent("LoginTextBoxjhgjhg"));
Результат: эксепшкн ловится и вываливается в конце теста в tearDown. Все хорошо.
Вариант 2: Запускаю тест, в котором есть обращение к несуществующему компоненту:
browser.type("LoginTextBoxkjhkjh","testnadja");
Результат: эксепшен валится сразу, тест прерывается. Сообщение Element not found. Тоже все понятно.
Вариант 3: В одном тесте оба варианта
verifyTrue(browser.isElementPresent("LoginTextBoxjhgjhg"));
browser.type("LoginTextBoxkjhkjh","testnadja");
Результат: как в варианте 1, то есть не показано сообщение о том, что элемент LoginTextBoxkjhkjh не найден.
Не скажу что это сильно неудобно, но все-таки хотелось бы наблюдать все исключения сразу))
#15
Отправлено 19 ноября 2008 - 14:26
Может, я бестлоково выразилась, но суть такая:
Вариант 1: Запускаю тест с ложным verify()
verifyTrue(browser.isElementPresent("LoginTextBoxjhgjhg"));
Результат: эксепшкн ловится и вываливается в конце теста в tearDown. Все хорошо.
Вариант 2: Запускаю тест, в котором есть обращение к несуществующему компоненту:
browser.type("LoginTextBoxkjhkjh","testnadja");
Результат: эксепшен валится сразу, тест прерывается. Сообщение Element not found. Тоже все понятно.
Вариант 3: В одном тесте оба варианта
verifyTrue(browser.isElementPresent("LoginTextBoxjhgjhg"));
browser.type("LoginTextBoxkjhkjh","testnadja");
Результат: как в варианте 1, то есть не показано сообщение о том, что элемент LoginTextBoxkjhkjh не найден.
Не скажу что это сильно неудобно, но все-таки хотелось бы наблюдать все исключения сразу))
Наследуйтесь от selenium, оборачивайте все click/type в try/catch с журналированием всех исключений в один общий буфер и в tearDown() скидывайте его в файл. Потом - читайте, изучайте. У нас сделано почти так, плюс используется http://loggingseleni....net/index.html ,
снимает картинки автоматом, отчёт в хтмл-е выдаёт, милая штука в общем.
#16
Отправлено 19 ноября 2008 - 14:35
Согласен, это более правильный путь чем тащить за собой SeleneseTestCase.Наследуйтесь от selenium, оборачивайте все click/type в try/catch с журналированием всех исключений в один общий буфер и в tearDown() скидывайте его в файл. Потом - читайте, изучайте. У нас сделано почти так, плюс используется http://loggingseleni....net/index.html ,
снимает картинки автоматом, отчёт в хтмл-е выдаёт, милая штука в общем.
А по поводу последнего вопроса - открываешь исходник SeleneseTestCase и смотришь, там всё просто.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных