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

Фотография

Чтение лога скриптом Тест Комплита


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

#21 tom_13

tom_13

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

  • Members
  • PipPipPip
  • 206 сообщений
  • Город:Киев

Отправлено 17 июня 2008 - 08:37

А что за параметр Sender? откуда и как его взять?



Этот параметр передает собитие OnStopTest, тоесть для нормальной работы этой функции вам нужно его связать с соответсвующим Event'oм

Для этого достатоно открыть General_Events в дереве Events, выбрать в списке событие OnStopTest сделать по нему двойной клик, в окне выбрать соотвествующий юнит и связать с нужной функцией - дальше все само заработает.
  • 0

#22 vdm0

vdm0

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

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Вадим Лащевский
  • Город:Киев

Отправлено 19 июня 2008 - 12:22

А что за параметр Sender? откуда и как его взять?


Sender -- это обьект, инициировавший событие (Event), а брать самому не надо -- Event Control сам передаст обработчику нужного инициатора.
Насколько я понял причину вопроса -- имеется желание самостоятельно запустить на выполнение эту функцию. Уберите Sender из параметров и запускайте -- в данной функции он (Sender) ничего не делает, он здесь лишь по тому, что данная функция -- обработчик события.

Чтобы использовать эту функцию по назначению (отправлять лог на почту после выполнения каждого теста), нужно в проект добавить элемент Events. В одном из его дочерних элементов, например GeneralEvents (который всегда присущ по умолчанию), из дерева Available Events (в левой части) в ветке Test Engine Events выбрать OnStopTest, далее в таблице выбранных событий в колонке Event Handler (обработчик события) напротив выбранного события (OnStopTest) нажать кнопочку New и выбрать скрипт, в котором будет храниться обработчик этого события. Если Вы уже сохранили эту функцию в какой-либо скрипт Вашего проекта (вместе с параметром Sender разумеется), та выберите этот скрипт и укажите использовать эту функцию в качестве обработчика. Иначе будет создана пустая функция-обработчик, в которую можно скопировать тело этой функции.

P.S.: событие, о которой идёт речь, действительно происходит после каждого теста. Просто у меня каждый проект содержит по одному тесту, по тому я так и написал в своём предыдущем посте.
  • 0

#23 Photine

Photine

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

  • Members
  • Pip
  • 27 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 31 июля 2008 - 10:39

Столкнулась с такой проблемой - при передаче при помощи CDO файла с расширением mht получателю приходит "разобранная" версия этого файла. Язык программирования - VBScript.
Заранее спасибо за ответ.
  • 0

#24 Dmitry N

Dmitry N

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

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

Отправлено 31 июля 2008 - 11:02

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

У меня подозрение, что "разбирать" файл может Outlook при получении. Попробуйте получить другим клиентом (The Bat!, например) и посмотрите, будет ли разница.
  • 0
С уважением,
Дмитрий

#25 Photine

Photine

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

  • Members
  • Pip
  • 27 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 31 июля 2008 - 11:49

Спасибо огромное за ответ.
В BAT'е стало чуть лучше (по крайней мере, появилась возможность сохранить переданный файл), но открывается он по-прежнему как набор составляющих. Буду думать... :acute:
  • 0

#26 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 31 июля 2008 - 13:10

У меня подозрение, что "разбирать" файл может Outlook при получении...


Увы, он... у меня в своё время те же проблемы были...
  • 0

#27 Photine

Photine

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

  • Members
  • Pip
  • 27 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 31 июля 2008 - 13:17

2 AlexP:
И каким образом вы вышли из ситуации?
  • 0

#28 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

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

И каким образом вы вышли из ситуации?


Я высылал результаты автотестов всем заинтересованным сторонам (у всех Outlook разумеется) не в log.mht, а в log._mht То есть файл сразу прочитать из outlook'а было нельзя, зато хоть скопировать можно. Альтернатива - расшарить папку и в письме кидать линк на шаренный файл...
  • 0

#29 anagramma

anagramma

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

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

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

Если еще актуально -- вот скриптик который после выполнения проекта (не сьюта) на событии OnStopTest сохраняет логи в *.mht и отправляет на е-мейл.

function GeneralEvents_OnStopTest(Sender){  var File;  var schema;  var mCfg;  var mMsg;  // в эти переменные присвоить параметры почтовой рассылки  var Mail_smtpserver;   // адрес SMTP-сервера (сервер отправки почты, обычно работает через порт 25 -- smtpserverport)  // при использовании ExchangServer надо "sendusing" (см. ниже) присвоить 3, но мне не удалось реализовать отпраку через ExchangServer, по тому привожу рабочий пример с SMTP  var Mail_sendusername; // имя, отображаемое в графе "От:"  var Mail_From;         // аккаунт, из которого будет произведена отправка  var Mail_To;           // аккаунт получателя (можно список, разделённый "," -- CSV)   File = FormatDateTime("dd_mm_yyyy_hh_nn_ss_zzz", Now()) + ",mht";  Log.Message("Все тесты завершены", "Сейчас будет сформировано экспортированний журнал " + File + " и отправлено его адресатам [" + Mail_To + "]");  File = Project.ConfigPath + "Log\\" + File;  if (Log.SaveResultsAs(File, 2))  // 0 - XML+картинки, 1 - HTML+картинками; 2 - MHT (полная HTML-страничка с картинками и всем, чем положено, одним файлом)  {    schema = "http://schemas.microsoft.com/cdo/configuration/";    mCfg = Sys.OleObject("CDO.Configuration");    try    {      mCfg.Fields.Item(schema + "sendusing") = 2;      mCfg.Fields.Item(schema + "smtpserver") = Mail_smtpserver;      mCfg.Fields.Item(schema + "smtpserverport") = 25;      mCfg.Fields.Item(schema + "sendusername") = Mail_sendusername;      mCfg.Fields.Item(schema + "sendpassword") = "";      mCfg.Fields.Update();      mMsg = Sys.OleObject("CDO.Message");      try      {        mMsg.Configuration = mCfg;        mMsg.From = Mail_From;        mMsg.To = Mail_To;        mMsg.BodyPart.Charset = "koi8-r";	// можно исключить; по умолчанию ANSI, для Восточной Европы и РФ это "cp1251"        mMsg.Subject = "Журнал тестирования за " + FormatDateTime("dd.mm.yyyy", Now());        mMsg.TextBody = "Сохраните вложение, замените \",\" на \".\" (иначе не удаётся передати без потерь).";        // Можно mMsg.HTMLBody .        // На момент ниписания не было архиватора, а то хотел еще прикрутить slPacker передавать архив...        // но вот *.mht через CDO не хочет нормально передаваться, а HTML с картинками -- не отоха было морочиться (список файлов можно получить из Sys.OleObject("Scripting.FileSystemObject")).        mMsg.AddAttachment(File);        // прикреплять можно несколько файлов -- каждый по отдельности        mMsg.Send();      }      catch(exception)      {        Log.Error("Exception", exception.description);        Log.Warning("Почта не отправлена.", "From: " + mMsg.From + "\r\nTo: " + mMsg.To + "\r\nSubject: " + mMsg.Subject + "\r\nAttachment: \"" + File + "\"\r\nBody:\r\n«" + mMsg.TextBody + "»");      }      finally      {        mMsg = null;        CollectGarbage();      }    }      catch(exception)    {      Log.Error("Exception", exception.description);    }    finally    {      mCfg = null;      CollectGarbage();    }  }  else    Log.Warning("Не удалося экспортировать журнал.");}


А как можно узнать и в заголовке письма писать типа ... "количество тестов N, провалено N-m тестов" или при успешных тестах "количество тестов N, ошибок нет". Ну или при отсутствии ошибок не высылать письмо.
Количество тестов, я так понимаю это количество TestItem. Как эту информацию выдрать по окончании тестирования?
  • 0

#30 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

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

по простоиу так:
mMsg.Subject = "Всего тестов: " + IntToStr(Project.TestItems.ItemCount) + "; Провалено: " + IntToStr(Log.ErrCount)

Будет работать в случае если у вас нет вложенных тестовых айтемов и в случае непрохождения тестов, в логе данного айтема логируется ровно один Error.

Если все сложнее то нужно соответсвенно усложнять...:)
(считать количество айтемов в древовидной структуре если есть вложенность, делать счетчик проваленных тестов если может быть больше одного сообщения в логе на один тест)
  • 0

#31 anagramma

anagramma

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

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

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

VitalyD
Спасибо!
И еще вопрос... как определить последний ТестАйтем выполняется или нет? а то на каждый Айтем отчеты идут.
Нахожу последний Айтем в своей функции а как узнать текущий не понимаю.
Function LastTest(LastItem) ' сюда передаю Project.TestItems в итоге хочу получить True\False
Dim J

'Set LastTest = False ' Не понял почему не срабатывает

If LastItem.ItemCount> 0 Then

	For j = LastItem.ItemCount-1 to 0 Step -1
	  If LastItem.TestItem(j).Enabled Then
		LastTest(LastItem.TestItem(j)) ' тут типа последний Enabled Айтем
		Exit For
	  End If 
	Next 

Else

If LastItem = Project.CurentItem Then  ' Тут LastItem - последний включенный тест, а как его сравнить с текущим не знаю.  
														  ' CurentItem  - естественно сам придумал. 
														  ' Вообще Запуск может быть произведен и просто по Run Current Routine, но по идее функция вернет False 
														  ' и тоже не вышлет отчет. что и нужно.
  Set LastTest = true  '  Тут скорее тоже не понятно почему не сработает =)
End If

End If
End Function
Основная идея слать отчет только когда выполнится последний разрешенный айтем.
  • 0

#32 Dmitry N

Dmitry N

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

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

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

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

В этом случае гораздо проще будет просто создать новый test item, из которого и слать сообщение. Не используя никакие обработчики.
  • 0
С уважением,
Дмитрий

#33 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 20 июля 2010 - 06:54

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

В этом случае гораздо проще будет просто создать новый test item, из которого и слать сообщение. Не используя никакие обработчики.



Полностью поддериваю Дмитрия.
Делаете последним айтемом "отчетный" айтем. В котором собираете всю статистику, рассылаете почту и прочее.
  • 0

#34 anagramma

anagramma

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

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 20 июля 2010 - 11:47

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

В этом случае гораздо проще будет просто создать новый test item, из которого и слать сообщение. Не используя никакие обработчики.


Отличная идея! Спасибо! :focus:
  • 0


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

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