Skip to content

Commit

Permalink
Merge pull request Pr-Mex#2171 from Pr-Mex/issue_2170
Browse files Browse the repository at this point in the history
Pr-Mex#2170 Smart сообщения для TeamCity
  • Loading branch information
Pr-Mex authored Jul 14, 2024
2 parents 9d431d6 + 8c31d72 commit 010524f
Showing 1 changed file with 135 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,9 @@
&НаКлиенте
Перем ЭтоМенеджерТестирования;

&НаКлиенте
Перем НастройкиTeamCity;

#КонецОбласти

#КонецОбласти
Expand Down Expand Up @@ -20937,7 +20940,7 @@
ЗаписатьЛогВЖРОшибка("VanessaAutomation.ПрикладыватьКОтчетуAllureДанныеОЗначенияхПеременных", ОписаниеОшибки());
КонецПопытки;
КонецЕсли;

#КонецЕсли

КонецПроцедуры
Expand Down Expand Up @@ -31570,9 +31573,13 @@

КонецЕсли;

КонецЕсли;
КонецЕсли;

КонецЕсли;

Если НастройкиTeamCity.Используется Тогда
ЗавершитьТестTeamCity(СтрокаСценария, РезультатПрохожденияТестовСценария);
КонецЕсли;

Если Объект.ИспользоватьРедакторVanessaEditor Тогда
ЭкземплярVanessaEditor = ПолучитьVanessaEditor();
Expand Down Expand Up @@ -33399,8 +33406,12 @@
КонецЕсли;

Если Объект.ДелатьЛогВыполненияСценариевВЖР Тогда
ЗаписатьЛогВЖРПередВыполнениемСценария(МассивСценариевДляВыполнения[ТекИД_СценарияВМассиве].Имя);
КонецЕсли;
ЗаписатьЛогВЖРПередВыполнениемСценария(МассивСценариевДляВыполнения[ТекИД_СценарияВМассиве].Имя);
КонецЕсли;

Если НастройкиTeamCity.Используется Тогда
НачатьТестTeamCity(СтрокаСценария);
КонецЕсли;

ИмяФичаФайла = ОпределитьИмяФичаФайлаПоСтрокеДерева(СтрокаСценария);
Если НЕ СравнитьПутиФайлов(ТекущийИсполняемыйФичаФайл, ИмяФичаФайла) Тогда
Expand All @@ -33423,7 +33434,7 @@

КонецЕсли;

КонецЕсли;
КонецЕсли;

Если Объект.ПодробныйЛогВыполненияСценариев
И Объект.ДелатьЛогВыполненияСценариевВТекстовыйФайл Тогда
Expand Down Expand Up @@ -43522,6 +43533,10 @@
КонецЕсли;
НужноОчиститьВременныйКаталогVanessaEditor = Ложь;

НастройкиTeamCity = НастройкиTeamCity();
НастройкиTeamCity.Используется = ЗначениеПараметраЗапуска("RunFromTeamCity", Ложь);
НастройкиTeamCity.IDПотока = ЗначениеПараметраЗапуска("TeamCityTag", "");

// Реквизит формы сохраняетс в глобальной переменной, чтобы не сериализоваться
глРеквизитТекстStopVideoRec = ПолучитьЗначениеДополнительногоПараметраИУдалить("РеквизитТекстStopVideoRec");

Expand Down Expand Up @@ -51633,7 +51648,7 @@
ТаблицаИменНоваяСтрока("ДымовыеТестыТолькоИзмененныеОтностительноКонфигурацииПоставщика", "SmokeTestsOnlyChangedRelativeToVendorConfiguration", ТаблицаИмен, НижнийРегистр);
ТаблицаИменНоваяСтрока("ДымовыеТестыИмяКонфигурацииПоставщика", "SmokeTestsVendorConfigurationName", ТаблицаИмен, НижнийРегистр);
ТаблицаИменНоваяСтрока("ДымовыеТестыПутьКФайлуНастроекСценариев", "SmokeTestsPathToFileSettingsScripts", ТаблицаИмен, НижнийРегистр);

// Удалить. Обратная совместимость
ТаблицаИменНоваяСтрока("КаталогOutputAllure", "allurepath", ТаблицаИмен, НижнийРегистр);
ТаблицаИменНоваяСтрока("КаталогOutputAllureБазовый", "allurepathbase", ТаблицаИмен, НижнийРегистр);
Expand Down Expand Up @@ -56001,4 +56016,117 @@

КонецФункции

#КонецОбласти

#Область TeamCity

&НаКлиенте
Функция НастройкиTeamCity()

Структура = Новый Структура();

Структура.Вставить("Используется", Ложь);
Структура.Вставить("ЭтоПервыйЗапуск", Истина);
Структура.Вставить("IDПотока", "");
Структура.Вставить("ТекущийФичаФайл", "");
Структура.Вставить("ТекущийСценарий", "");
Структура.Вставить("ДлительностьТеста", 0);
Структура.Вставить("ТекстОшибки", "");

Шаблоны = Новый Структура;
Шаблоны.Вставить("НачалоГруппы", "##teamcity[flowStarted flowId='$Tag$']");
Шаблоны.Вставить("ОкончаниеГруппы", "##teamcity[flowFinished flowId='$Tag$']");

Шаблоны.Вставить("НачалоФичаФайла", "##teamcity[testSuiteStarted name='$Tag$.$CurrentFeatureFile$' flowId='$Tag$']");
Шаблоны.Вставить("ОкончаниеФичаФайла", "##teamcity[testSuiteFinished name='$Tag$.$CurrentFeatureFile$' flowId='$Tag$']");

Шаблоны.Вставить("НачалоТеста", "##teamcity[testStarted name='$Tag$.$CurrentTest$' flowId='$Tag$']");
Шаблоны.Вставить("ОшибкаТестаНаСравнение", "##teamcity[testFailed type='comparisonFailure' name='$Tag$.$CurrentTest$' details='$Details$' flowId='$Tag$' expected='$expected$' actual='$actual$']");
Шаблоны.Вставить("ОшибкаТеста", "##teamcity[testFailed name='$Tag$.$CurrentTest$' details='$Details$' flowId='$Tag$']");
Шаблоны.Вставить("ВыводСообщенияВГруппу", "##teamcity[testStdOut name='$Tag$.$CurrentTest$' out='$line$' flowId='$Tag$']");
Шаблоны.Вставить("ОкончаниеТеста", "##teamcity[testFinished name='$Tag$.$CurrentTest$' duration='$TotalMilliseconds$' flowId='$Tag$']");

Структура.Вставить("Шаблоны", Шаблоны);
Возврат Структура;
КонецФункции

&НаКлиенте
Процедура НачатьТестTeamCity(СтрокаСценария)

Файл = Новый Файл(МассивСценариевДляВыполнения[ТекИД_СценарияВМассиве].ПолныйПутьКФиче);
ТекущийФичаФайл = Файл.ИмяБезРасширения;
Если НастройкиTeamCity.ЭтоПервыйЗапуск Тогда
НастройкиTeamCity.ЭтоПервыйЗапуск = Ложь;
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.НачалоГруппы);
КонецЕсли;

Если НастройкиTeamCity.ТекущийФичаФайл = "" Тогда
НастройкиTeamCity.ТекущийФичаФайл = ТекущийФичаФайл;
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.НачалоФичаФайла);
ИначеЕсли НЕ НастройкиTeamCity.ТекущийФичаФайл = ТекущийФичаФайл Тогда
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.ОкончаниеФичаФайла);
НастройкиTeamCity.ТекущийФичаФайл = ТекущийФичаФайл;
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.НачалоФичаФайла);
КонецЕсли;

НастройкиTeamCity.ТекущийСценарий = СтрокаСценария.Имя;
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.НачалоТеста);
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьТестTeamCity(СтрокаСценария, РезультатПрохожденияТестовСценария)
Т2 = ТекущаяУниверсальнаяДатаВМиллисекундах();
НастройкиTeamCity.ДлительностьТеста = РезультатПрохожденияТестовСценария.ВремяОкончания - РезультатПрохожденияТестовСценария.ВремяНачала;

Если СтрокаСценария.ТекстОшибки = "" Тогда
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.ОкончаниеТеста);
Иначе
НастройкиTeamCity.ТекстОшибки = СтрокаСценария.ТекстОшибки;
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.ОшибкаТеста);
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.ОкончаниеТеста);
НастройкиTeamCity.ТекстОшибки = "";
КонецЕсли;

НастройкиTeamCity.ДлительностьТеста = 0;

Если МассивРезультатПрохожденияТестовСценария.Количество() = МассивСценариевДляВыполнения.Количество() Тогда
НастройкиTeamCity.ЭтоПервыйЗапуск = Истина;

ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.ОкончаниеФичаФайла);
ВывестиВКонсольTeamCity(НастройкиTeamCity.Шаблоны.ОкончаниеГруппы);
КонецЕсли;

КонецПроцедуры

&НаКлиенте
Функция ЭкранированиеСообщенияTeamCity(Стр)
Стр = СтрЗаменить(Стр, "|", "||");
Стр = СтрЗаменить(Стр, "'", "|'");
Стр = СтрЗаменить(Стр, "[", "|[");
Стр = СтрЗаменить(Стр, "]", "|]");
Стр = СтрЗаменить(Стр, Символы.ВК, "|r");
Стр = СтрЗаменить(Стр, Символы.ПС, "|n");
Возврат Стр;
КонецФункции

&НаКлиенте
Функция ПодготовитьСообщениеTeamCity(Знач ТекстСообщения)

ТекстСообщения = СтрЗаменить(ТекстСообщения, "$Tag$", НастройкиTeamCity.IDПотока);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "$CurrentFeatureFile$", ЭкранированиеСообщенияTeamCity(НастройкиTeamCity.ТекущийФичаФайл));
ТекстСообщения = СтрЗаменить(ТекстСообщения, "$CurrentTest$", ЭкранированиеСообщенияTeamCity(НастройкиTeamCity.ТекущийСценарий));
ТекстСообщения = СтрЗаменить(ТекстСообщения, "$TotalMilliseconds$", Формат(НастройкиTeamCity.ДлительностьТеста, "ЧГ="));
ТекстСообщения = СтрЗаменить(ТекстСообщения, "$Details$", ЭкранированиеСообщенияTeamCity(НастройкиTeamCity.ТекстОшибки));
Возврат ТекстСообщения;

КонецФункции

&НаКлиенте
Процедура ВывестиВКонсольTeamCity(Знач Стр)
Стр = ПодготовитьСообщениеTeamCity(Стр);
Если Объект.ИспользоватьКомпонентуVanessaExt И ВнешняяКомпонентаДляСкриншотов <> Неопределено И НЕ ЗапрещеныСинхронныеВызовы Тогда
ВнешняяКомпонентаДляСкриншотов.ВывестиВКонсоль(Стр + Символы.ПС, 866);
КонецЕсли;
КонецПроцедуры

#КонецОбласти

0 comments on commit 010524f

Please sign in to comment.