From a97b1ce90fd2daa0ee842132d0c16f3d10c48815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D0=BF=D1=80=D0=B0=D0=BB=D0=BE=D0=B2=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80?= Date: Sat, 7 Aug 2021 16:06:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20/=20=D0=A0=D0=B0=D0=B7=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=82=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VA-Тесты/templates/Шапка.feature | 2 +- Скрипты/1cicd.sbsl | 130 ++++++++++++++++++++++++++----- 2 files changed, 110 insertions(+), 22 deletions(-) diff --git a/VA-Тесты/templates/Шапка.feature b/VA-Тесты/templates/Шапка.feature index 114aa94..727f1e3 100644 --- a/VA-Тесты/templates/Шапка.feature +++ b/VA-Тесты/templates/Шапка.feature @@ -3,7 +3,7 @@ @tree #report.story=Пользователь "%ПредставлениеПользователя%" -Функциональность: Тесты под пользователем "%ПредставлениеПользователя%" +Функциональность: %Фича% - "%ПредставлениеПользователя%" Контекст: Дано я подключаю TestClient "%ПредставлениеПользователя%" логин "%ИмяПользователя%" пароль "%ПарольПользователя%" diff --git a/Скрипты/1cicd.sbsl b/Скрипты/1cicd.sbsl index 8aeb089..fc54e13 100644 --- a/Скрипты/1cicd.sbsl +++ b/Скрипты/1cicd.sbsl @@ -259,15 +259,15 @@ DumpExt(файлРасширения, репозиторий.Проект, строкаСоединения, исполняемыйФайлПлатформы) ; - пер списокДвоичныхФайлов = новый Массив() + пер списокФайловСсылок = новый Массив() знч каталогСборкиПроекта = новый Файл(CI_PROJECT_DIR) для файл из Файлы.Найти(ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ) знч путьВнутриСборки = файл.Путь.Удалить(каталогСборкиПроекта.Путь) - списокДвоичныхФайлов.Добавить(путьВнутриСборки) + списокФайловСсылок.Добавить(новый ОписаниеФайлаСсылкиАссетов(файл.Имя, путьВнутриСборки)) ; знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_bin.json" Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID") - ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокДвоичныхФайлов) + ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокФайловСсылок) знч логФайлыРабочейОбласти = "%WP/.metadata/" пер настройкиПоиска = новый НастройкиПоискаФайлов() @@ -483,15 +483,15 @@ DumpExt(файлРасширения, репозиторий.Проект, строкаСоединения, исполняемыйФайлПлатформы) ; - пер списокДвоичныхФайлов = новый Массив() + пер списокФайловСсылок = новый Массив() знч каталогСборкиПроекта = новый Файл(CI_PROJECT_DIR) для файл из Файлы.Найти(ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ) знч путьВнутриСборки = файл.Путь.Удалить(каталогСборкиПроекта.Путь) - списокДвоичныхФайлов.Добавить(путьВнутриСборки) + списокФайловСсылок.Добавить(новый ОписаниеФайлаСсылкиАссетов(файл.Имя, путьВнутриСборки)) ; знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_bin.json" Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID") - ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокДвоичныхФайлов) + ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокФайловСсылок) знч логФайлыРабочейОбласти = "%WP/.metadata/" пер настройкиПоиска = новый НастройкиПоискаФайлов() @@ -929,6 +929,7 @@ исп потокФайлаАвтофичи = файлАвтофичи.ОткрытьПотокЧтения() пер чтениеФайлаАвтофичи = новый ЧтениеДанных(потокФайлаАвтофичи) + // TODO: Отладка пока не чтениеФайлаАвтофичи.ЧтениеЗавершено() знч строкаФайла = чтениеФайлаАвтофичи.ПрочитатьСтроку("cp1251") если строкаФайла.Пусто() @@ -957,6 +958,7 @@ для пользователь из настройкиАвтофич.Шаблоны.Пользователи для автофича из автофичи пер текстФичи = текстШаблонаШапки + текстФичи = текстФичи.Заменить("\%Фича\%", автофича.Ключ) текстФичи = текстФичи.Заменить("\%ПредставлениеПользователя\%", пользователь.Представление) текстФичи = текстФичи.Заменить("\%ИмяПользователя\%", пользователь.Имя) текстФичи = текстФичи.Заменить("\%ПарольПользователя\%", пользователь.Пароль) @@ -1259,11 +1261,43 @@ AllureGenerate(настройкиАвтофич) ; - пер списокДвоичныхФайлов = новый Массив() - списокДвоичныхФайлов.Добавить("/public/index.html") + пер списокФайловСсылок = новый Массив() + пер тестовВсего = 0 + пер тестовНеПрошло = 0 + пер тестовПропущено = 0 + + знч полныйПутьРезультатовТестов = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_РЕЗУЛЬТАТОВ_ТЕСТОВ/junit/" + пер настройкиПоискаФайлов = новый НастройкиПоискаФайлов() + настройкиПоискаФайлов.ИмяСодержит(".xml") + знч найденныеФайлы = Файлы.Найти(полныйПутьРезультатовТестов, настройкиПоискаФайлов) + пер индексТеста = 1 + для найденныйФайл из найденныеФайлы + если не найденныйФайл.Имя.НачинаетсяС("junit") + продолжить + ; + знч тестыJunit = ПрочитатьОшибкиВФорматеJUnit(найденныйФайл.Путь) + для testSuite из тестыJunit.testSuites + тестовВсего += testSuite.tests + тестовНеПрошло += testSuite.failures + тестовПропущено += testSuite.skipped + + если testSuite.errors == 0 и testSuite.failures == 0 + продолжить + ; + + знч представлениеТестов = "Тесты %{testSuite.name}: всего %{testSuite.tests}, не прошло %{testSuite.failures}, пропущено %{testSuite.skipped}" + знч ссылкаТеста = "/public/index.html#behaviors/%индексТеста" + списокФайловСсылок.Добавить(новый ОписаниеФайлаСсылкиАссетов(представлениеТестов, ссылкаТеста)) + индексТеста += 1 + ; + ; + + списокФайловСсылок.Вставить(0, новый ОписаниеФайлаСсылкиАссетов("Все тесты: всего %тестовВсего, не прошло %тестовНеПрошло, пропущено %тестовПропущено", "/public/index.html")) + + знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_pages.json" Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID") - ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокДвоичныхФайлов) + ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокФайловСсылок) ; метод ОпубликоватьРелиз() @@ -1282,19 +1316,19 @@ пер ссылки = новый Массив() знч описаниеАссетовBin = ПрочитатьОписаниеАссетов("%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_bin.json") - для имяФайла из описаниеАссетовBin.списокДвоичныхФайлов - знч файлДляУрл = имяФайла.Заменить("\\", "/") - знч файл = новый Файл(имяФайла) + для данныеФайла из описаниеАссетовBin.списокФайловСсылок + знч файлДляУрл = данныеФайла.путь.Заменить("\\", "/") + знч файл = новый Файл(данныеФайла.путь) знч урлАссерта = "https://%CI_SERVER_HOST/%{описаниеАссетовBin.имяПроекта}/-/jobs/%{описаниеАссетовBin.идЗадания}/artifacts/raw%файлДляУрл" - знч ассерт = новый Releases_Create_Assets_Link_Data(файл.Имя, урлАссерта) + знч ассерт = новый Releases_Create_Assets_Link_Data(данныеФайла.имя, урлАссерта) ссылки.Добавить(ассерт) ; знч описаниеАссетовPages = ПрочитатьОписаниеАссетов("%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_pages.json") - для имяФайла из описаниеАссетовPages.списокДвоичныхФайлов - знч файлДляУрл = имяФайла.Заменить("\\", "/") - знч файл = новый Файл(имяФайла) + для данныеФайла из описаниеАссетовPages.списокФайловСсылок + знч файлДляУрл = данныеФайла.путь.Заменить("\\", "/") + знч файл = новый Файл(данныеФайла.путь) знч урлАссерта = "https://%CI_SERVER_HOST/%{описаниеАссетовPages.имяПроекта}/-/jobs/%{описаниеАссетовPages.идЗадания}/artifacts/file%файлДляУрл" - знч ассерт = новый Releases_Create_Assets_Link_Data("Allure Report", урлАссерта) + знч ассерт = новый Releases_Create_Assets_Link_Data(данныеФайла.имя, урлАссерта) ссылки.Добавить(ассерт) ; @@ -2195,6 +2229,46 @@ ; +структура ОписаниеJunitTestSuites + пер testSuites: Массив +; + +структура ОписаниеJunitTestSuite + пер name: Строка + пер tests: Число + пер errors: Число + пер skipped: Число + пер failures: Число + пер time: Число +; + +метод ПрочитатьОшибкиВФорматеJUnit(файлJUnit: Строка): ОписаниеJunitTestSuites + знч файл = новый Файл(файлJUnit) + исп поток = файл.ОткрытьПотокЧтения() + + пер testSuites = новый Массив() + пер потокXml = новый ЧтениеXml(поток) + пока потокXml.Следующий() + если потокXml.ВидУзла != ВидУзлаXml.НачалоЭлемента + продолжить + ; + если потокXml.Имя == "testsuite" + знч name = потокXml.ЗначениеАтрибута("name") + знч tests = Число(потокXml.ЗначениеАтрибута("tests")) + знч errors = Число(потокXml.ЗначениеАтрибута("errors")) + знч skipped = Число(потокXml.ЗначениеАтрибута("skipped")) + знч failures = Число(потокXml.ЗначениеАтрибута("failures")) + знч time = Число(потокXml.ЗначениеАтрибута("time")) + пер testSuite = новый ОписаниеJunitTestSuite(name, tests, errors, skipped, failures, time) + testSuites.Добавить(testSuite) + ; + ; + + пер ошибкиJunit = новый ОписаниеJunitTestSuites(testSuites) + + возврат ошибкиJunit +; + метод ОшибкиВФорматеSonarCube(файлРезультатовВалидации: Строка): SonarqubeGenericFormat знч файл = новый Файл(файлРезультатовВалидации) исп поток = файл.ОткрытьПотокЧтения() @@ -2485,10 +2559,15 @@ конструктор(name, url) ; +структура ОписаниеФайлаСсылкиАссетов + пер имя: Строка + пер путь: Строка +; + структура ОписаниеАссетов пер имяПроекта: Строка пер идЗадания: Строка - пер списокДвоичныхФайлов: Массив + пер списокФайловСсылок: Массив ; @@ -2685,8 +2764,8 @@ возврат новый ДатаВремя(релизы[0]["created_at"].Подстрока(0, 19)) ; -метод ЗаписатьОписаниеАссетов(файлОписанияАссертов: Строка, имяПроекта: Строка, идЗадания: Строка, списокДвоичныхФайлов: Массив) - знч описаниеАссетов = новый ОписаниеАссетов(имяПроекта, идЗадания, списокДвоичныхФайлов) +метод ЗаписатьОписаниеАссетов(файлОписанияАссертов: Строка, имяПроекта: Строка, идЗадания: Строка, списокФайловСсылок: Массив) + знч описаниеАссетов = новый ОписаниеАссетов(имяПроекта, идЗадания, списокФайловСсылок) знч файлПараметров = новый Файл(файлОписанияАссертов) исп поток = файлПараметров.ОткрытьПотокЗаписи() @@ -2697,7 +2776,16 @@ знч файл = новый Файл(файлОписанияАссертов) исп поток = файл.ОткрытьПотокЧтения() - возврат СериализацияJson.ПрочитатьОбъект(поток, Тип(ОписаниеАссетов)) как ОписаниеАссетов + пер описаниеАссетов = СериализацияJson.ПрочитатьОбъект(поток, Тип(ОписаниеАссетов)) как ОписаниеАссетов + + пер файлыСсылки = новый Массив() + для файлСсылка из описаниеАссетов.списокФайловСсылок + знч описаниеФайлаСсылки = новый ОписаниеФайлаСсылкиАссетов(файлСсылка["имя"], файлСсылка["путь"]) + файлыСсылки.Добавить(описаниеФайлаСсылки) + ; + описаниеАссетов.списокФайловСсылок = файлыСсылки + + возврат описаниеАссетов ; метод Commits_List_Data_НастройкиЗаписиJson(данные: Commits_List_Data): НастройкиЗаписиОбъектовJson