Человекопонятные отчёты
-
Upload
bearoff -
Category
Technology
-
view
1.108 -
download
0
description
Transcript of Человекопонятные отчёты
Selenium Camp 2012
Deep Shift
Labs25 февраля, 2012
Киев, Украина
Человекопонятные отчёты
http://www.flickr.com/photos/telemax/3210586934/
Удобные отчёты
разработчик тестировщик
менеджер
клиент
Для кого отчёты?
1
http://www.flickr.com/photos/franco_coluzzi/4106012682
Отчёты для разных людей
--открыть страницуdriver.open(MY_URL);
--заполнить поляdriver.type(LOGIN_LOCATOR, LOGIN);driver.type(PASSW_LOCATOR, PASSW);
--нажать кнопкуdriver.click(SUBMIT_LOCATOR);
--есть ‘logout’?assert(driver.isElementPresent(LOUT_LOCATOR);
Действия
Повторение ошибки
повторение действий
=
driver.open(MY_URL);
driver.type(LOGIN_LOCATOR, ‘admin’);
driver.type(PASSW_LOCATOR, PASSW);
driver.click(SUBMIT_LOCATOR);
assert(driver.isElementPresent(LOUT_LOCATOR);
---- выполнение теста
driver.click(LOGOUT_LOCATOR);
‘user’
);
‘moderator’);
login()
Объединение действий
our.click()
driver.isElementPresent()
driver.click()
Дробление действий
http://www.flickr.com/photos/baggis/3576064503
Иерархия действий2
3
/http://www.flickr.com/photos/28481088@N00/1032365178
Скриншоты до и после ошибки
assert()
TestNG log4j
FATAL OK TRACE DEBUG
FATAL
INFO
WARN
ERROR
log()
assert() vs log()
*******
User name:
Password:
Remember me
Submit
Форма логина
no label: WARN
no checkbox: ERROR
not logged in: FATAL
Уровни ошибок
http://www.flickr.com/photos/edwin11/500787776
Беспокоить только по FATAL
4
http://www.flickr.com/photos/go_greener_oz/3046225225
Различать уровни ошибок
fatal:90 - FATAL Comparing position of [2A0733] with position of [2A0733]
fatal:90 - FATAL clearQuestionList.getQuestionDatabaseIdByTitle normal end 5-4
log4j, FATAL
fatal:90 - FATAL clearQuestionList.getQuestionDatabaseIdByTitle start 5-3debug:94 - DEBUG EVENT (STARTED): Delete question [button ID=del_quest_3890], target: Filter-Sort-Formdebug:94 - DEBUG EVENT (STARTED): clickWithConfirmation, target: del_quest_3890debug:94 - DEBUG EVENT (STARTED): isElementPresent, target: del_quest_3890info:78 - INFO (ID = 580) EVENT (OK): isElementPresent, target: del_quest_3890 Values: Actual: true; Screenshots: screen_170446632_010212.png (before) screen_170446632_010212.png (after)debug:94 - DEBUG EVENT (STARTED): getScreenshot, target: screen_170448116_010212.pnginfo:78 - INFO (ID = 581) EVENT (OK): getScreenshot, target: screen_170448116_010212.png Screenshots: screen_170448116_010212.png (after)info:78 - INFO (ID = 579) EVENT (OK): clickWithConfirmation, target: del_quest_3890Screenshots: screen_170446632_010212.png (before) screen_170448116_010212.png (after)debug:94 - DEBUG EVENT (STARTED): waitForCondition, target: (typeof(selenium.browserbot.getCurrentWindow().jQuery) != 'undefined' && selenium.browserbot.getCurrentWindow().jQuery.active == 0)debug:94 - DEBUG EVENT (STARTED): getScreenshot, target: screen_170448536_010212.pnginfo:78 - INFO (ID = 583) EVENT (OK): getScreenshot, target: screen_170448536_010212.png Screenshots: screen_170448536_010212.png (after)info:78 - INFO (ID = 582) EVENT (OK): waitForCondition, target: (typeof(selenium.browserbot.getCurrentWindow().jQuery) != 'undefined' && selenium.browserbot.getCurrentWindow().jQuery.active == 0)Screenshots: screen_170448116_010212.png (before) screen_170448536_010212.png (after)debug:94 - DEBUG EVENT (STARTED): isAlertPresent, target: alertinfo:78 - INFO (ID = 584) EVENT (OK): isAlertPresent, target: alertValues: Actual: false; Screenshots: screen_170448536_010212.png (before) screen_170448536_010212.png (after)info:78 - INFO (ID = 578) EVENT (OK): Delete question [button ID=del_quest_3890], target: Filter-Sort-FormScreenshots: screen_170446632_010212.png (before) screen_170448536_010212.png (after)fatal:90 - FATAL clearQuestionList.getQuestionDatabaseIdByTitle normal end 5-4debug:94 - DEBUG EVENT (STARTED): getAttribute, target: //*/a[contains(text(),'[[T]]2A0733-')]@hrefinfo:78 - INFO (ID = 585) EVENT (OK): getAttribute, target: //*/a[contains(text(),'[[T]]2A0733-')]@hrefValues: Actual: question.php?q_id=3892;
log4j, TRACE
5
http://www.flickr.com/photos/matins/3169353956/
Подробный, но легкочитаемый
5
4
3
2
Разные виды отчётов1
Иерархия действий
Скриншоты до и после ошибки
Уровни ошибок
Подробный, но легкочитаемый
Решение проблем
http://www.flickr.com/photos/rwangsa/452128709/
Наш отчёт
Наш отчёт
Списоктестов
Фильтр уровней, иерархии
Собственно события (со всеми
деталями и иерархией)
Разные виды отчётов
промежуточный формат (xml, csv, DB)
1
встроенный генератор
Собранные данные
внешний генератор
отчётпросмотрщик
Класс Event
Имя
Статус
Исключение
СкриншотЛокатор
Результат
ВремяID
Использование событий
{ event1 = new Event(“Login”) ;
----- тест логина -----
event1.closeOK(); }
Группировка действий
{ event1 = new Event(“Login”) ;
----- тест логина
event1.closeOK(); }
event(“open”);
event(“type”);
event(“type”);
event(“click”);
event(“check Link”);
2
Максимально подробный отчёт
Каждое действие Selenium = Event
3
Обёртка для каждого метода драйвера
Обёртка
event = new Event (“isTextPresent”, text);If (driver. isTextPresent(text)) {
event.closeOK(“true”); return true;}event.closeOk(“false”);return false;
try
Скриншоты до и после
Страницу изменяют:
4
select()selectWindow()waitForCondition()open()click()
waitForPageToLoad()waitForFrameToLoad()typeText()focus()click()doubleClick()
Действие click()
lastScrFilename
new Event(“click”);
event.close();
getScreenshot();
isElementPresent();
click();
Разные виды отчётов
HTML + CSS + Javascript !
5
http://www.flickr.com/photos/tambako/5690573629
Недостатки
• Нужно следить за закрытием событий
• Дополнительный код
• Избыточные скриншоты
• Сложность внедрения
Преимущества
• Удобен для всех
• Иерархия
• Скриншоты до и после
• Фильтрация по уровням
• Подробности/в общем
Планы
• Скриншоты
• Подсветка
• Перемотка
• Агрегация
a(){}
b(){}
Selenium Hub
Selenium RC
Selenium RC
Selenium RC
Selenium RC
a(){}
a(){}
b(){}
b(){}Selenium Hub
Nerrvana
… …
Агрегация отчётов
Тесты на нескольких браузерах параллельно
Отчёты:
- Кроссбраузерность ошибки
- Скриншоты side-by-side
- Timings side-by-side