Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Потоковый вывод результатов тестов #393

Merged
merged 5 commits into from
Jan 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета);
Результат.Вставить("Идентификатор", Метаданные().Имя);
Результат.Вставить("Представление", "");
// Задействует АПИ для вывода результата отчета по мере исполнения тестов
//Результат.Вставить("ПотоковыйВывод", Истина);

ВызватьИсключение "Необходимо указать представление";

Возврат Новый ФиксированнаяСтруктура(Результат);
Expand Down Expand Up @@ -68,4 +71,12 @@
Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт
ВызватьИсключение "Метод не реализован";
КонецПроцедуры

// Сохраняет результ теста сразу после его исполнения
// Используется если в описании установлено свойство "ПотоковыйВывод"
&НаКлиенте
Процедура ЗаписатьРезультатТеста(Знач КонтекстЯдра, Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт
ВызватьИсключение "Метод не реализован";
КонецПроцедуры

// } Report generator interface
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,6 @@

ПредставлениеТеста = СтрШаблон_("%1 - <%2>", ПредставлениеТеста, ИмяПользователя());
КонецЕсли;

Возврат ПредставлениеТеста;
КонецФункции

Expand Down Expand Up @@ -608,7 +607,11 @@
КонецФункции

&НаКлиенте
Функция ВыполнитьТесты(Знач Загрузчик, Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено, Знач Подписчик = Неопределено) Экспорт
Функция ВыполнитьТесты(Знач Загрузчик, Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено, Знач Подписчик = Неопределено, ИерархияИсполнения = Неопределено, ПараметрыПотоковыхОтчетов = Неопределено) Экспорт

Родитель = Новый Структура("Родитель, Ключ, Тип, Имя", ИерархияИсполнения);
ЗаполнитьЗначенияСвойств(Родитель, КонтейнерДереваТестов, "Ключ, Тип, Имя");

РезультатТестирования = СоздатьКонтейнерРезультатовТестирования(КонтейнерДереваТестов);
ФильтрДляДочернихУзлов = Неопределено;
Если Не УзелДереваТестовУдовлетворяетФильтру(КонтейнерДереваТестов, Фильтр) Тогда
Expand All @@ -633,7 +636,7 @@
Для каждого ДочернийУзел Из СтрокиКонтейнера Цикл
ДочернийРезультатТестирования = Неопределено;
Если ДочернийУзел.Тип = Объект.ТипыУзловДереваТестов.Контейнер Тогда
ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик);
ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик, Родитель, ПараметрыПотоковыхОтчетов);
ИначеЕсли ДочернийУзел.Тип = Объект.ТипыУзловДереваТестов.Элемент Тогда
Если УзелДереваТестовУдовлетворяетФильтру(ДочернийУзел, ФильтрДляДочернихУзлов) Тогда

Expand All @@ -655,6 +658,17 @@
Если Подписчик <> Неопределено Тогда
ОповеститьОСобытии(Подписчик, Объект.ВозможныеСобытия.ВыполненТестовыйМетод, ДочернийРезультатТестирования);
КонецЕсли;

ДочернийРезультатТестирования.Вставить("Родитель", Родитель);

Если ПараметрыПотоковыхОтчетов <> Неопределено Тогда
Для Каждого Параметр Из ПараметрыПотоковыхОтчетов Цикл
ПотоковыйВывод = Плагин(Параметр[0]);
Путь = Параметр[1];
ПотоковыйВывод.ЗаписатьРезультатТеста(ЭтаФорма, ДочернийРезультатТестирования, Путь);
КонецЦикла;
КонецЕсли;

КонецЕсли;
КонецЕсли;
Если ДочернийРезультатТестирования <> Неопределено Тогда
Expand Down Expand Up @@ -1116,15 +1130,17 @@
НастройкиШагов = Новый Структура;
НастройкиШагов.Вставить("Параметры_xddRun");
НастройкиШагов.Вставить("Параметры_xddReport");
НастройкиШагов.Вставить("Параметры_xddStreamReport");
НастройкиШагов.Вставить("Параметры_xddExitCodePath");
НастройкиШагов.Вставить("xddShutdown");
НастройкиШагов.Вставить("ТестКлиенты", ТестКлиенты);

ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddRun, НастройкиШагов.Параметры_xddRun);
ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport, НастройкиШагов.Параметры_xddReport);
ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddRun, НастройкиШагов.Параметры_xddRun);
ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddExitCodePath, НастройкиШагов.Параметры_xddExitCodePath);
НастройкиШагов.xddShutdown = ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddShutdown);

СобратьНастройкиОтчетовТестирования(НастройкиШагов, ПараметрыЗапуска);

Если Не ЕстьПоддержкаАсинхронныхВызовов Тогда
ВыполнитьПакетныйЗапускСинхронно(НастройкиШагов);
Иначе
Expand All @@ -1145,6 +1161,30 @@

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

&НаКлиенте
Процедура СобратьНастройкиОтчетовТестирования(НастройкиШагов, ПараметрыЗапуска)

ПарсерКоманднойСтроки = Плагин("ПарсерКоманднойСтроки");

Параметры_xddReport = Новый Массив;
Параметры_xddStreamReport = Новый Массив;

Если ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport) Тогда
Для Каждого ГенераторОтчета Из ПараметрыЗапуска[ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport] Цикл
ОписаниеПлагина = Плагин(ГенераторОтчета[0]).ОписаниеПлагина(Объект.ТипыПлагинов);
Если ОписаниеПлагина.Свойство("ПотоковыйВывод") И ОписаниеПлагина.ПотоковыйВывод Тогда
Параметры_xddStreamReport.Добавить(ГенераторОтчета);
Иначе
Параметры_xddReport.Добавить(ГенераторОтчета);
КонецЕсли;
КонецЦикла;
КонецЕсли;

НастройкиШагов.Параметры_xddReport = Новый ФиксированныйМассив(Параметры_xddReport);
НастройкиШагов.Параметры_xddStreamReport = Новый ФиксированныйМассив(Параметры_xddStreamReport);

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

&НаКлиенте
Процедура ВыполнитьПакетныйЗапускСинхронно(Знач ПараметрыЗапуска)

Expand Down Expand Up @@ -1258,7 +1298,12 @@
Процедура НачатьВыполнениеТестов(ДеревоТестовОтЗагрузчика, ОбработкаОповещения)

Загрузчик = ОбработкаОповещения.ДополнительныеПараметры.Загрузчик;
РезультатыТестирования = ЭтаФорма.ВыполнитьТесты(Загрузчик, ДеревоТестовОтЗагрузчика);

Параметры_xddStreamReport = Неопределено;
ОбработкаОповещения.ДополнительныеПараметры.НастройкиШагов.Свойство("Параметры_xddStreamReport", Параметры_xddStreamReport);

РезультатыТестирования = ЭтаФорма.ВыполнитьТесты(Загрузчик, ДеревоТестовОтЗагрузчика,,,,Параметры_xddStreamReport);

Если РезультатыТестирования = Неопределено Тогда
ВывестиСообщение("Не найдено результатов тестирования");
КонецЕсли;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета);
Результат.Вставить("Идентификатор", Метаданные().Имя);
Результат.Вставить("Представление", "Отчет о тестировании в формате XML для Yandex Allure версии 2");
Результат.Вставить("ПотоковыйВывод", Истина);

Возврат Новый ФиксированнаяСтруктура(Результат);
КонецФункции
Expand All @@ -32,10 +33,7 @@
РезНабор = Новый Массив;

Для каждого ОписаниеШага Из МассивОписанийШагов Цикл
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ОписаниеШага);
СтрокаJSON = ЗаписьJSON.Закрыть();
СтрокаJSON = СериализоватьОписаниеШага(ОписаниеШага);

Отчет = Новый ТекстовыйДокумент;
Отчет.УстановитьТекст(СтрокаJSON);
Expand All @@ -48,15 +46,29 @@

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

Процедура ЗаписатьРезультатТестаНаСервере(Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт

ОписаниеШага = СоздатьОписаниеШага(РезультатТеста);
Отчет = СериализоватьОписаниеШага(ОписаниеШага);
Экспортировать(Отчет, ПолныйПутьФайла);

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

#Если ТолстыйКлиентОбычноеПриложение Тогда
Процедура Показать(Отчет) Экспорт
Отчет.Показать();
КонецПроцедуры
#КонецЕсли

Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт

СтрокаJSON = Отчет.ПолучитьТекст();

Перем СтрокаJSON;

Если ТипЗнч(Отчет) = Тип("Строка") Тогда
СтрокаJSON = Отчет;
Иначе
СтрокаJSON = Отчет.ПолучитьТекст();
КонецЕсли;

ИмяФайла = ПолныйПутьФайла;

Expand Down Expand Up @@ -144,12 +156,15 @@
Возврат Рез;
КонецФункции

Функция СоздатьОписаниеШага(Знач РезультатШага, Знач КоллекцияРодителей)
Функция СоздатьОписаниеШага(Знач РезультатШага, Знач КоллекцияРодителей = Неопределено)
ОписаниеШага = ОписаниеСценарияАллюр2();

Родитель = РезультатШага.Родитель;

РодительРодителя = НайтиПоКлючу(КоллекцияРодителей, Родитель.Ключ);
Если КоллекцияРодителей = Неопределено Тогда
РодительРодителя = РезультатШага.Родитель.Родитель;
Иначе
РодительРодителя = НайтиПоКлючу(КоллекцияРодителей, Родитель.Ключ);
КонецЕсли;

ОписаниеШага.Вставить("name", РезультатШага.Представление);
ОписаниеШага.Вставить("description", РезультатШага.ИмяМетода);
Expand Down Expand Up @@ -263,6 +278,17 @@
КонецЕсли;
КонецПроцедуры

Функция СериализоватьОписаниеШага(ОписаниеШага)

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ОписаниеШага);
СтрокаJSON = ЗаписьJSON.Закрыть();

Возврат СтрокаJSON;

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

// } Helpers

РазницаВМилисекундахМеждуЮниксИНачалЭпохи = 62135596800000;
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,16 @@

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

&НаКлиенте
Процедура ЗаписатьРезультатТеста(Знач КонтекстЯдра, Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт
Объект.СостоянияТестов = КонтекстЯдра.Объект.СостоянияТестов;
ЗаписатьРезультатТестаНаСервере(РезультатТеста, ПолныйПутьФайла);
КонецПроцедуры

&НаСервере
Процедура ЗаписатьРезультатТестаНаСервере(Знач РезультатТеста, Знач ПолныйПутьФайла) Экспорт
ЭтотОбъектНаСервере().ЗаписатьРезультатТестаНаСервере(РезультатТеста, ПолныйПутьФайла);
КонецПроцедуры

// { Helpers

Expand Down
Loading