HP Quick Test Professional: недокументированная возможность для написании тестовых сценариев, позволяющая использовать jQuery и гибкие приёмы jscript
Ожидает приглашения
Стояла задача исследовать применимость QTP для функционального тестирования и профилирования работы клиентской части web-приложения на IE, в основе разработки которого использовался jQuery.
С субъективной точки зрения, главными недостатками QTP-автоматизации явились некорректная работа рекордера при автоматическом формировании тест-скрипта и недостаточно гибкий набор свойств и методов, используемых в кодировании тест-скрипта, (после ощущений от использования мощностей jQuery в разработанном web-приложении).
В результате экспериментов с кодом тест-скрипта, (использовался QTP debugger), удалось выяснить, что существует недокументированное свойство script объекта Object, позволяющее работать с фреймворком jQuery и вытекающими отсюда возможностями при ручном программировании сценария теста. Это положительно поменяло мою точку зрения на эффективность использования QTP применительно к нашему проекту.
В ниже приведённом примере иллюстрируется применение найденной фичи script, также приёмы инициализации событий и профилирования в IE интерфейсе приложения процессов по их обработке (временные измерения автоматически регистрируются в отчёте после прогона теста):
01 Browser(«Browser»).Page(«Page»).Sync
02 Browser(«Browser»).Navigate «host:port/path»
03 Set scr = Browser(«Browser»).Page(«Главная страница»).Object.script
04 scr.jQuery(«input#ISearch_input»).val(«1111»)
05
06 Rem профилируем поиск/отображение списка документов по заданному атрибуту
07 Services.StartTransaction «searchList»
08 scr.jQuery(«div#Search_btn a:first»).click
09 Do
10 Rem cycle
11 Loop While scr.jQuery(«li:contains(Указ от 27.08.2007 N 1111)»).length = 0
12 Services.EndTransaction «searchList»
13
14 Rem профилируем открытие текста документа
15 Services.StartTransaction «openDoc»
16 scr.eval(«jQuery('li:contains(Указ от 27.08.2007 N 1111)')[0].fireEvent('onmousedown', document.createEventObject())»)
17 Do
18 Rem cycle
19 Loop While scr.jQuery(«div#section_Document:display p:contains(О Дне работника культуры)»).length = 0
20 Services.EndTransaction «openDoc»
21
22 scr.jQuery(«li#Back a:first»).click
23 scr.jQuery(«li#Home a:first»).click
24 Browser(«Browser»).Page(«Page»).Sync
25 Browser(«Browser»).CloseAllTabs
В стр.03 получен недокументированный объект script. В итоге с помощью него получаем доступ к фреймворку jQuery для работы с контролами интерфейса, реализации событийного сценария…
В стр.16 иллюстрируется приём для «связывания» события с контролом и его генерации посредством вызова eval.
В стр.6-12, 15-20 иллюстрируется приём профилирования процессов интерфейса, в результирующем отчёте получим (приводится фрагмент):
Transaction «searchList» started. Done 12.11.2009 — 12:57:25
Transaction «searchList» ended with «Pass» status (Total Duration: 1.4798 sec). Done 12.11.2009 — 12:57:26
Таким образом приведённый пример показывает, насколько расширяется спектр возможностей в разработке авто-тестов на QTP c использованием свойства объекта script, а также возрастает эффективность ручного программирования тестовых сценариев коллегами-автоматизаторами.
С субъективной точки зрения, главными недостатками QTP-автоматизации явились некорректная работа рекордера при автоматическом формировании тест-скрипта и недостаточно гибкий набор свойств и методов, используемых в кодировании тест-скрипта, (после ощущений от использования мощностей jQuery в разработанном web-приложении).
В результате экспериментов с кодом тест-скрипта, (использовался QTP debugger), удалось выяснить, что существует недокументированное свойство script объекта Object, позволяющее работать с фреймворком jQuery и вытекающими отсюда возможностями при ручном программировании сценария теста. Это положительно поменяло мою точку зрения на эффективность использования QTP применительно к нашему проекту.
В ниже приведённом примере иллюстрируется применение найденной фичи script, также приёмы инициализации событий и профилирования в IE интерфейсе приложения процессов по их обработке (временные измерения автоматически регистрируются в отчёте после прогона теста):
01 Browser(«Browser»).Page(«Page»).Sync
02 Browser(«Browser»).Navigate «host:port/path»
03 Set scr = Browser(«Browser»).Page(«Главная страница»).Object.script
04 scr.jQuery(«input#ISearch_input»).val(«1111»)
05
06 Rem профилируем поиск/отображение списка документов по заданному атрибуту
07 Services.StartTransaction «searchList»
08 scr.jQuery(«div#Search_btn a:first»).click
09 Do
10 Rem cycle
11 Loop While scr.jQuery(«li:contains(Указ от 27.08.2007 N 1111)»).length = 0
12 Services.EndTransaction «searchList»
13
14 Rem профилируем открытие текста документа
15 Services.StartTransaction «openDoc»
16 scr.eval(«jQuery('li:contains(Указ от 27.08.2007 N 1111)')[0].fireEvent('onmousedown', document.createEventObject())»)
17 Do
18 Rem cycle
19 Loop While scr.jQuery(«div#section_Document:display p:contains(О Дне работника культуры)»).length = 0
20 Services.EndTransaction «openDoc»
21
22 scr.jQuery(«li#Back a:first»).click
23 scr.jQuery(«li#Home a:first»).click
24 Browser(«Browser»).Page(«Page»).Sync
25 Browser(«Browser»).CloseAllTabs
В стр.03 получен недокументированный объект script. В итоге с помощью него получаем доступ к фреймворку jQuery для работы с контролами интерфейса, реализации событийного сценария…
В стр.16 иллюстрируется приём для «связывания» события с контролом и его генерации посредством вызова eval.
В стр.6-12, 15-20 иллюстрируется приём профилирования процессов интерфейса, в результирующем отчёте получим (приводится фрагмент):
Transaction «searchList» started. Done 12.11.2009 — 12:57:25
Transaction «searchList» ended with «Pass» status (Total Duration: 1.4798 sec). Done 12.11.2009 — 12:57:26
Таким образом приведённый пример показывает, насколько расширяется спектр возможностей в разработке авто-тестов на QTP c использованием свойства объекта script, а также возрастает эффективность ручного программирования тестовых сценариев коллегами-автоматизаторами.