Исправлены выявленные ошибки

1. Добавлена возможность принудительно выключить использование ибкмд для КомандаВраннер, и выключено для команд которые не поддерживают работу через ибкмд (на текущий момент исполнение таких команд просто падает т.к нет парамера "--ibcmd")
2. В случае выгрузки исходников через ибкмд добавлена принудительная очистка каталога выгрузки, т.к в ином случае ibcmd не выгружает
3. Для тестов добавлена поддержка размещения во вложенных каталогах, так же учитвается при сборке\разборке единичного теста, для всех тестов работает на уровне vrunner
4. Исправлена синтаксическая ошибка в детальке ibmcd -> ibcmd
5. Исправлена ошибка при обработке очереди заданий, в случае если очередь была пуста, то не было паузы в обработке очереди, в следствии чего оно в пустую потребляло ядро и жрало память
6. В логе консоли пропадала часть сообщения из-за того что часть используемых инструментов делали перевод строки через возврат каретки
7. Представление полного пути до теста канонизировано разделителями путей для используемой операционной системы
8. Для вьюхи тестов добавлен перенос текста для полей Имя, Обработка, Каталог исходников, ранее при длинных путях просто улетало за границы монитора
9. Парсер junit так же адаптирован для для хранения тестов во вложенном дереве каталогов
This commit is contained in:
sfaqer
2024-10-17 15:16:18 +10:00
parent c3cb9ece4e
commit 9b86e99126
12 changed files with 124 additions and 46 deletions
+1
View File
@@ -6,3 +6,4 @@ tests/features/ib/1Cv8Log
tests/features/ib/1Cv8JobScheduler
*.cfl
*.ospx
oscript_modules/*
@@ -16,6 +16,7 @@
Возврат Команда.ДобавитьПараметр("designer")
.ДобавитьПараметр("--no-wait")
.ВыключитьИБКМД()
.Исполнить();
КонецФункции
@@ -6,6 +6,8 @@
Перем ПередВыполнением;
Перем ПослеВыполнения;
Перем ВыключитьИБКМД;
&Желудь
&Характер("Компанейский")
Процедура ПриСозданииОбъекта(&Пластилин НастройкиРабочейОбласти)
@@ -18,6 +20,8 @@
ПередВыполнением = Новый Массив;
ПослеВыполнения = Новый Массив;
ВыключитьИБКМД = Ложь;
КонецПроцедуры
Функция ДобавитьПередВыполнением(Действие, Параметры = Неопределено) Экспорт
@@ -41,6 +45,11 @@
Возврат ЭтотОбъект;
КонецФункции
Функция ВыключитьИБКМД() Экспорт
ВыключитьИБКМД = Истина;
Возврат ЭтотОбъект;
КонецФункции
Процедура ПередИсполнением()
ОбработатьПодписки(ПередВыполнением);
КонецПроцедуры
@@ -70,7 +79,7 @@
Если НЕ ЗначениеЗаполнено(Настройки.СтрокаПодключения) Тогда
ВызватьИсключение "Не указана строка подключения";
КонецЕсли;
Команда.ДобавитьПараметр("--ibconnection " + Настройки.СтрокаПодключения);
Если ЗначениеЗаполнено(Настройки.ВерсияПлатформы) Тогда
@@ -85,7 +94,7 @@
Команда.ДобавитьПараметр("--db-pwd " + Настройки.Пароль);
КонецЕсли;
Если Настройки.ИБКМД = Истина Тогда
Если Не ВыключитьИБКМД И Настройки.ИБКМД = Истина Тогда
Команда.ДобавитьПараметр("--ibcmd");
КонецЕсли;
@@ -99,4 +108,4 @@
Возврат Команда.ПолучитьВывод();
КонецФункции
КонецФункции
@@ -1,3 +1,5 @@
#Использовать fs
&Пластилин
Перем НастройкиПроекта;
@@ -5,9 +7,11 @@
&Пластилин
Перем КомандаВраннер;
Перем Настройки;
&Желудь
Процедура ПриСозданииОбъекта()
Процедура ПриСозданииОбъекта(&Пластилин НастройкиРабочейОбласти)
Настройки = НастройкиРабочейОбласти;
КонецПроцедуры
Функция РазобратьКонфигурацию() Экспорт
@@ -16,6 +20,11 @@
ВызватьИсключение "Не указан каталог конфигурации";
КонецЕсли;
// Для ИБКМД нужно предварительно очистить каталог выгрузки
Если Настройки.ИБКМД = Истина Тогда
ФС.ОбеспечитьПустойКаталог(КаталогКонфигурации);
КонецЕсли;
Команда = КомандаВраннер.Достать();
Команда.ДобавитьПараметр("decompile")
@@ -48,6 +57,11 @@
ВызватьИсключение "Не указан каталог расширения " + ИмяРасширения;
КонецЕсли;
// Для ИБКМД нужно предварительно очистить каталог выгрузки
Если Настройки.ИБКМД = Истина Тогда
ФС.ОбеспечитьПустойКаталог(Каталог);
КонецЕсли;
Команда = КомандаВраннер.Достать();
Команда.ДобавитьПараметр("decompileext")
@@ -83,7 +97,8 @@
Команда.ДобавитьПараметр("compileepf")
.ДобавитьПараметр(КаталогИсходников)
.ДобавитьПараметр(КаталогБинарников);
.ДобавитьПараметр(КаталогБинарников)
.ВыключитьИБКМД();
Возврат Команда.Исполнить();
@@ -95,7 +110,8 @@
Команда.ДобавитьПараметр("decompileepf")
.ДобавитьПараметр(КаталогБинарников)
.ДобавитьПараметр(КаталогИсходников);
.ДобавитьПараметр(КаталогИсходников)
.ВыключитьИБКМД();
Возврат Команда.Исполнить();
@@ -42,7 +42,14 @@
ВызватьИсключение СтрШаблон("Для %1 нет исходников", ИмяОбработки);
КонецЕсли;
Возврат КомпиляторИсходников.СобратьОбработку(Обработка.ПутьИсходников, КаталогБинарников);
Возврат КомпиляторИсходников.СобратьОбработку(
Обработка.ПутьИсходников,
ОбъединитьПути(
КаталогБинарников,
ФС.ОтносительныйПуть(КаталогИсходников, Новый Файл(Обработка.ПутьИсходников).Путь)
)
);
КонецФункции
Функция Разобрать(ИмяОбработки) Экспорт
@@ -52,8 +59,15 @@
Если Обработка.ПутьБинарника = Неопределено Тогда
ВызватьИсключение СтрШаблон("Для %1 нет бинарника", ИмяОбработки);
КонецЕсли;
Возврат КомпиляторИсходников.РазобратьОбработку(
Обработка.ПутьБинарника,
ОбъединитьПути(
КаталогИсходников,
ФС.ОтносительныйПуть(КаталогБинарников, Новый Файл(Обработка.ПутьБинарника).Путь)
)
);
Возврат КомпиляторИсходников.РазобратьОбработку(Обработка.ПутьБинарника, КаталогИсходников);
КонецФункции
Функция СтрокаПоИмени(ИмяОбработки) Экспорт
@@ -83,9 +97,13 @@
КонецПроцедуры
Процедура ПрочитатьИсходники()
Процедура ПрочитатьИсходники(Каталог = Неопределено)
КаталогиИсходниковОбработок = НайтиФайлы(КаталогИсходников, "*");
Если ПустаяСтрока(Каталог) Тогда
Каталог = КаталогИсходников;
КонецЕсли;
КаталогиИсходниковОбработок = НайтиФайлы(Каталог, "*");
Для Каждого КаталогИсходниковОбработки Из КаталогиИсходниковОбработок Цикл
@@ -93,8 +111,12 @@
Продолжить;
КонецЕсли;
Строка = СтрокаПоИмени(КаталогИсходниковОбработки.Имя);
Строка.ПутьИсходников = КаталогИсходниковОбработки.ПолноеИмя;
Если НайтиФайлы(КаталогИсходниковОбработки.ПолноеИмя, "*.xml").Количество() = 0 Тогда
ПрочитатьИсходники(КаталогИсходниковОбработки.ПолноеИмя);
Иначе
Строка = СтрокаПоИмени(КаталогИсходниковОбработки.Имя);
Строка.ПутьИсходников = КаталогИсходниковОбработки.ПолноеИмя;
КонецЕсли;
КонецЦикла;
@@ -102,7 +124,7 @@
Процедура ПрочитатьБинарники()
БинарныеОбработки = НайтиФайлы(КаталогБинарников, "*.epf");
БинарныеОбработки = НайтиФайлы(КаталогБинарников, "*.epf", Истина);
Для Каждого БинарнаяОбработка Из БинарныеОбработки Цикл
Строка = СтрокаПоИмени(БинарнаяОбработка.ИмяБезРасширения);
@@ -10,7 +10,7 @@
&Деталька(Значение = "bootstrapper.v8version", ЗначениеПоУмолчанию = "")
Перем ВерсияПлатформы Экспорт;
&Деталька(Значение = "bootstrapper.ibmcd", ЗначениеПоУмолчанию = Ложь)
&Деталька(Значение = "bootstrapper.ibcmd", ЗначениеПоУмолчанию = Ложь)
Перем ИБКМД Экспорт;
&Деталька(Значение = "bootstrapper.bslls", ЗначениеПоУмолчанию = "")
@@ -61,9 +61,10 @@
ЖурналСобытий.Ошибка(ТекстОшибки);
КонецПопытки;
ОчередьЗаданий.Удалить(Задание);
Приостановить(1000);
КонецЕсли;
Приостановить(1000);
ОчередьОбрабатывается = Ложь;
@@ -40,7 +40,12 @@
КонецПроцедуры
Функция ОформитьТекстЛога(Текст)
Функция ОформитьТекстЛога(Знач Текст)
Текст = СтрЗаменить(Текст, Символы.ПС, "<br>");
Текст = СтрЗаменить(Текст, Символы.ВК, "<br>");
Шаблон = ("<span style=""text-wrap: wrap;"" >%1</span><br>");
Возврат СтрШаблон(Шаблон, СтрЗаменить(Текст, Символы.ПС, "<br>"));
КонецФункции
Возврат СтрШаблон(Шаблон, Текст);
КонецФункции
@@ -6,7 +6,14 @@
<button hx-post="/vanessaadd/cmd/compileall" hx-swap="none" type="button" class="btn cur-p btn-outline-primary" >Собрать все</button>
<button hx-post="/vanessaadd/cmd/decompileall" hx-swap="none" type="button" class="btn cur-p btn-outline-primary">Разобрать все</button>
<br><br>
<table class="table table-hover">
<table class="table table-hover" style="table-layout: fixed;">
<colgroup>
<col span="1" style="width: 50px;">
<col span="1" style="width: 30%;">
<col span="1" style="width: 150px;">
<col span="2" style="width: 35%;">
</colgroup>
<thead>
<tr>
<th scope="col">#</th>
@@ -22,7 +29,7 @@
Для Каждого Обработка из Модель.ТаблицаОбработок Цикл %}
<tr>
<th scope="row">{{ Счетчик }}</th>
<td>{{ Обработка.Имя }}</td>
<td style="word-wrap: break-word;">{{ Обработка.Имя }}</td>
<td>
<div class="btn-group mT-20">
<button hx-post="/vanessaadd/cmd/runTest/{{ Обработка.Имя }}" hx-swap="none" type="button" class="btn cur-p btn-outline-primary">Запустить</button>
@@ -37,8 +44,8 @@
</div>
</div>
</td>
<td>{{ Обработка.ПутьБинарника }}</td>
<td>{{ Обработка.ПутьИсходников }}</td>
<td style="word-wrap: break-word;">{{ Обработка.ПутьБинарника }}</td>
<td style="word-wrap: break-word;">{{ Обработка.ПутьИсходников }}</td>
</tr>
{% Счетчик = Счетчик + 1;
КонецЦикла; %}
@@ -28,7 +28,7 @@
<h6 class="c-grey-900">
<span class="icon-holder"></span>
<i class="{{?(ДеталиТеста.Успешно, "c-green-500 ti-check", ?(ДеталиТеста.Пропущен = 1, "c-blue-500 ti-more-alt", "c-red-500 ti-close" ))}}"></i>
</span>{{ ДеталиТеста.Набор }}/{{ ДеталиТеста.Тест }}</h6>
</span>{{ ОбъединитьПути(ДеталиТеста.Набор, ДеталиТеста.Тест) }}</h6>
<div class="mT-30">
<form>
<div class="row">
@@ -103,21 +103,19 @@
ФС.ОбеспечитьКаталог(КаталогОтчета);
Команда = ФабрикаКоманд.Достать();
Команда.ДобавитьПараметр("xunit");
Команда.ДобавитьПараметр(Каталог);
Команда.ДобавитьПараметр("--xdddebug");
Команда.ДобавитьПараметр(СтрШаблон("--reportsxunit ""ГенераторОтчетаJUnitXML{%1/junit.xml}""", КаталогОтчета));
Команда.ДобавитьПараметр(СтрШаблон("--xddExitCodePath ""%1/ExitCode.txt""", КаталогОтчета));
Команда.ДобавитьПараметр("--testclient-additional ""/iTaxi""");
ИмяФайлаМетаданных = ОбъединитьПути(КаталогОтчета, ИмяФайлаМетаданных());
Команда.ДобавитьПередВыполнением(Новый Действие(ЭтотОбъект, "ЗаписатьДополнительныеДанные"),
Новый Структура("ИмяФайла, Данные", ИмяФайлаМетаданных, МетаданныеОтчета.Данные));
Возврат Команда;
Возврат ФабрикаКоманд.Достать()
.ДобавитьПараметр("xunit")
.ДобавитьПараметр(Каталог)
.ДобавитьПараметр("--xdddebug")
.ДобавитьПараметр(СтрШаблон("--reportsxunit ""ГенераторОтчетаJUnitXML{%1/junit.xml}""", КаталогОтчета))
.ДобавитьПараметр(СтрШаблон("--xddExitCodePath ""%1/ExitCode.txt""", КаталогОтчета))
.ДобавитьПараметр("--testclient-additional ""/iTaxi""")
.ДобавитьПередВыполнением(
Новый Действие(ЭтотОбъект, "ЗаписатьДополнительныеДанные"),
Новый Структура("ИмяФайла, Данные", ИмяФайлаМетаданных, МетаданныеОтчета.Данные))
.ВыключитьИБКМД();
КонецФункции
@@ -76,7 +76,7 @@
ФайлыРезультатов = НайтиФайлы(Каталог, "*.xml");
Для каждого ФайлРезультата Из ФайлыРезультатов Цикл
ЗаполнитьРезультатТетстаИзФайла(Детали.Добавить(), ФайлРезультата);
ЗаполнитьРезультатТестаИзФайла(Детали, ФайлРезультата);
КонецЦикла;
Результат.Детали = Детали;
@@ -90,18 +90,36 @@
Возврат Результат;
КонецФункции
Процедура ЗаполнитьРезультатТетстаИзФайла(Результат, Файл)
Процедура ЗаполнитьРезультатТестаИзФайла(Данные, Файл)
СодержаниеФайла = ПроцессорХМЛ.ПрочитатьИзФайла(Файл.ПолноеИмя);
Для каждого ТестовыйНабор Из СодержаниеФайла["testsuites"]._Элементы Цикл
ЗаполнитьРезультатТестаИзТестовогоНабора(ТестовыйНабор, Данные);
КонецЦикла;
ИмяНабора = ТестовыйНабор.Значение._Атрибуты["name"];
Для каждого ЭлементНабора Из ТестовыйНабор.Значение._Элементы Цикл
Для каждого ТестКейс Из ЭлементНабора.Значение._Элементы Цикл
ЗаполнитьРезультатПоТестКейсу(Результат, ТестКейс.Значение, ИмяНабора);
КонецПроцедуры
Процедура ЗаполнитьРезультатТестаИзТестовогоНабора(ТестовыйНабор, Данные, Знач ИмяНабора = "")
Если ТестовыйНабор.Ключ = "testcase" Тогда
ЗаполнитьРезультатПоТестКейсу(Данные.Добавить(), ТестовыйНабор.Значение, ИмяНабора);
Возврат;
КонецЕсли;
ИмяНабора = ОбъединитьПути(ИмяНабора, ТестовыйНабор.Значение._Атрибуты["name"]);
Для каждого ЭлементНабора Из ТестовыйНабор.Значение._Элементы Цикл
Если ТипЗнч(ЭлементНабора) = Тип("Соответствие") Тогда
Для каждого ВложенныйЭлементНабора Из ЭлементНабора Цикл
ЗаполнитьРезультатТестаИзТестовогоНабора(ВложенныйЭлементНабора, Данные, ИмяНабора);
КонецЦикла;
КонецЦикла;
Иначе
ЗаполнитьРезультатТестаИзТестовогоНабора(ЭлементНабора, Данные, ИмяНабора);
КонецЕсли;
КонецЦикла;
@@ -110,7 +128,7 @@
Процедура ЗаполнитьРезультатПоТестКейсу(Результат, ТестКейс, ИмяНабора)
Атрибуты = ТестКейс._Атрибуты;
Результат.Набор = ИмяНабора;
Результат.Тест = Атрибуты["classname"] + "/" + Атрибуты["name"];
Результат.Тест = ОбъединитьПути(Атрибуты["classname"], Атрибуты["name"]);
Результат.Статус = Атрибуты["status"];
Результат.Ошибка = СтатусЭтоОшибка(Атрибуты["status"]);
Результат.Пропущен = СтатусЭтоПропущен(Атрибуты["status"]);