Человекопонятные отчёты

Preview:

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=ru

Citation preview

Selenium Camp 2012

Deep Shift

Labs25 февраля, 2012

Киев, Украина

Человекопонятные отчёты

Дмитрий Якубовский

Java, PHP + тестировщик

bear@deepshiftlabs.com@deep_bear

Deep ShiftLabs

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

Вопросы

bear@deepshiftlabs.com (не стесняйтесь!)

http://deepshiftlabs.com/reports(пример отчётов online)