diff --git "a/doc/PluginsTemplates/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/ObjectModule.bsl" "b/doc/PluginsTemplates/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/ObjectModule.bsl" index a40c39799..b1e377311 100644 --- "a/doc/PluginsTemplates/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/ObjectModule.bsl" +++ "b/doc/PluginsTemplates/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/\320\250\320\260\320\261\320\273\320\276\320\275\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/ObjectModule.bsl" @@ -15,6 +15,9 @@ Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета); Результат.Вставить("Идентификатор", Метаданные().Имя); Результат.Вставить("Представление", ""); + // Задействует АПИ для вывода результата отчета по мере исполнения тестов + //Результат.Вставить("ПотоковыйВывод", Истина); + ВызватьИсключение "Необходимо указать представление"; Возврат Новый ФиксированнаяСтруктура(Результат); @@ -68,4 +71,12 @@ Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт ВызватьИсключение "Метод не реализован"; КонецПроцедуры + +// Сохраняет результ теста сразу после его исполнения +// Используется если в описании установлено свойство "ПотоковыйВывод" +&НаКлиенте +Процедура ЗаписатьРезультатТеста(Знач КонтекстЯдра, Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт + ВызватьИсключение "Метод не реализован"; +КонецПроцедуры + // } Report generator interface diff --git "a/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 794739837..d0093f14d 100644 --- "a/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/epf/xddTestRunner/xddTestRunner/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -538,7 +538,6 @@ ПредставлениеТеста = СтрШаблон_("%1 - <%2>", ПредставлениеТеста, ИмяПользователя()); КонецЕсли; - Возврат ПредставлениеТеста; КонецФункции @@ -608,7 +607,11 @@ КонецФункции &НаКлиенте -Функция ВыполнитьТесты(Знач Загрузчик, Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено, Знач Подписчик = Неопределено) Экспорт +Функция ВыполнитьТесты(Знач Загрузчик, Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено, Знач Подписчик = Неопределено, ИерархияИсполнения = Неопределено, ПараметрыПотоковыхОтчетов = Неопределено) Экспорт + + Родитель = Новый Структура("Родитель, Ключ, Тип, Имя", ИерархияИсполнения); + ЗаполнитьЗначенияСвойств(Родитель, КонтейнерДереваТестов, "Ключ, Тип, Имя"); + РезультатТестирования = СоздатьКонтейнерРезультатовТестирования(КонтейнерДереваТестов); ФильтрДляДочернихУзлов = Неопределено; Если Не УзелДереваТестовУдовлетворяетФильтру(КонтейнерДереваТестов, Фильтр) Тогда @@ -633,7 +636,7 @@ Для каждого ДочернийУзел Из СтрокиКонтейнера Цикл ДочернийРезультатТестирования = Неопределено; Если ДочернийУзел.Тип = Объект.ТипыУзловДереваТестов.Контейнер Тогда - ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик); + ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик, Родитель, ПараметрыПотоковыхОтчетов); ИначеЕсли ДочернийУзел.Тип = Объект.ТипыУзловДереваТестов.Элемент Тогда Если УзелДереваТестовУдовлетворяетФильтру(ДочернийУзел, ФильтрДляДочернихУзлов) Тогда @@ -655,6 +658,17 @@ Если Подписчик <> Неопределено Тогда ОповеститьОСобытии(Подписчик, Объект.ВозможныеСобытия.ВыполненТестовыйМетод, ДочернийРезультатТестирования); КонецЕсли; + + ДочернийРезультатТестирования.Вставить("Родитель", Родитель); + + Если ПараметрыПотоковыхОтчетов <> Неопределено Тогда + Для Каждого Параметр Из ПараметрыПотоковыхОтчетов Цикл + ПотоковыйВывод = Плагин(Параметр[0]); + Путь = Параметр[1]; + ПотоковыйВывод.ЗаписатьРезультатТеста(ЭтаФорма, ДочернийРезультатТестирования, Путь); + КонецЦикла; + КонецЕсли; + КонецЕсли; КонецЕсли; Если ДочернийРезультатТестирования <> Неопределено Тогда @@ -1116,15 +1130,17 @@ НастройкиШагов = Новый Структура; НастройкиШагов.Вставить("Параметры_xddRun"); НастройкиШагов.Вставить("Параметры_xddReport"); + НастройкиШагов.Вставить("Параметры_xddStreamReport"); НастройкиШагов.Вставить("Параметры_xddExitCodePath"); НастройкиШагов.Вставить("xddShutdown"); НастройкиШагов.Вставить("ТестКлиенты", ТестКлиенты); - ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddRun, НастройкиШагов.Параметры_xddRun); - ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport, НастройкиШагов.Параметры_xddReport); + ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddRun, НастройкиШагов.Параметры_xddRun); ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddExitCodePath, НастройкиШагов.Параметры_xddExitCodePath); НастройкиШагов.xddShutdown = ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddShutdown); + СобратьНастройкиОтчетовТестирования(НастройкиШагов, ПараметрыЗапуска); + Если Не ЕстьПоддержкаАсинхронныхВызовов Тогда ВыполнитьПакетныйЗапускСинхронно(НастройкиШагов); Иначе @@ -1145,6 +1161,30 @@ КонецПроцедуры +&НаКлиенте +Процедура СобратьНастройкиОтчетовТестирования(НастройкиШагов, ПараметрыЗапуска) + + ПарсерКоманднойСтроки = Плагин("ПарсерКоманднойСтроки"); + + Параметры_xddReport = Новый Массив; + Параметры_xddStreamReport = Новый Массив; + + Если ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport) Тогда + Для Каждого ГенераторОтчета Из ПараметрыЗапуска[ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport] Цикл + ОписаниеПлагина = Плагин(ГенераторОтчета[0]).ОписаниеПлагина(Объект.ТипыПлагинов); + Если ОписаниеПлагина.Свойство("ПотоковыйВывод") И ОписаниеПлагина.ПотоковыйВывод Тогда + Параметры_xddStreamReport.Добавить(ГенераторОтчета); + Иначе + Параметры_xddReport.Добавить(ГенераторОтчета); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + НастройкиШагов.Параметры_xddReport = Новый ФиксированныйМассив(Параметры_xddReport); + НастройкиШагов.Параметры_xddStreamReport = Новый ФиксированныйМассив(Параметры_xddStreamReport); + +КонецПроцедуры + &НаКлиенте Процедура ВыполнитьПакетныйЗапускСинхронно(Знач ПараметрыЗапуска) @@ -1258,7 +1298,12 @@ Процедура НачатьВыполнениеТестов(ДеревоТестовОтЗагрузчика, ОбработкаОповещения) Загрузчик = ОбработкаОповещения.ДополнительныеПараметры.Загрузчик; - РезультатыТестирования = ЭтаФорма.ВыполнитьТесты(Загрузчик, ДеревоТестовОтЗагрузчика); + + Параметры_xddStreamReport = Неопределено; + ОбработкаОповещения.ДополнительныеПараметры.НастройкиШагов.Свойство("Параметры_xddStreamReport", Параметры_xddStreamReport); + + РезультатыТестирования = ЭтаФорма.ВыполнитьТесты(Загрузчик, ДеревоТестовОтЗагрузчика,,,,Параметры_xddStreamReport); + Если РезультатыТестирования = Неопределено Тогда ВывестиСообщение("Не найдено результатов тестирования"); КонецЕсли; diff --git "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Ext/ObjectModule.bsl" "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Ext/ObjectModule.bsl" index ec7a4d2cb..8ef35c70e 100644 --- "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Ext/ObjectModule.bsl" +++ "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Ext/ObjectModule.bsl" @@ -6,6 +6,7 @@ Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета); Результат.Вставить("Идентификатор", Метаданные().Имя); Результат.Вставить("Представление", "Отчет о тестировании в формате XML для Yandex Allure версии 2"); + Результат.Вставить("ПотоковыйВывод", Истина); Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -32,10 +33,7 @@ РезНабор = Новый Массив; Для каждого ОписаниеШага Из МассивОписанийШагов Цикл - ЗаписьJSON = Новый ЗаписьJSON; - ЗаписьJSON.УстановитьСтроку(); - ЗаписатьJSON(ЗаписьJSON, ОписаниеШага); - СтрокаJSON = ЗаписьJSON.Закрыть(); + СтрокаJSON = СериализоватьОписаниеШага(ОписаниеШага); Отчет = Новый ТекстовыйДокумент; Отчет.УстановитьТекст(СтрокаJSON); @@ -48,6 +46,14 @@ КонецФункции +Процедура ЗаписатьРезультатТестаНаСервере(Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт + + ОписаниеШага = СоздатьОписаниеШага(РезультатТеста); + Отчет = СериализоватьОписаниеШага(ОписаниеШага); + Экспортировать(Отчет, ПолныйПутьФайла); + +КонецПроцедуры + #Если ТолстыйКлиентОбычноеПриложение Тогда Процедура Показать(Отчет) Экспорт Отчет.Показать(); @@ -55,8 +61,14 @@ #КонецЕсли Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт - - СтрокаJSON = Отчет.ПолучитьТекст(); + + Перем СтрокаJSON; + + Если ТипЗнч(Отчет) = Тип("Строка") Тогда + СтрокаJSON = Отчет; + Иначе + СтрокаJSON = Отчет.ПолучитьТекст(); + КонецЕсли; ИмяФайла = ПолныйПутьФайла; @@ -144,12 +156,15 @@ Возврат Рез; КонецФункции -Функция СоздатьОписаниеШага(Знач РезультатШага, Знач КоллекцияРодителей) +Функция СоздатьОписаниеШага(Знач РезультатШага, Знач КоллекцияРодителей = Неопределено) ОписаниеШага = ОписаниеСценарияАллюр2(); - + Родитель = РезультатШага.Родитель; - - РодительРодителя = НайтиПоКлючу(КоллекцияРодителей, Родитель.Ключ); + Если КоллекцияРодителей = Неопределено Тогда + РодительРодителя = РезультатШага.Родитель.Родитель; + Иначе + РодительРодителя = НайтиПоКлючу(КоллекцияРодителей, Родитель.Ключ); + КонецЕсли; ОписаниеШага.Вставить("name", РезультатШага.Представление); ОписаниеШага.Вставить("description", РезультатШага.ИмяМетода); @@ -263,6 +278,17 @@ КонецЕсли; КонецПроцедуры +Функция СериализоватьОписаниеШага(ОписаниеШага) + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, ОписаниеШага); + СтрокаJSON = ЗаписьJSON.Закрыть(); + + Возврат СтрокаJSON; + +КонецФункции + // } Helpers РазницаВМилисекундахМеждуЮниксИНачалЭпохи = 62135596800000; \ No newline at end of file diff --git "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index da210225d..79c485b23 100644 --- "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260AllureXML\320\222\320\265\321\200\321\201\320\270\321\2172/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -69,6 +69,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗаписатьРезультатТеста(Знач КонтекстЯдра, Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт + Объект.СостоянияТестов = КонтекстЯдра.Объект.СостоянияТестов; + ЗаписатьРезультатТестаНаСервере(РезультатТеста, ПолныйПутьФайла); +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьРезультатТестаНаСервере(Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт + ЭтотОбъектНаСервере().ЗаписатьРезультатТестаНаСервере(РезультатТеста, ПолныйПутьФайла); +КонецПроцедуры // { Helpers diff --git "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Ext/ObjectModule.bsl" "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Ext/ObjectModule.bsl" index 8789e60a8..7bf233076 100644 --- "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Ext/ObjectModule.bsl" +++ "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Ext/ObjectModule.bsl" @@ -5,6 +5,7 @@ Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета); Результат.Вставить("Идентификатор", Метаданные().Имя); Результат.Вставить("Представление", "Отчет о тестировании в формате JUnit.xml"); + Результат.Вставить("ПотоковыйВывод", Истина); Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции @@ -100,6 +101,41 @@ Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт Отчет.Записать(ПолныйПутьФайла); КонецПроцедуры + +Процедура ЗаписатьРезультатТестаНаСервере(Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("testsuites"); + ЗаписьXML.ЗаписатьАтрибут("name", XMLСтрока(РезультатТеста.Родитель.Родитель.Имя)); + ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(РезультатТеста.ВремяВыполнения)); + ЗаписьXML.ЗаписатьАтрибут("tests", XMLСтрока(1)); + ЗаписьXML.ЗаписатьАтрибут("failures", XMLСтрока(?(РезультатТеста.Состояние = СостоянияТестов.Сломан, 1, 0))); + ЗаписьXML.ЗаписатьАтрибут("errors", XMLСтрока(?(РезультатТеста.Состояние = СостоянияТестов.НеРеализован, 1, 0))); + ЗаписьXML.ЗаписатьАтрибут("skipped", XMLСтрока(?(РезультатТеста.Состояние = СостоянияТестов.НеизвестнаяОшибка, 1, 0))); + + ЗаписьXML.ЗаписатьНачалоЭлемента("testsuite"); + ЗаписьXML.ЗаписатьАтрибут("name", РезультатТеста.Родитель.Родитель.Имя); + ЗаписьXML.ЗаписатьНачалоЭлемента("testsuite"); + ЗаписьXML.ЗаписатьАтрибут("name", РезультатТеста.Родитель.Имя); + + ВывестиРезультатЭлемента(ЗаписьXML, РезультатТеста, РезультатТеста.Родитель.Имя); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + СтрокаXML = ЗаписьXML.Закрыть(); + Отчет = Новый ТекстовыйДокумент; + Отчет.ДобавитьСтроку(СтрокаXML); + + ИмяФайла = ПолучитьУникальноеИмяФайла(ПолныйПутьФайла); + Экспортировать(Отчет, ИмяФайла); + +КонецПроцедуры // } Report generator interface // { Helpers @@ -112,4 +148,30 @@ Возврат Результат; КонецФункции + +// Замена функции СтрШаблон на конфигурациях с режимом совместимости < 8.3.6 +// При внедрении в конфигурацию с режимом совместимости >= 8.3.6 данную функцию необходимо удалить +// +Функция СтрШаблон_(Знач СтрокаШаблон, Знач Парам1 = Неопределено, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено) Экспорт + + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(Парам1); + МассивПараметров.Добавить(Парам2); + МассивПараметров.Добавить(Парам3); + МассивПараметров.Добавить(Парам4); + + Для Сч = 1 По МассивПараметров.Количество() Цикл + ТекЗначение = МассивПараметров[Сч-1]; + СтрокаШаблон = СтрЗаменить(СтрокаШаблон, "%"+Сч, Строка(ТекЗначение)); + КонецЦикла; + Возврат СтрокаШаблон; +КонецФункции + +Функция ПолучитьУникальноеИмяФайла(Знач ИмяФайла) + Файл = Новый Файл(ИмяФайла); + ГУИД = Новый УникальныйИдентификатор; + ИмяФайла = СтрШаблон_("%1-result.xml", ГУИД); + ИмяФайла = СтрШаблон_("%1/%2", Файл.Путь, ИмяФайла); + Возврат ИмяФайла; +КонецФункции // } Helpers diff --git "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 176a23484..afef4486b 100644 --- "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -41,6 +41,18 @@ Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт Отчет.Записать(ПолныйПутьФайла); КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьРезультатТеста(Знач КонтекстЯдра, Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт + Объект.СостоянияТестов = КонтекстЯдра.Объект.СостоянияТестов; + ЗаписатьРезультатТестаНаСервере(РезультатТеста, ПолныйПутьФайла); +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьРезультатТестаНаСервере(Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт + ЭтотОбъектНаСервере().ЗаписатьРезультатТестаНаСервере(РезультатТеста, ПолныйПутьФайла); +КонецПроцедуры + // } Report generator interface &НаКлиенте