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

Фотография

Медленно работает скрипт


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

#1 jovik2000

jovik2000

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 23 июня 2010 - 08:44

Доброго времени суток.
Коллеги, подмогните разобраться с такой проблемкой с QTP.

Есть достаточно большая таблица (550 строк, 17 столбцов).
Хочу вывести в DataTable содержимое каждой ячейки определенного столбца.
Изначально пробовал конструкцию вида:
...
rn=1
For i = 2 To oWebTable.RowCount
	DataTable.SetCurrentRow(rn)
	DataTable.Value("A")=oWebTable.GetCellData(i,1)
	rn=rn+1
Next
работает ну ооооочень медленно..

Далее, насочинял функцию:

Public Function getCellVal(byRef table, byRef col)

	set oTable = table.Object
	rn=1
	col = col-1

	For i=1 to table.rowcount-1
		set curCell=oTable.rows(i).cells(col)
		DataTable.SetCurrentRow(rn)
		
		DataTable.Value("A")=curCell.innertext
		
		rn=rn+1
		Next

End Function

Время обработки столбца таблицы (545 строк) ~ 5 минут.

Вопрос - возможно сделать быстрее или это нормальное время для QTP?
  • 0

#2 jovik2000

jovik2000

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 23 июня 2010 - 13:29

Если чуть подправить исходную функцию:

Public Function getCellVal(byRef table, byRef col)

	set oTable = table.Object
	rn=1
	col = col-1

	For i=1 to table.rowcount-1

		DataTable.SetCurrentRow(rn)
		DataTable.Value("A")=oTable.rows(i).cells(col).innertext
		
		rn=rn+1
	Next

End Function

Время обработки столбца таблицы сокращается с 360 секунд до 280.. однако, ИМХО, все равно "не АЙС" :(
Вопрос актуален..

Спасибо!
  • 0

#3 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 23 июня 2010 - 14:34

Добрый день!

В данном случае все тормоза связаны исключительно с использованием DataTable.

Я бы посоветовал загнать все данные напрямую в какой-нибудь Excel файл, а потом (если очень надо чтобы все было в DataTable) сделать импорт этого файла в свой DataTable.

Это должно быть значительно быстрее.
  • 0

#4 ch_ip

ch_ip

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

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


Отправлено 25 июня 2010 - 09:46

Проблема тормозов после перехода на работу с таблицей через DOM-Объект действительно в тормознутости родных QTP-шных объектов (в данном случае - DataTable).
Но меня интересует, зачем Вам вообще понадобилось сохранять всю веб-таблицу в DataTable - что Вы дальше собираетесь делать?
Будьте аккуратны с использованием SetCurrentRow. Это очень опасный метод, особенно, если вы используете родные QTP-шные итерации и у вас есть сценарии, которые вызываются из других сценариев.
Когда Вы прогоняете тест с несколькими итерациями, то QTP внутри себя имеет счетчик активного ряда той итерации, которая сейчас выполняется. А вызов SetCurrentRow перемещает указатель этого счетчика в произвольное место. Т.е. внутри цикла происходит изменение счетчика цикла. Это может приводить к совершенно непредсказуемым последствиям (например, бесконечному циклу или выходом указателя за рамки цикла)
  • 0


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

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