Skip to content

Commit

Permalink
Merge pull request #508 from silverbulleters/feature/junit-fix
Browse files Browse the repository at this point in the history
Исправлена ошибка генерации отчета о тестирования в серверной базе на 8.3.15
  • Loading branch information
artbear authored Jun 28, 2019
2 parents bc728c5 + 5461077 commit ff256be
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 129 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
Результат.Вставить("Идентификатор", Метаданные().Имя);
Результат.Вставить("Представление", "Отчет о тестировании в формате XML для Yandex Allure версии 2");
Результат.Вставить("ПотоковыйВывод", Истина);

Возврат Новый ФиксированнаяСтруктура(Результат);
КонецФункции

Expand All @@ -22,37 +22,39 @@
ЭтотОбъект.ИконкиУзловДереваТестов = ПостроительДереваТестов.ИконкиУзловДереваТестов;
ЭтотОбъект.СостоянияТестов = КонтекстЯдра.СостоянияТестов;
Отчет = СоздатьОтчетНаСервере(РезультатыТестирования);

Возврат Отчет;
КонецФункции

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

МассивОписанийШагов = СоздатьОтчетАллюр2(РезультатыТестирования);

РезНабор = Новый Массив;

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

Отчет = Новый ТекстовыйДокумент;
Отчет.УстановитьТекст(СтрокаJSON);

РезНабор.Добавить(Отчет);

КонецЦикла;

Возврат РезНабор;

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

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

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

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

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

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

#Если ТолстыйКлиентОбычноеПриложение Тогда
Процедура Показать(Отчет) Экспорт
Expand All @@ -61,28 +63,28 @@
#КонецЕсли

Процедура Экспортировать(Отчет, ПутьКОтчету) Экспорт

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

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

ИмяФайла = ПутьКОтчету;
ИмяФайла = ПолучитьУникальноеИмяФайла(ИмяФайла);

ИмяФайла = ПолучитьУникальноеИмяФайла(ИмяФайла);

Сообщение = "Уникальное имя файла " + ИмяФайла;
ЗаписьЖурналаРегистрации("xUnitFor1C.ГенераторОтчетаAllureXMLВерсия2", УровеньЖурналаРегистрации.Информация, , , Сообщение);

ПроверитьИмяФайлаРезультатаAllure(ИмяФайла);

// Исключаем возможность записи в UTF-8 BOM
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
ЗаписьТекста.Закрыть();

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,, Истина);
ЗаписьТекста.Записать(СтрокаJSON);
ЗаписьТекста.Закрыть();
Expand All @@ -109,7 +111,7 @@

Функция ОписаниеСценарияАллюр2()
Перем СтруктураРезультата;

GUID = Новый УникальныйИдентификатор();
СтруктураРезультата = Новый Структура(); //"uuid, historyId, name, status, parameters, labels, links, attachments");
СтруктураРезультата.Вставить("uuid", Строка(GUID));
Expand All @@ -120,16 +122,16 @@
СтруктураРезультата.Вставить("stop", Неопределено);
СтруктураРезультата.Вставить("statusDetails", Новый Структура("known, muted,flaky", Ложь, Ложь, Ложь));
СтруктураРезультата.Вставить("status", Неопределено);
СтруктураРезультата.Вставить("stage", "finished"); // Внятного описания, зачем это в каждом сценарии нет.
СтруктураРезультата.Вставить("stage", "finished"); // Внятного описания, зачем это в каждом сценарии нет.
СтруктураРезультата.Вставить("steps", Новый Массив());
СтруктураРезультата.Вставить("parameters", Новый Массив());
СтруктураРезультата.Вставить("labels", Новый Массив());
СтруктураРезультата.Вставить("links", Новый Массив());
СтруктураРезультата.Вставить("attachments", Новый Массив());
СтруктураРезультата.Вставить("description", "");

Возврат СтруктураРезультата;

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

Процедура ДобавитьШагТестированияВМассивШагов(Знач РезультатыТестирования, Знач МассивШагов, Знач КоллекцияРодителей, Знач Родитель = Неопределено)
Expand All @@ -147,7 +149,7 @@
КоллекцияРодителей.Вставить(Строка.Ключ, Родитель);
Иначе
ДобавитьШагТестированияВМассивШагов(Строка.Строки, МассивШагов, КоллекцияРодителей, Строка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Expand All @@ -158,7 +160,7 @@

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

Родитель = РезультатШага.Родитель;
Если КоллекцияРодителей = Неопределено Тогда
РодительРодителя = РезультатШага.Родитель.Родитель;
Expand All @@ -170,7 +172,7 @@
ОписаниеШага.Вставить("description", РезультатШага.ИмяМетода);

ОписаниеШага.Вставить("start", РезультатШага.ВремяНачала - РазницаВМилисекундахМеждуЮниксИНачалЭпохи);
ОписаниеШага.Вставить("stop", РезультатШага.ВремяОкончания - РазницаВМилисекундахМеждуЮниксИНачалЭпохи);
ОписаниеШага.Вставить("stop", РезультатШага.ВремяОкончания - РазницаВМилисекундахМеждуЮниксИНачалЭпохи);

ВставитьОписаниеСтатуса(ОписаниеШага, РезультатШага.Сообщение);

Expand All @@ -180,28 +182,28 @@
ИмяСтори = Родитель.Имя;
ИмяПакета = РезультатШага.Путь;
ИмяХоста = ИмяФичи;

ОписаниеШага.historyId = СтрШаблон_("%1.%2.%3", ИмяФичи, ИмяСтори, РезультатШага.Представление);

СписокМеток = ОписаниеШага.labels;
ДобавитьМетку(СписокМеток, "host", ИмяХоста);
ДобавитьМетку(СписокМеток, "package", ИмяПакета);
ДобавитьМетку(СписокМеток, "feature", ИмяФичи);
ДобавитьМетку(СписокМеток, "story", ИмяСтори);

// при заполнении параметров в ОписаниеШага.parameters тесты перестают быть видны в отчете Аллюр :(
//Параметры = ОписаниеШага.parameters;
//Для каждого Параметр Из РезультатШага.Параметры Цикл
// Параметры.Добавить("" + Параметр);
//КонецЦикла;
//КонецЦикла;

Возврат ОписаниеШага;
КонецФункции

Процедура ВставитьОписаниеСтатуса(Знач ОписаниеШага, Знач ОписаниеОшибки = "")
ОписаниеШага.Вставить("statusDetails",
Новый Структура("known, muted, flaky, message, trace",

ОписаниеШага.Вставить("statusDetails",
Новый Структура("known, muted, flaky, message, trace",
Ложь, Ложь, Ложь, ОписаниеОшибки, ""));
КонецПроцедуры

Expand All @@ -216,16 +218,16 @@
ИначеЕсли СостояниеШага = СостоянияТестов.НеРеализован Тогда
Рез = "skipped";
КонецЕсли;

Возврат Рез;
КонецФункции

Процедура ДобавитьМетку(Знач СписокМеток, Знач Имя, Знач Значение)

Метка = Новый Структура("name, value");
Метка.name = Имя;
Метка.value = Значение;

СписокМеток.Вставить(0, Метка);

КонецПроцедуры
Expand All @@ -234,13 +236,13 @@
// При внедрении в конфигурацию с режимом совместимости >= 8.3.6 данную функцию необходимо удалить
//
Функция СтрШаблон_(Знач СтрокаШаблон, Знач Парам1 = Неопределено, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено) Экспорт

МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Парам1);
МассивПараметров.Добавить(Парам2);
МассивПараметров.Добавить(Парам3);
МассивПараметров.Добавить(Парам4);

Для Сч = 1 По МассивПараметров.Количество() Цикл
ТекЗначение = МассивПараметров[Сч-1];
СтрокаШаблон = СтрЗаменить(СтрокаШаблон, "%"+Сч, Строка(ТекЗначение));
Expand All @@ -250,14 +252,14 @@

// задаю уникальное имя для возможности получения одного отчета allure по разным тестовым наборам
Функция ПолучитьУникальноеИмяФайла(Знач ПутьКОтчету)

Файл = Новый Файл(ПутьКОтчету);
ГУИД = Новый УникальныйИдентификатор;

ПутьКаталога = ?(Файл.Существует() И Файл.ЭтоКаталог(), Файл.ПолноеИмя, Файл.Путь);
ИмяФайла = СтрШаблон_("%1-result.json", ГУИД);
ИмяФайла = СтрШаблон_("%1/%2", ПутьКаталога, ИмяФайла);

ИмяФайла = СтрШаблон_("%1/%2", ПутьКаталога, ИмяФайла);

Возврат ИмяФайла;
КонецФункции
Expand All @@ -269,13 +271,13 @@
Сообщение = СтрШаблон_("%1
|Файл-результат для Allure 2 должен заканчиваться на ""-result.json""
|Иначе Allure не покажет результаты тестирования
|А сейчас имя файла %2",
|А сейчас имя файла %2",
Сообщение, Файл.ПолноеИмя);
КонецЕсли;
Если Файл.Расширение <> ".json" Тогда
Сообщение = СтрШаблон_("%1
|Файл-результат для Allure 2 должен иметь расширение ""json""
|Иначе Allure не покажет результаты тестирования",
|Иначе Allure не покажет результаты тестирования",
Сообщение);
КонецЕсли;
Если Не ПустаяСтрока (Сообщение) Тогда
Expand All @@ -284,14 +286,14 @@
КонецПроцедуры

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

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

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

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

// } Helpers
Expand Down
Loading

0 comments on commit ff256be

Please sign in to comment.