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

Публикации Rumata

65 публикаций создано Rumata (учитываются публикации только с 27 июня 2023)



#48537 по строковому имени процесса сделать действие

Отправлено автор: Rumata 06 ноября 2007 - 12:03 в SmartBear (AutomatedQA) - Functional Testing

delphiscript
tc 5.12
tc ругается на неизвестное имя click
подскажите пжл как можно сделать то что я хочу


т.е. вы пытаетесь из строк сделать объекты?
это, конечно, возможно, но не так, как вы пытаетесь сделать (через VariantArray)

если я правильно понял, задача звучит так: есть текстовый файл, в котором хранятся имена объектов, по которым надо кликать. Хранятся в текстовом виде.

Вам проще сделать так: считать содержимое файла в массив, а затем для каждого элемента массива делать так
допустим, массив строк называется arr

Evaluate (arr[i] + '.Click();')
не уверен, но по-моему знак "+" в делфискрипте означает конкатенацию строк.
Основной момент здесь - это использование функции Evaluate, которая позволяет выполнить любой кусок текста, как код скрипта



ОГРОМНОЕ СПАСИБО!!!
РАБОТАЕТ!!!
правда нужно изменить на
Evaluate (arr[i] + '.Click;')



#48591 по строковому имени процесса сделать действие

Отправлено автор: Rumata 07 ноября 2007 - 02:53 в SmartBear (AutomatedQA) - Functional Testing

ОГРОМНОЕ СПАСИБО!!!
РАБОТАЕТ!!!
правда нужно изменить на

Evaluate (arr[i] + '.Click;')


да, в ДелфиСкрипте я не силен, однако. Ну, работает - и отлично


Нет, вы правильно написали, по идее у события "клик" есть параметры, а если их не указывать то можно ставить пустые скобки, но видимо сама функция "Evaluate" чего то там преобразовывает и поэтому потом ругается на эти самые скобки



#48532 по строковому имени процесса сделать действие

Отправлено автор: Rumata 06 ноября 2007 - 11:15 в SmartBear (AutomatedQA) - Functional Testing

delphiscript
tc 5.12


Привет Всем
Проблема вот в чём:

Есть файл 123.txt
в нём написаны имена процессов:
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', 'CE')
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', '7')
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', '8')
Sys.Process('calc').Window('SciCalc', 'Калькулятор').Window('Button', '9')
и так далее
теперь в скрипте я считываю имена процессов в массив(olevariant)

mass_obj := BuiltIn.CreateVariantArray(1, kk); // присваиваю массиву длину
while not eof(f) do
begin
kk := kk + 1;
readln( f, s);
mass_obj[kk] := s;
end;

потом в другой процедуре пытаюсь кликнуть
l_mass_obj := BuiltIn.CreateVariantArray(1, dl_mass); // присваиваю массиву длину
l_mass_obj := mass_obj;
tpm := l_mass_obj[l_i];
tpm.click();

tc ругается на неизвестное имя click
подскажите пжл как можно сделать то что я хочу



#47484 Работа с TreeView

Отправлено автор: Rumata 09 октября 2007 - 08:41 в SmartBear (AutomatedQA) - Functional Testing

delphiscript
TC 5.12
тестируемое приложение на Java

Подскажите как можно вытащить имя текущей ноды из TreeView.
В объектах ничего не отображается.:(
т.е. кликнул по TreeView, определил имя ноды, кликнул в другом TreeView нашел тама ноду с таким же именем.



#46447 Работа С Командной Строкой

Отправлено автор: Rumata 13 сентября 2007 - 05:33 в SmartBear (AutomatedQA) - Functional Testing

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



Можете использовать ClrBridge, чтобы сделать это через .NET. Вот так:

procedure Test;
var
  p, output;
begin
  p := dotNET.System_Diagnostics.Process.zctor();
  p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe';
  p.StartInfo.Arguments := '/c ipconfig';
  p.StartInfo.UseShellExecute := False;
  p.StartInfo.RedirectStandardOutput := True;
  p.Start;
  
  while not p.HasExited do Delay(100);
  output := p.StandardOutput.ReadToEnd();
  Log.Message(output);
end;



Чтобы этот код заработал, надо добавить ассемблю System.dll в ваш проект TestComplete'а. Для этого дважды щёлкните на имени проекта в Project Explorer, откройте страницу Properties редактора проекта и в опциях 'CLR Bridge' нажмите 'Browse GAC...'.


Спасибо большое за ответ.
Но у меня правда чего не получается:
Поставил себе .NET Framework 3.0
Сделал переконфигурацию testcomplete
потом всё так как вы написали , но он ругается что не знает такого "System_Diagnostics" до этого ругался на "dotNET", я уже внёс в список всё dll какие только были, значиться у меня её нет? как можно её найти?
Подскажите пожалуста



#46448 Работа С Командной Строкой

Отправлено автор: Rumata 13 сентября 2007 - 05:44 в SmartBear (AutomatedQA) - Functional Testing

я тут нашёл ещё...
так не пойдёт заменить ту строку??
p := dotNET.System.System_Diagnostics_Process.ctor();



#46588 Работа С Командной Строкой

Отправлено автор: Rumata 17 сентября 2007 - 04:21 в SmartBear (AutomatedQA) - Functional Testing

Dmitry N, начал пытаться реализовать вашу процедуру, так у меня при компиляции ругается на input.WriteLine('ver'); пишет что происходит несовпадение типов, а там ведь и правда не получиться так сделать.
Кстати интересный факт теперь у меня ваша строка p := dotNET.System_Diagnostics.Process.zctor();, работает, а моя(которая ещё в пятницу отрабатывала) p := dotNET.System.System_Diagnostics_Process.ctor(); не хотит :)



#46445 Работа С Командной Строкой

Отправлено автор: Rumata 13 сентября 2007 - 05:26 в SmartBear (AutomatedQA) - Functional Testing

А не проще работать с файлом после вывода?

с помощью добавления к консоли ">имяф_файла" - вывод будет направлен в файл.
Хотя скорее всего я просто не до конца вник в текст


Не проще т.к. команды пишу unuix серверу а он их не поймёт



#46618 Работа С Командной Строкой

Отправлено автор: Rumata 17 сентября 2007 - 10:46 в SmartBear (AutomatedQA) - Functional Testing

Вспомнил я ведь правда убрал "TestComplete 3 Compatibility"
Вот код процедуры всё также

procedure com;
var
p, input, output;
begin
p := dotNET.System_Diagnostics.Process.zctor();
p.StartInfo.FileName := 'C:\WINDOWS\system32\telnet.exe';
p.StartInfo.UseShellExecute := False;
p.StartInfo.RedirectStandardOutput := True;
p.StartInfo.RedirectStandardInput := True;
p.Start;
input := p.StandardInput;
output := p.StandardOutput;
input.WriteLine_11('?');
while not p.HasExited do
Delay(100);
while not output.EndOfStream do
Log.Message(output.ReadLine());

end;


окошко мелькает и исчезает, хотя cmd хотя бы на экране остаётся, поучается что запуск идёт неправильно может дело в dll System_Diagnostics ведь у нёё название содержит смысл "Диагностика" что как то с telnet -ом не вяжется???
вообщем я завяз и думаю может написать на Delphi элементарнейший клиент и из него уже таскать данные???



#46591 Работа С Командной Строкой

Отправлено автор: Rumata 17 сентября 2007 - 05:23 в SmartBear (AutomatedQA) - Functional Testing

Заменил WriteLine на WriteLine_11 нормально заработало, но возникла другая проблема: мне ведь надо работать с telnet , и если просто ручками вызываешь cmd а потом телнет то сеанс нормально работает но testcomplete видимо воспринимает телнет как другой процесс и не передаёт ему команды которые я пишу , пробовал заменять p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe'; на p.StartInfo.FileName := 'c:\Windows\System32\telnet.exe'; но тогда вообще логи пустые, мелькнёт окошко и всё
Как можно это обойти? или телнету нельзя так же команты передавать и читать как cmd ?



#46419 Работа С Командной Строкой

Отправлено автор: Rumata 12 сентября 2007 - 12:27 в SmartBear (AutomatedQA) - Functional Testing

Использую TectComplete 5.12.454.7
Тестируемая программа написана на java
язык скрипта Delphi

Тут возникла необходимость получить данные которые выводяться в командню строку, кто нить знает как это сделать???
Я пытался сделать кодом Delphi который нашел в инете:


procedure com;
var ProcInfo: TProcessInformation;
StartupInfo: TStartupInfo;
SecAtrtrs: TSecurityAttributes;
hOut: THandle;
begin
with SecAtrtrs do
begin
nLength := SizeOf(TSecurityAttributes);
lpSecurityDescriptor := nil;
bInheritHandle := true; // ВОТ ОНО !!! Наша рукоятка будет НАСЛЕДУЕМОЙ
end;

// Создаем файл в который и будем переназначать StdOut
// Например, с такими настройками, вы можете их изменить под свои нужды
hOut := CreateFile('c:\MyStdOut.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hOut = INVALID_HANDLE_VALUE) then RaiseLastWin32Error;

GetStartupInfo(StartupInfo);
with StartupInfo do
begin
wShowWindow := SW_HIDE; // не показывать окно
dwFlags := dwFlags or STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
hStdOutput := hOutDup; // присваиваем рукоятку на свой файл
end;

// для примера будем запускать [c:\program files\Borland\Delphi5\Bin]grep.exe с ключом '?'
// Вызов CreateProcess с флагом bInheritHandles = TRUE !!!
Win32Check(CreateProcess(nil, 'ipconfig /all', nil, nil, TRUE, CREATE_NEW_CONSOLE, nil, nil, StartupInfo, ProcInfo));

// ждем пока наш процесс отработает
WaitForSingleObject(ProcInfo.hProcess, INFINITE);

Win32Check(CloseHandle(ProcInfo.hProcess));

//если вы больше ничего не хотите делать с файлом, в который перенаправили StdOut, то закроем его
Win32Check(CloseHandle(hOut));
end;


но testcomplet при компиляции даёт ошибку, хотя в редакторе ошибки не идентифицируются
Если кто делал что нить подобное напишите пожалуста



#46488 Работа С Excel

Отправлено автор: Rumata 13 сентября 2007 - 12:39 в SmartBear (AutomatedQA) - Functional Testing

Вот на скорую руку сделал, может как-то так =)

Set ExcelApp = CreateObject("Excel.Application")        pathFile = "C:\..\.xls"        ExcelApp.Workbooks.Open(pathFile)        Set Ran = ExcelApp.Sheets(1).Range("F9:G12")        ReDim arr(Ran.Cells.Count)        For nRow = 1 To Ran.Rows.Count                Set Row = Ran.Rows(nRow)                For nCell = 1 To Row.Cells.Count                        arr((nRow - 1) * Row.Cells.Count + nCell - 1) = Row.Cells(nCell).value                Next        Next



я забыл сказать я на delphi

если возможно можно на этом языке

я пытался переделать приведённый код, вот что получилось

var
m : array of string;
ExcelApp, Ran : olevariant;
ExcelApp := CreateObject('Excel.Application');
pathFile := "C:\123.xls';
ExcelApp.Workbooks.Open(pathFile)
Ran := ExcelApp.Sheets(1).Range('F9 : G12');
setlength(m, Ran.Rows.Count) // присваиваю массиву длину
For nRow := 1 To Ran.Rows.Count do
begin
Row := Ran.Rows(nRow);
For nCell := 1 To Row.Cells.Count
m[nRow, nCell] := Row.Cells(nCell).value;
end;


но лезут ошибки массивы он чтоли не понимает на объявлении переменных??



#46450 Работа С Excel

Отправлено автор: Rumata 13 сентября 2007 - 06:30 в SmartBear (AutomatedQA) - Functional Testing

Подскажите как можно извлекать значения из ячеек

Например указываешь диапазон в цикле и он тупо переносит значения из Excel в массив например



#46589 Работа С Excel

Отправлено автор: Rumata 17 сентября 2007 - 04:25 в SmartBear (AutomatedQA) - Functional Testing

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

Мы используем такой код. Простой и удобный.

MSE:= Sys.OleObject('Excel.Application');
   MSE.Workbooks.Open('C:\PurchaseOrder.xls');
   Log.Message(VarToString(MSE.Cells(i,j).value)); // i и j номер строки и столбца.


Где же ты раньше был? :)



#47268 Проверка на наличие процесса

Отправлено автор: Rumata 03 октября 2007 - 09:24 в SmartBear (AutomatedQA) - Functional Testing

чегото у меня не работает и зачем нужна 1000 в ('DefaultListCellRenderer$UIResource', logName, 0, 1000); ???
не может найти объект


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



Как я понимаю, вам надо проверить существование объекта в приложении, а не процесса. Сделать это можно с помощью метода WaitSwingObject.

logName := '20070918.log.gz';
  w1 := Sys.Process('javaw').SwingObject('JDialog', 'Окно архивирования лог файла', -1).SwingObject('JRootPane', '', 0).SwingObject('null.layeredPane').SwingObject('null.contentPane').SwingObject('LogArchivePanel', '', 0).SwingObject('JPanel', '', 0).SwingObject('JScrollPane', '', 0).SwingObject('JViewport', '', 0).SwingObject('JList', '', 0).AWTObject('CellRendererPane', '', 0);
  w2 := w1.WaitSwingObject('DefaultListCellRenderer$UIResource', logName, 0, 1000);
  if w2.Exists then
	Log.Message('Log file is found')
  else
	Log.Error('Log file is not found');




#47254 Проверка на наличие процесса

Отправлено автор: Rumata 03 октября 2007 - 05:30 в SmartBear (AutomatedQA) - Functional Testing

Привет Всем!
помогите плиз вопрос возник

TestComplete 5.12.474.7
delphiscript
приложение на Java

У меня есть процесс:
Sys.Process('javaw').SwingObject('JDialog', 'Окно архивирования лог файла', -1).SwingObject('JRootPane', '', 0).SwingObject('null.layeredPane').SwingObject('null.contentPane').SwingObject('LogArchivePanel', '', 0).SwingObject('JPanel', '', 0).SwingObject('JScrollPane', '', 0).SwingObject('JViewport', '', 0).SwingObject('JList', '', 0).AWTObject('CellRendererPane', '', 0).SwingObject('DefaultListCellRenderer$UIResource', '20070918.log.gz', 0)


в конце имя лог файла 20070918.log.gz и оно меняется

мне нужно подставлять в цикле вместо этого имени значение строковой переменной и проверять наличие этого процесса
если его нет то я провожу действие в тестируемом приложении(перехожу на другую запись в списке) в результате которого меняется имя лог-файла в процесе(который реально существует) и опять проверяю наличие моего процесса ; если есть то делаю определённое действие

вопрос : как сделать проверить существование процесса в имени которого можно динамически менять параметр



#47358 Проверка на наличие процесса

Отправлено автор: Rumata 05 октября 2007 - 04:51 в SmartBear (AutomatedQA) - Functional Testing

Я сам разобрался, нужно было использовать WaitWindow вместо WaitSwingObject



#47357 Проверка на наличие процесса

Отправлено автор: Rumata 05 октября 2007 - 04:30 в SmartBear (AutomatedQA) - Functional Testing

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



Прежде всего хочу заметить, что в TestComplete замечательная справочная система. Задокументировано практически все, и при этом очень доступно и с примерами. Это к вопросу о 1000 в вызове метода WaitSwingObject.



А по поводу невозможности найти объект, в скрипте упоминается 12 объектов -- возможно не находится какой-нибудь другой объект. Запостите сюда сообщение об ошибке вместе с содержимым панели Remarks.


Сейчас невозможно показать поиск потому же объекту что я приводил в начале, поэтому я покажу аналогичный пример.
Здесь он просто переходит по ветке ELSE и выводит в лог "нет"

fff : string;
xx, xxx : olevariant;


Sys.Process('TOTALCMD').Window('TTOTAL_CMD', 'Total Commander 6.03a - ISS GmbH Heidelberg', 1).refresh;
sleep(500);
xx := Sys.Process('TOTALCMD').Window('TTOTAL_CMD', 'Total Commander 6.03a - ISS GmbH Heidelberg', 1).Window('TMyPanel', '', 2);
fff := '[_нет_] 15 122 276 КБ из 61 440 560 КБ свободно';
xxx := xx.WaitSwingObject('TMyPanel', fff, 1, 1000);
if xxx.exists then
log.message('есть')
else
log.message('нет');



Параллельно проверял кодом

if Sys.Process('TOTALCMD').Window('TTOTAL_CMD', 'Total Commander 6.03a - ISS GmbH Heidelberg', 1).Window('TMyPanel', '', 2).Window('TMyPanel', '[_нет_] 15 122 276 КБ из 61 440 560 КБ свободно', 1).exists then
log.message('есть 1')
else
log.message('нет 1');

и процесс нормально обнаруживается



#57687 Почему код работает ТАК ?

Отправлено автор: Rumata 25 июня 2008 - 05:37 в SmartBear (AutomatedQA) - Functional Testing

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

Сейчас делал импорт данных из смд, но столкнулся с проблеммой их вводить :)
так вот данные вводяться прекрасно, пока я незапускаю батник из смд, после данные вводяться как одна строка, но если ввести [Enter], то потом данные опять вводяться в поток нормально, объясните почему такое бывает.

вот процедурина
procedure Main;
   var 
   dir,f : string;
   k : integer;
   p, input, output,cmd;
   begin	
   p := dotNET.System_Diagnostics.Process.zctor();
   p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe';
   p.StartInfo.UseShellExecute := false;
   p.StartInfo.RedirectStandardOutput := True;
   p.StartInfo.RedirectStandardInput := True;
   p.Start;
   f := read_name_install_file;
   k := PosEnd(f);
   dir := copy(f,1,k-1);
   f := copy(f,k+1,length(f)-k);  
   input := p.StandardInput;
   output := p.StandardOutput;
   cmd := Sys.Process('cmd',2).Window('ConsoleWindowClass', '*');
   //cmd.Keys('[Enter]');
   input.WriteLine_11('cd '+dir);
   input.WriteLine_11(f);
   input.WriteLine_11('C:\j2sdk1.4.2_12');
   cmd.Keys('[Enter]'); //без этой строки все команды, начиная с предыдущей, 
		 //объединяються в одну и вводятся как одна
   input.WriteLine_11('C:\Sop\jboss-portal-2.6.1.GA');
   input.WriteLine_11('update');
   input.WriteLine_11('127.0.0.1');
   input.WriteLine_11('quit');
 
   while not p.HasExited do 
	 Delay(1000);
   while not output.EndOfStream do
	 Log.Message(output.ReadLine());
   //dotNET.System_Diagnostics.Process.zctor.
   end;



#57711 Почему код работает ТАК ?

Отправлено автор: Rumata 25 июня 2008 - 09:24 в SmartBear (AutomatedQA) - Functional Testing

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

А можно узнать, что такое 'read_name_install_file' и 'PosEnd'?


процедуры

read_name_install_file - возвращает полное имя файла который я запускаю в цмд

PosEnd -
последнее вхождение символа в строку


вот я переделал немного, правда теперь приходиться ентер жать после каждого ввода команды :friends:
procedure Main;
  var 
  dir,f : string;
  k : integer;
  p, input, output,cmd;
  st : boolean;
  s : string;
  ss : widestring;
  begin 
  opred_form_log;
  file_mame_rez_log := 'Install_server_rezult_log.mht';
  ResultDir := 'C:\NAT_EAR_COPY_RESULTS\';
  ArchiveDir := 'C:\artifakts\';   
  p := dotNET.System_Diagnostics.Process.zctor();
  p.StartInfo.FileName := 'c:\Windows\System32\cmd.exe';
  p.StartInfo.UseShellExecute := false;
  p.StartInfo.RedirectStandardOutput := True;
  p.StartInfo.RedirectStandardInput := True;
  p.Start;
  f := read_name_install_file;
  k := PosEnd('\',f);
  dir := copy(f,1,k-1);  // директория запускаемого батника
  f := copy(f,k+1,length(f)-k); // здесь имя батника который запускаю 
  input := p.StandardInput;
  output := p.StandardOutput;
  cmd := Sys.Process('cmd',2).Window('ConsoleWindowClass', '*'); // вторая запущеная цмд
  input.WriteLine_11('cd '+dir); // переход в директорию батника
  input.WriteLine_11(f); // запуск батника
  // теперь идут запросы батника
  input.WriteLine_11('C:\j2sdk1.4.2_12'); // ввод корня  jsd
  cmd.Keys('[Enter]');					  // эмуляция долбанного ентера
  input.WriteLine_11('C:\Sop\jboss-portal-2.6.1.GA');   // ввод корня  jboss-portal-
  cmd.Keys('[Enter]');				// эмуляция долбанного ентера
  input.WriteLine_11('update');	   // выбор сбособа установки
  cmd.Keys('[Enter]');				// эмуляция долбанного ентера
  input.WriteLine_11('127.0.0.1');	// айпи сервера
  cmd.Keys('[Enter]');				// эмуляция долбанного ентера
  input.WriteLine_11('quit');		 //выход
  st := false;
  Log.Message('3');
  while not p.HasExited do // если еще цмд открыто
	Delay(500);
  ss := '';
  Log.Message('4');
  while not output.EndOfStream do
	begin
	if not(st) then
	  if (pos('INFO  [Server] JBoss ',s)<> 0) and (pos('Started in',s)<> 0) then
		st := true;
	s := output.ReadLine();
	ss := ss+#13+s;	
	end;
  Log.Message('Лог запуска сервера', ss, pmNormal, debug_attr );   
  if st then
	Log.Message('Сервер запущен!', '', pmNormal, debug_attr )  
  else
	Log.Message('Сервер не был запущен!', '', pmNormal, error_attr ); 
  ExportResults(ResultDir + file_mame_rez_log);
  add_results_archive(file_mame_rez_log);
  if st then  
	SendEmail(e-mail, e-mail, 'Логи автоинсталлирования сервера', 'На север была успешно произведена установка обновления'+#13+'Логи во вложении', ArchiveName+'.rar')
  else
	SendEmail(e-mail, e-mail, 'Логи автоинсталлирования сервера', 'Установка обновления на север была не удалась'+#13+'Логи во вложении', ArchiveName+'.rar');
  end;



#57804 Почему код работает ТАК ?

Отправлено автор: Rumata 26 июня 2008 - 11:27 в SmartBear (AutomatedQA) - Functional Testing

вот весь уже скока мучусь, как то криво получается :(((

может кто знает, извлечь данные из цмд?

причем просто перенаправлять не получиться так как я запускаю батник(а он jar-ник) а потом уже общаюсь с ним.

сей час немного прогу переделал, добавил Delay(1000); после каждого writeline, так команды стали выполняться(интересно с какого?) но в выходной поток не все данные пишутся выводит пары десятков строчек лога и всё :(

в чём причина хз

подскажите пожалуста возможные решения



#57830 Почему код работает ТАК ?

Отправлено автор: Rumata 27 июня 2008 - 04:54 в SmartBear (AutomatedQA) - Functional Testing

Привет!

А если на потоке ввода взвести свойство AutoFlush? Поток наверняка буферизованый и то что вы в него пишете, скорее всего, какое-то время лежит в буфере.
Например:
Код output.BaseStream.SetLength(100000);

input.AutoFlush := true;

Или вручную дергать метод Flush, после каждой записи в поток.

Возможно, буфер влияет и на поток вывода. Он переполянется и все. Что если у базового потока увеличить длину.
Вот так:
output.BaseStream.SetLength(100000);


не получается

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

Я не совсем понял, а CMD.exe в конце закрывается или нет? Если нет, по попробуйте закрывать его (только корректно) перед попыткой чтения выходного потока.

По поводу необходимости нажатия Enter -- это, наверно, приложение не так отрабатывает нажатия, как CMD. Попробуйте использовать метод Write_10(MyCommand + #13).


смд закрываеться , там ведь есть команда quid
Write_10(MyCommand + #13) не работает

у мня счас немного задача изменилась, необходимый мне вывод данных теперь выводится в файл, так что я только ввожу данные а читаю результат после закрытия цмд из текстового файла.

теперь вот пытаюсь стабилизировать всё что делал...



#48941 Пожирание памяти TC

Отправлено автор: Rumata 14 ноября 2007 - 08:44 в SmartBear (AutomatedQA) - Functional Testing

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

На мой взгляд, такая проблема нуждается в исследовании под профайлером. А это могут сделать только разработчики TestComplete. Вам необходимо написать им на support@automatedqa.com и предоставить пример, воспроизводящий проблему (или просто шаги как этого добится без примера). Насколько я знаю их отношение к подобным проблемам, в следующем обновлении её пофиксят.

я переставил тесткомплит и теперь она занимает всего 20 метров памяти :-)
Теперь примерчик не представишь, правда выгружается всё равно долго, когда терпение кончаеться приходиться таск менеджером убивать
А что на support писать "Программа виснет, помогите!"? глупо по моему причину всё равно не определишь...
поэтому буду чуть мучиться... :-)



#48930 Пожирание памяти TC

Отправлено автор: Rumata 14 ноября 2007 - 03:12 в SmartBear (AutomatedQA) - Functional Testing

Люди подскажите пожайлуста почему ТС 5.12 так жрёт ресурсы
При загрузке в памяти занимает сразу же 60метров а после получаса работы 150-200 и файл подкачки раздувается до гига
ничего такого я не делаю: картинки в логи не пишу(чистил логи та же картина).
Первоначально вроде не так было, переставлять придётся что ли?


а как вы проверяете, что он столько отжирает?
вообще в ньюсгруппе было много вопросов по этой теме
то же самое касается "вылетов" и "зависаний" ТК после долгой работы

из того, что я помню по этой теме: был вопрос как и тут: почему ТК жрет столько ресурсов?
один из ответов был такой: на самом деле это проблема Windows Task Manager, и что мол если через полчаса работы, когда ТК сожрал много памяти, перестартовать Таск Менеджер, то можно увидеть, что ТК опять занимает 70-80 мегабайт.

Посоветовать могу лишь перезапускать ТК (если, конечно, вы говорите о росте используемой памяти во время запусков скриптов, а не во время их написания).

Вот несколько ответов от АКуА саппорта (можете и сами поисать в их ньюсгруппе, я искал по слову "memory")

Most probably, the high memory consumption is caused by the large number
of ODT classes and objects created during the script execution.
Have you tried clearing ODT data and classes when they are no longer
needed by the script?


The problem occurs because of the large amount of Load Testing results - all results are stored in memory until the test run is completed.
It is not possible to disable the Load Testing log.

The only solution I can propose is to split the test in parts and run them individually


Hi Support,
When I use Files.Compare function to compare two large binary files (each one is about 400Mb), I got exception "Out of memory while expanding memory stream".
=====
Thank you for reporting the issue. We will try to fix it in one of future versions of the tool (but not in the upcoming update).

In the meantime, I suggest that you use a third-party file comparing utility. You can set up such a utility in TestComplete so that it is used when the Files.Compare method is called. Please see the 'Stores Options Dialog' help topic for details.


I have tracked it down to the very long strings assigned to variables in the editor. Removing those stops the memory leak. Temporarily, I've been reading those values into a variable from a file instead. It does seem to be the long strings in the editor - see the project. Just opening it and starting to edit that code will cause it to start. Then, just open up your windows task manager and watch your swap file usage in the performance tab begin to grow


We think that the problem you faced is caused by a great number of HTML elements located on the tested web page: If their number exceeds 5000, the memory consumption you observe is normal. To check our assumption, please check the value of the page's document.all.ChildCount property in TestComplete


устал...
а там еще много...
короче, в любом случае, там слишком много факторов, которые могут влиять (тип приложения, тип тестирования, наличие/отсутствие виртуальных машин, и т.д.), так что вам надо в саппорт


Да мне в принципе не критично...
Проверял через Таск Менеджер(память жрётся во время написания скриптов)
Конечно если перестартовать TC ресурсы освобождаются, но у меня тс вырубаеться почемуто минут 5
Закрываю свой проект(file --> close), по идее должны ресурсы освободиться(чего не происходит) а затем закрываю сам TC и у меня таск менеджер показывает освобождение памяти медлено-медленно... если за пол минуты высвободиться метров 30, то это уже хорошо, машина вроде не слабая...
Впрочем это всё риторика...
Всегда памяти будет мало, а программы будут подтормаживать...



#48887 Пожирание памяти TC

Отправлено автор: Rumata 13 ноября 2007 - 12:02 в SmartBear (AutomatedQA) - Functional Testing

Люди подскажите пожайлуста почему ТС 5.12 так жрёт ресурсы
При загрузке в памяти занимает сразу же 60метров а после получаса работы 150-200 и файл подкачки раздувается до гига
ничего такого я не делаю: картинки в логи не пишу(чистил логи та же картина).
Первоначально вроде не так было, переставлять придётся что ли?