Человекопонятные отчёты
DESCRIPTION
Доклад на конференции Selenium Camp 2012. http://seleniumcamp.com/program/#quick-reliable-tests Видео: http://video.yandex.ru/users/xpinjection/view/119/#hq Текст: http://www.deepshiftlabs.com/sel_blog/?p=1930&lang=ruTRANSCRIPT
![Page 1: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/1.jpg)
Selenium Camp 2012
Deep Shift
Labs25 февраля, 2012
Киев, Украина
Человекопонятные отчёты
![Page 3: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/3.jpg)
http://www.flickr.com/photos/telemax/3210586934/
Удобные отчёты
![Page 4: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/4.jpg)
разработчик тестировщик
менеджер
клиент
Для кого отчёты?
![Page 5: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/5.jpg)
1
http://www.flickr.com/photos/franco_coluzzi/4106012682
Отчёты для разных людей
![Page 6: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/6.jpg)
--открыть страницуdriver.open(MY_URL);
--заполнить поляdriver.type(LOGIN_LOCATOR, LOGIN);driver.type(PASSW_LOCATOR, PASSW);
--нажать кнопкуdriver.click(SUBMIT_LOCATOR);
--есть ‘logout’?assert(driver.isElementPresent(LOUT_LOCATOR);
Действия
![Page 7: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/7.jpg)
Повторение ошибки
повторение действий
=
![Page 8: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/8.jpg)
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()
Объединение действий
![Page 9: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/9.jpg)
our.click()
driver.isElementPresent()
driver.click()
Дробление действий
![Page 10: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/10.jpg)
http://www.flickr.com/photos/baggis/3576064503
Иерархия действий2
![Page 11: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/11.jpg)
3
/http://www.flickr.com/photos/28481088@N00/1032365178
Скриншоты до и после ошибки
![Page 12: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/12.jpg)
assert()
TestNG log4j
FATAL OK TRACE DEBUG
FATAL
INFO
WARN
ERROR
log()
assert() vs log()
![Page 13: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/13.jpg)
*******
User name:
Password:
Remember me
Submit
Форма логина
![Page 14: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/14.jpg)
no label: WARN
no checkbox: ERROR
not logged in: FATAL
Уровни ошибок
![Page 15: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/15.jpg)
http://www.flickr.com/photos/edwin11/500787776
Беспокоить только по FATAL
![Page 16: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/16.jpg)
4
http://www.flickr.com/photos/go_greener_oz/3046225225
Различать уровни ошибок
![Page 17: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/17.jpg)
fatal:90 - FATAL Comparing position of [2A0733] with position of [2A0733]
fatal:90 - FATAL clearQuestionList.getQuestionDatabaseIdByTitle normal end 5-4
log4j, FATAL
![Page 18: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/18.jpg)
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
![Page 19: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/19.jpg)
5
http://www.flickr.com/photos/matins/3169353956/
Подробный, но легкочитаемый
![Page 20: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/20.jpg)
5
4
3
2
Разные виды отчётов1
Иерархия действий
Скриншоты до и после ошибки
Уровни ошибок
Подробный, но легкочитаемый
![Page 21: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/21.jpg)
Решение проблем
http://www.flickr.com/photos/rwangsa/452128709/
![Page 22: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/22.jpg)
Наш отчёт
![Page 23: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/23.jpg)
Наш отчёт
Списоктестов
Фильтр уровней, иерархии
Собственно события (со всеми
деталями и иерархией)
![Page 24: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/24.jpg)
![Page 25: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/25.jpg)
![Page 26: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/26.jpg)
![Page 27: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/27.jpg)
![Page 28: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/28.jpg)
![Page 29: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/29.jpg)
Разные виды отчётов
промежуточный формат (xml, csv, DB)
1
встроенный генератор
Собранные данные
внешний генератор
отчётпросмотрщик
![Page 30: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/30.jpg)
Класс Event
Имя
Статус
Исключение
СкриншотЛокатор
Результат
ВремяID
![Page 31: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/31.jpg)
Использование событий
{ event1 = new Event(“Login”) ;
----- тест логина -----
event1.closeOK(); }
![Page 32: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/32.jpg)
Группировка действий
{ event1 = new Event(“Login”) ;
----- тест логина
event1.closeOK(); }
event(“open”);
event(“type”);
event(“type”);
event(“click”);
event(“check Link”);
2
![Page 33: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/33.jpg)
Максимально подробный отчёт
Каждое действие Selenium = Event
3
Обёртка для каждого метода драйвера
![Page 34: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/34.jpg)
Обёртка
event = new Event (“isTextPresent”, text);If (driver. isTextPresent(text)) {
event.closeOK(“true”); return true;}event.closeOk(“false”);return false;
try
![Page 35: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/35.jpg)
Скриншоты до и после
Страницу изменяют:
4
select()selectWindow()waitForCondition()open()click()
waitForPageToLoad()waitForFrameToLoad()typeText()focus()click()doubleClick()
![Page 36: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/36.jpg)
Действие click()
lastScrFilename
new Event(“click”);
event.close();
getScreenshot();
isElementPresent();
click();
![Page 37: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/37.jpg)
Разные виды отчётов
HTML + CSS + Javascript !
5
http://www.flickr.com/photos/tambako/5690573629
![Page 38: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/38.jpg)
Недостатки
• Нужно следить за закрытием событий
• Дополнительный код
• Избыточные скриншоты
• Сложность внедрения
![Page 39: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/39.jpg)
Преимущества
• Удобен для всех
• Иерархия
• Скриншоты до и после
• Фильтрация по уровням
• Подробности/в общем
![Page 40: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/40.jpg)
Планы
• Скриншоты
• Подсветка
• Перемотка
• Агрегация
![Page 41: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/41.jpg)
![Page 42: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/42.jpg)
![Page 43: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/43.jpg)
![Page 44: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/44.jpg)
a(){}
b(){}
Selenium Hub
Selenium RC
Selenium RC
Selenium RC
Selenium RC
a(){}
a(){}
b(){}
b(){}Selenium Hub
Nerrvana
… …
![Page 45: Человекопонятные отчёты](https://reader036.vdocuments.us/reader036/viewer/2022062418/5563a5dbd8b42a01658b5479/html5/thumbnails/45.jpg)
Агрегация отчётов
Тесты на нескольких браузерах параллельно
Отчёты:
- Кроссбраузерность ошибки
- Скриншоты side-by-side
- Timings side-by-side