Перейти к содержимому

Фотография

DataTable - что внутри?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 gralex

gralex

    Новый участник

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Груба Алексей

Отправлено 06 августа 2009 - 14:37

Всем привет!

Вопрос для знатоков QTP - недавно подзадумался над тем, что являет собой DataTable?

Мое определение, которое сложилось на протяжении довольного длительного общения с QTP: это файл Default.xls, находящийся в папке скрипта (само содержимое DataTable) + какой-то модуль QTP, использующий COM-объект excel. В пользу этого говорят следующие факты:
1) само использование файла Default.xls :)
2) ограничения на количество столбцов, аналогичное ограничению в Excel (255 столбцов)
3) использование формул и автоформатирования (весьма неприятного надо сказать)
4) сильно уж DataTable на excel похож

Но оказалось, что есть и отличия:
1) ограничения на использования символов в названиях action (qtp) и листов (excel) (что в принципе равнозначно, поскольку при именовании action с таким же именем создается и sheet в DataTable):
excel - : / \ ? * [ ]
qtp - : / \ ? * < > | % ' ! { }
2) ограничения на длину названия листа:
excel - максимум 31 символ
qtp - ограничений на длину названия action (соответственно и sheet) нет (по крайней мере action с названием в 300 символов нормально сохраняется). И на удивление даже Default.xls открывается с листом, именем длиной в 300 символов.
3) основное отличие - для работы QTP не обязательно наличие установленного Excel! Разработанные скрипты нормально запускались на машине без установленного Excel. В принципе после изучения System Requirements для установки QTP, в котором ни слова не сказано об Excel, это меня перестало удивлять :)

Есть, конечно, вариант, что QTP использует какую-ту dll для эмуляции функций Excel в его отсутствие, но простой поиск по папке с установленным QTP ничего не дал.

Так чем же все-таки обеспечивается механизм DataTable? что у него внутри?
Ваши варианты... :)
  • 0

#2 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 07 августа 2009 - 14:01

Всем привет!

Вопрос для знатоков QTP - недавно подзадумался над тем, что являет собой DataTable?
Есть, конечно, вариант, что QTP использует какую-ту dll для эмуляции функций Excel в его отсутствие, но простой поиск по папке с установленным QTP ничего не дал.

Так чем же все-таки обеспечивается механизм DataTable? что у него внутри?
Ваши варианты... :)

Добрый день, gralex. Спасибо за интересный вопрос и проведенное исследование. Меня эта тема тоже давно занимает. Поделюсь своими вчерашними и сегодняшними изысканиями, порожденными Вашим вопросом, и предыдущим опытом.

Что внутри у механизма, который обеспечивает функциональность работы DataTable, я думаю, является коммерческой тайной фирмы HP, и даже программисты, которые его разработали вряд ли смогут ответить на этот вопрос по соображениям секретности и неразглашения информации :). А вот на первый вопрос, мне кажется, я знаю ответ. Механизм обеспечивается библиотекой dtable2.ocx, которая устнавливается вместе с QTP в папку bin. Данная библиотека запускается вместе с QTP, а также при просмотре логов утилитой QTReport.exe. Анализ строк этой библиотеки через Process Explorer показывает, что она содержит все команды контекстного меню, доступного на DataTable, + все методы, которые доступны из самого QTP для работы с DataTable.
Также в процессе исследований обнаружил следующие интересные факты:
1. При создании нового теста в QTP во временных директориях не создается никаких файлов, соответствующих по размеру или формату файлу Default.xls, который создается в папке с тестом при сохранении этого теста
2. Default.xls используется только при открытии существовавшего ранее теста. При этом файл открывается исключительно на чтение. (То, что этот файл открыт в Excel'e никоим образом не мешает QTP открыть тест, к которому относится Default.xls. И это при известной маниакальной любви QTP к монопольному доступу к файлам). После открытия теста можно любым образом изменять Default.xls, и это никоим образом не отразится ни на отображаемой в QTP DataTable, ни на данных, которые тест использует в процессе выполнения.
2a. Отсутствие файла Default.xls в папке с тестом не мешает QTP открыть, редактировать и выполнять этот тест. Однако, не обнаружив указанный файл при открытии теста, QTP честно выдает сообщение об этом со статусом Error.
2b. При закрытии теста, который был открыт из папки без файла Default.xls, если в тесте не было никаких изменений, этот файл в папке теста не создается.
3. При выполнении теста в папке с логом изначально не создается никакого файла, соответствующего run-time dataTable. Также не создается и временных файлов. Это позволяет сделать вывод, что все изменения, которые происходят с DataTable во время выполнения теста, QTP хранит внутри себя и никуда не сохраняет до окончания теста или вызова Export-методов для листов DataTable или всей DataTable целиком.
4. Файл default.xls в папке с логом создается только по окончании теста, и туда сохраняется только конечное состояние DataTable.

Таким образом, я пришел к выводу, что единственное, что связывает DataTable и Excel, — это формат данных, в котором по умолчанию хранится DataTable. Т.е. QTP умеет читать и сохранять данные из/в формат MS Excel (так же, как и некоторые другие приложения, OpenOffice, например). Вся остальная функциональность DataTable реализована внутри меркуревых библиотек.
Механизм работы DataTable QTP cледующий:
При открытии теста QTP загружает данные из Default.xls (или любого другого эксельного файла, который указан в настройках теста) в свой внутренний объект и далее работает исключительно с внутренним представлением этих данных.
В случае любых изменений в тесте при его сохранении содержимое Default.xls перезаписывается текущим содержимым DataTable (т.е. данные из внутреннего представления преобразуются в xls-формат).
В случае отсутствия изменений в тесте Default.xls вообще не изменяется, а при отсутствии этого файла в папке теста, он не создается.
При запуске теста QTP сохраняет у себя внутри копию тех данных, которая у него есть во внутреннем представлении DataTable (и эти данные могут не иметь ничего общего с теми, которые хранятся в Default.xls, если мы изменили Default.xls через третье приложение после открытия теста в QTP. Но это ровно те данные, которые отображаются в интерфейсе QTP на вкладке DataTable). После этого любые изменения данных в DataTable через пользовательский интерфейс программы никак не затрагивают данные, используемые в уже стартовавшем прогоне. Равно как и изменения внутренней копии (которая называется Run-time dataTable), которые происходят во время теста никак не затрагивают первоначальную DataTable (ее еще иногда называют Design dataTable)
После выполнения теста в папке с логом всегда сохраняется последнее представление run-time dataTable (т.е. данные в DataTable на момет завершения теста) в формате .xls. Эти данные отображаются в логе, и их оттуда можно копировать и экспортировать.


Ограничения, схожие с экселем, как раз вытекают из того, что QTP сохраняет данные в .xls-формат и это должен быть валидный xls, чтобы его можно было открыть в экселе и редактировать отдельно от QTP.

У меня изначально была идея, что QTP использует DDT для работы с Excel, но поскольку QTP не только читает, но и сохраняет данные в xls-формат, то скорее всего данное предположение неверно.

Кстати, у меня есть несколько вопросов касательно Ваших опытов:

qtp - ограничений на длину названия action (соответственно и sheet) нет (по крайней мере action с названием в 300 символов нормально сохраняется). И на удивление даже Default.xls открывается с листом, именем длиной в 300 символов.

Имеется ввиду, что Default.xls с листами, имеющими длинные имена, нормально открывается в Excel?

3) использование формул и автоформатирования (весьма неприятного надо сказать)

Не проводили исследование, какие формулы из тех, которые есть в Excel, поддерживаются QTP? Насколько я знаю, точно не поддерживаются вложенные формулы (читал в документации, сам не проверял). Также вроде бы по документации не поддерживаются формулы со ссылками на другие листы, но на тренинге некоторым слушателям такой фокус удавался (правда, мы не проверяли, насколько корректно потом эти данные используются при выполнении теста).
  • 0

#3 gralex

gralex

    Новый участник

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Груба Алексей

Отправлено 07 августа 2009 - 16:01

ch_ip,
Спасибо за столь детальный разбор - многое из написанного чувствовалось на основании опыта, но многого и не знал, и не задумывался.

Имеется ввиду, что Default.xls с листами, имеющими длинные имена, нормально открывается в Excel?


Да, именно это.

3) использование формул и автоформатирования (весьма неприятного надо сказать)

Не проводили исследование, какие формулы из тех, которые есть в Excel, поддерживаются QTP? Насколько я знаю, точно не поддерживаются вложенные формулы (читал в документации, сам не проверял). Также вроде бы по документации не поддерживаются формулы со ссылками на другие листы, но на тренинге некоторым слушателям такой фокус удавался (правда, мы не проверяли, насколько корректно потом эти данные используются при выполнении теста).


Нет, особой необходимости в формулах не испытывал.
Относительно формул и форматирования я бы предпочел, чтобы эти возможности можно было как-то отключить, особенно раздражает автоформатирование - например, вводишь значение 11111111111, а умный DataTable представляет его как "1,111111111E+010" - просто таки рассадник разных проблем %)
Можно, конечно, использовать средства форматирования excel (одинарная кавычка перед или заключать в формулу ="11111111111"), но зачем создавать мне проблемы на ровном месте? Кстати, использование средств экранирования значения из Excel - еще одна иллюстрация связки Excel & DataTable :)
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных