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

Фотография

Name Mapping in TestComplete


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

#1 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 23 сентября 2008 - 17:34

Недавно начал писать автотесты на TC 6.40, возникли следующие вопросы:
1. Как name mapping влияет на быстродействие TC?
Плюсы маппинга уже нашел: сокращение пути(имени) до необходимого контрола. Появляется возможность "автозавершения" имени, которое в данный момент набираешь. Правда при этом появляется, не понятно с чем связанная, задержка при открытии возможных вариантов окончания надписи (при этого замапплено около 30 объектов)
в связи с этим второй вопрос:
2. Как ускорить открытие списка?
Если объектов будет много больше насколько увеличится время открытия этого списка и если увеличится сколько максимум объектов может быть маппировано в 1 файле?
3. Как изменяется скорость запуска скриптов без и с использованием mapping'a?
4. Какие могут быть "подводные камни"?
5. В тестируемой программе куча справочников, которые зачастую в названии отличаются только названием главного окна, все остальные элементы внутри называются также, как можно присвоить какой-нибудь переменной только вторую часть названия, например:
frmDepartment = MDI.WinFormsObject("frmDepartment").WinFormsObject("ctrlSimpleDictionary");  
 frmDepartment.WinFormsObject("pnlBottom").WinFormsObject("pnlButtons").WinFormsObject("btnNew").ClickButton();
Зачастую отличие только в первой строке кода.
Если переменной присвоить:
pnlButtons = WinFormsObject("pnlBottom").WinFormsObject("pnlButtons");
TC будет писать в лог ошибку, что необходимый объект не найден.
6. Можно ли решить эту проблему при помощи name mapping? Можно ли через программу скопировать предыдущие замапленные объекты, встваить ниже, поменяв название формы?
7. Если то что написано в (6) нельзя, то как быть, если автоматизацией занимаются несколько человек в отделе, за какое-то время они добавят свой проект маппинг на разные объекты, как потом эти объекты смёрджить в один файл? Или этого лучше не делать?

PS Проект .Net WinForms.
Заранее спасибо за ответы.
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#2 Dmitry N

Dmitry N

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

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 24 сентября 2008 - 03:43

Здравствуйте.

1. - 3.

Действительно, небольшое падение производительности заметно. В переписке со службой поддержки мне сказали, что скорость работы Name Mapping постараются улучшить в будущем.

Вообще, для ускорения работы лучше всего помогает отключение ненужных плагинов (особенно тех, что 'Controls Support' и 'Open Applications Support').

4. Какие могут быть "подводные камни"?

Возможно, придётся использовать метод RefreshMappingInfo для обновления дерева Name Mapping, если приложение динамическое и объекты создаются и уничтожаются в рантайме.

5. В тестируемой программе куча справочников, которые зачастую в названии отличаются только названием главного окна, все остальные элементы внутри называются также, как можно присвоить какой-нибудь переменной только вторую часть названия, например:

"Из воздуха" вторую часть взять не получится. Однако есть возможность заммапировать родительский объект по имени указав не строковое значение, а переменную проекта (Project Variable). Меняя значение переменной вы будете менять объект, на который ссылается соответствующий mapped объект из дерева Name Mapping. Правда, это получится только если родительские объекты находятся на одном уровне.

6. Можно ли решить эту проблему при помощи name mapping? Можно ли через программу скопировать предыдущие замапленные объекты, встваить ниже, поменяв название формы?

Насколько я знаю, скопировать/вставить часть дерева Name Mapping нельзя.

7. Если то что написано в (6) нельзя, то как быть, если автоматизацией занимаются несколько человек в отделе, за какое-то время они добавят свой проект маппинг на разные объекты, как потом эти объекты смёрджить в один файл? Или этого лучше не делать?

Лучше всего держать файл Name Mapping в системе контроля версий с блокированием доступа к файлу, если с ним уже работает один разработчик. Мержевать файл Name Mapping'а нельзя.
  • 0
С уважением,
Дмитрий

#3 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 24 сентября 2008 - 11:09

Спасибо, Дмитрий!
В принципе можно создать новый Project Suite и в нем сделать новые Name Mapping
А после какого количества mapped объектов желательно создавать новый Project Suite?

ЗЫ Вчера возникла следующая проблема: при создании Aliases не нажал на Skip на одном из объектов, в результате в Aliases образовался лишний объект. Для его удаления пришлось править ручками править файл nameMapping. Можно ли другим способом "пропустить" mapped объект в Aliases?
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#4 Dmitry N

Dmitry N

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

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 25 сентября 2008 - 04:01

Здравствуйте.

В принципе можно создать новый Project Suite и в нем сделать новые Name Mapping
А после какого количества mapped объектов желательно создавать новый Project Suite?

Думаю, что скорость работы Name Mapping'а не зависит от количества заммапированных объектов. Скорее всего, замедление даёт сам факт поиска объекта по произвольному набору свойств.

ЗЫ Вчера возникла следующая проблема: при создании Aliases не нажал на Skip на одном из объектов, в результате в Aliases образовался лишний объект. Для его удаления пришлось править ручками править файл nameMapping. Можно ли другим способом "пропустить" mapped объект в Aliases?

Можно было перетащить ветку дерева на уровень вверх, а ненужный промежуточный объект (который теперь не имеет дочерних объектов) просто удалить из дерева Aliases.
  • 0
С уважением,
Дмитрий

#5 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 25 сентября 2008 - 04:52

Думаю, что скорость работы Name Mapping'а не зависит от количества заммапированных объектов. Скорее всего, замедление даёт сам факт поиска объекта по произвольному набору свойств.


После отлючения плагинов все стало работать в разы быстрее, спасибо.

Можно было перетащить ветку дерева на уровень вверх, а ненужный промежуточный объект (который теперь не имеет дочерних объектов) просто удалить из дерева Aliases.


А! Теперь получилось, сначала не туда пробовал перетаскивать :good:
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#6 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 03 октября 2008 - 10:17

Возникли еще некоторые непонятки с NameMapping...
Итак, в старом проекте объект определялся так:
WinFormsObject("SimpleDictionaryNameDescrEditControl").WinFormsObject("pnlEdit").WinFormsObject("txtboxName")
После создания нового проекта этот же объект стал определяться так:
WinFormsObject("SimpleDictionaryNameDescrEditControl", "").WinFormsObject("Panel", "", 1).WinFormsObject("TextBox", "", 2)

Соотвественно и в ObjectBrowser дерево объектов выглядит иначе. С чем это может быть связано? Какая настройка за это отвечает?
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#7 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 03 октября 2008 - 10:45

Попробуйте в свойствах нового проекта включить опцию "Use native object names for TestComplete object names" (это в категории Open Applications).
  • 0

#8 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 03 октября 2008 - 10:55

Помогло, спасибо
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#9 Dimon

Dimon

    Активный участник

  • Members
  • PipPip
  • 110 сообщений
  • ФИО:Dimon Makhno
  • Город:Украина, Харьков


Отправлено 04 декабря 2008 - 10:30

Коллеги, пишу в эту тему, т.к. она по ходу посвещена массе проблем с Name Mapping.

Столкнулся с такой проблемой, что файл NameMapping.tcnm, в какой-то момент групповой работы, достиг 70 Mb, производительность TestComplete, при таком файле значительно упала, количество требуемой памяти для работы очень сильно возрасло. :(

Заглянув в файл обнаружил, что есть элементы, на подобие следующих:
<Node name="{1a3abdd9-f080-456d-811d-3b84479a279f}">
  <Node name="children">
	<Node name="{732e6a0b-b785-40ca-91a2-69acb15b06b3}">
	  <Node name="children"/>
	  <Node name="invoke info">
		<Node name="fields">
		  <Node name="item0">
			<Prp name="name" type="S" value="BufferPinkRect"/>
		  </Node>
		  <Node name="item1">
			<Prp name="name" type="S" value="cachedLayoutEventArgs"/>
		  </Node>
		  <Node name="item10">
			<Prp name="name" type="S" value="defaultFontHandleWrapper"/>
		  </Node>
		  <Node name="item100">
			<Prp name="name" type="S" value="imageIndex_2"/>
		  </Node>
		  <Node name="item101">
			<Prp name="name" type="S" value="imageList_2"/>
		  </Node>
. . .
И таких <Node name="item*">, более 1200 элементов. Такое повторяется не в одном Узле.
Не подскажите ли:
- зачем эти элементы,
- как можно их диагностировать, их в UI TestComplete-a,
- как не допускать их,
- и в идеале можно ил их удалить.

Также в связи с тем, что Name Mapping напрямую не используется, а используются только построенные по нему Aliases.
Можно ли вычистить:
- Все Mapped Object, не использованные в Aliases.
- Все Mapped Objects и соответственно Aliases, не использованные в Проекте.
Это связано с тем, что как вариант планируется сократить использование Aliases, а как при этом уменьшить NameMapping, остается не ясным.

Любые советы, идеи приветсвуются! :rtfm:

P.S. Эта тема достойна быть "прикрепленной".
  • 0
Граммотность - то качество, которым я не обладаю.

#10 Dmitry N

Dmitry N

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

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 05 декабря 2008 - 14:54

Здравствуйте.

Вам надо отключить опцию 'Store CodeCompletion Information'. Это опция заставляет Name Mapping сохранять список свойств всех объектов для того чтобы они (свойства) показывались в Code Completion при редактировании скриптов. Оключение опции файл не почистит, удалить эти данные можно с помощью скрипта, который постили в этой теме на ТС ньюсах.
  • 0
С уважением,
Дмитрий

#11 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 06 декабря 2008 - 21:05

Спасибо! Недавно тоже возникла схожая проблема и задавались тем же вопросом. Попробуем сделать это в понедельник
Сейчас файл маппинга превышает 50 мегабайт, при этом замапплено только около 30 % объектов системы. Производительность ТС пока не упала, но проект открывается несколько минут.
ЗЫ производительность ТС очень сильно зависит от мощностей компа, например, у меня Pentium D + Vista работать с маппингом ооочень сложно, жду пока админы обновят комп. Есть компы Core2Duo 3Гц + 2 гига оперативы, автокомплит осуществляют влет (при текущем размере файла маппинга)
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#12 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 10 декабря 2008 - 06:21

Здравствуйте.

Вам надо отключить опцию 'Store CodeCompletion Information'. Это опция заставляет Name Mapping сохранять список свойств всех объектов для того чтобы они (свойства) показывались в Code Completion при редактировании скриптов. Оключение опции файл не почистит, удалить эти данные можно с помощью скрипта, который постили в этой теме на ТС ньюсах.


Спасибо!!! теперь файл маппинга занимает все 2 Мб до прогона скрипта было почти 70 :)
  • 0
Если ничего не помогает, прочтите наконец инструкцию!


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

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