Обработка для подготовки файла настройки дымовых тестов измененных объектов конфигурации

09.10.23

Разработка - Тестирование QA

В статье приведен пример обработки, которая на основании измененных файлов git-репозитория готовит специальный файл настройки xUnitParams.json для последующего выполнения дымовых тестов (xUnitFor1C/add) только для измененных объектов конфигурации

Скачать исходный код

Наименование Файл Версия Размер
Подготовка файла настройки дымовых тестов
.epf 9,16Kb
5
.epf 1.03 9,16Kb 5 Скачать

Описанное решение может оказаться полезным в случаях, когда на этапе автоматического тестирования (процесса CI) нет необходимости в покрытии дымовыми тестами всей функциональности системы. Достаточно проверить на безошибочное выполнение основных операций и интерактивных действий измененных в процессе доработки объектов. При этом отбор объектов для тестирования нужно выполнить также в автоматическом режиме.

Настройки/профили запуска обработки тестирования в консольном режиме подробно описаны в документации к библиотеке Vanessa-ADD. Предметом нашего внимания является специальный файл настройки xUnitParams.json, используемый совместно с ключом "--xddConfig": 

vrunner xunit $addRoot/tests/smoke --settings tools\vrunner.json --xddConfig ./tools/JSON/xUnitParams.json

Для подготовки специального файла настройки в ручном режиме можно воспользоваться обработкой УправлениеДымовымиТестами.epf из состава библиотеки Vanessa-ADD:

 

Чтобы сформировать такой файл настройки в автоматическом режиме, для начала нужно получить информацию из git по измененным объектам конфигурации. Для этого мы используем файл-выборку sonar_files, подготовленный в рамках CI для системы статического анализа кода SonarQube:

src/Documents/АвансовыйОтчет/ManagerModule.bsl
src/Documents/ПеремещениеТоваров/ManagerModule.bsl

Чтобы провести выборочные дымовые тесты только для доработанных в конфигурации объектов (к примеру - открытие формы списка, формы нового и формы существующего документа) необходимо удалить два наших документа из состава исключаемых для тестирования объектов в файле xUnitParams.json. Это нужно сделать в списках веток интересующих нас операций открытия форм ("Списки", "Новые" и "Существующие").

Файл настройки xUnitParams.json без доработанных объектов должен выглядеть примерно так:


Для автоматического формирования файла настройки xUnitParams.json была написана обработка, которая используется при пакетном запуске 1С и применима для любой конфигурации. Обработка получает параметром полный путь к исходному файлу (sonar_files) в формате:
1cv8.exe /execute "<путь к обработке>\icl_СозданиеФайлаНастроекДымовыхТестов(безBOM)"/C"<путь к файлу>\sonar_files" .
Обработка содержит в себе форму, которая открывается при запуске 1С, текстовый макет, в котором находится содержимое файла xUnitParams, и строки, которые автоматически заменяются на названия коллекций метаданных:


При открытии форма получает макет xUnitParams, собирает метаданные и заменяет строки, обозначенные символом &, на собранные коллекции метаданных.

Содержимое макета xUnitParams:

{
"smoke": {
"Справочники": {
"Списки": [
&СправочникиИсключения
],
"Новые": [
&СправочникиИсключения
],
"Существующие": [
&СправочникиИсключения
]
},
"Обработки": [
&ОбработкиИсключения
],
"ОткрываемФормыНаКлиентеТестирования": true,
"Документы": {
"Списки": [
&ДокументыИсключения
],
"Новые": [
&ДокументыИсключения
],
"Существующие": [
&ДокументыИсключения
]
},
"Используется": true,
"Отчеты": [
&ОтчетыИсключения
],
"БизнесПроцессы": [
&БизнесПроцессыИсключения
]
},
"МодальныеОкна": {
"ШаблонПомощника": {
"Поля": [
"*Закрыть *?"
],
"Заголовки": [
"* Шаблон *"
],
"Кнопка": 0
}
},
"МакетыСКД": {
"Используется": false,
"ИсключенияОбщихМакетов": [],
"ИсключенияПоИмениМетаданных": []
},
"CommandInterface": {
"Используется": false,
"Документы": [],
"Разделы": [],
"СтрогийПорядокВыполнения": true,
"Обработки": [],
"Справочники": [],
"Отчеты": [],
"ОбщиеКоманды": [
"Удалить*",
"ЗагрузитьДанныеИзФайла",
"СверткаИнформационнойБазы",
"УдалениеПомеченныхОбъектов"
],
"БизнесПроцессы": []
},
"ФормированиеПечатныхФорм": {
"Используется": false,
"ИсключенияПоОбъекту": [],
"КоличествоДокументов": 2,
"ИсключенияПоИдентификатору": [
"Комплект*"
]
},
"ПроведениеДокументов": {
"Используется": true,
"КоличествоДокументов": 2,
"Исключения": [
&ДокументыИсключенияПроведения
]
}
}

   

Код модуля формы содержит методы:

 

При открытии окна считываем файл sonar_files (ЧтениеТекста), далее готовим данные считыванием макета, собираем метаданные для списков исключений, записываем результирующие данные в файл json:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если Не ЗначениеЗаполнено(ПараметрЗапуска) Тогда
		ЗавершитьРаботуСистемы(Ложь);
	КонецЕсли;
	
	Файл = Новый Файл(ПараметрЗапуска);
	Если Не Файл.Существует() Тогда
		ЗавершитьРаботуСистемы(Ложь);
	КонецЕсли;
	
	ПутьКФайлу = Файл.Путь;
	
	// чтение шаблона
	ЧтениеТекста = Новый ЧтениеТекста(Файл.ПолноеИмя, КодировкаТекста.UTF8);
	Настройки = ЧтениеТекста.Прочитать();
	ЧтениеТекста.Закрыть();
	
	// путь к файлу настроек
	ИмяФайла = Файл.Путь + "xUnitParams.json";
	
	// чтение файла шаблона
	ВременнаяПапка = Файл.Путь + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
	СоздатьКаталог(ВременнаяПапка);
	ИмяФайлаТмп = ВременнаяПапка + "\xUnitParams.json.tmp";

	// получаем данные файла настроек
	Данные = ПолучитьДанные(Настройки);
	
	ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаТмп, КодировкаТекста.UTF8, , Ложь);
	ЗаписьТекста.Записать(Данные);
	ЗаписьТекста.Закрыть();
	
	// преобразование кодировки
	МассивФайлов = Новый Массив;
	УбитьBOM(ИмяФайлаТмп, ИмяФайла, ВременнаяПапка, МассивФайлов);
	УдалитьФайлы(ВременнаяПапка);
	
	// безусловное завершение работы системы, т.к. запуск обработки происходит из командной строки 1С
	ЗавершитьРаботуСистемы(Ложь);
	
КонецПроцедуры

 

Код функции ПолучитьДанные:

&НаСервере
Функция ПолучитьДанные(Настройки)
	
	ТекстМакета = РеквизитФормыВЗначение("Объект").ПолучитьМакет("xUnitParams").ПолучитьТекст();
	
	СправочникиИсключения = ПолучитьСправочникиИсключения(Настройки);
	ДокументыИсключения = ПолучитьДокументыИсключения(Настройки);
	ОбработкиИсключения = ПолучитьОбработкиИсключения(Настройки);
	ОтчетыИсключения = ПолучитьОтчетыИсключения(Настройки);
	БизнесПроцессыИсключения = ПолучитьБизнесПроцессыИсключения(Настройки);
	ДокументыИсключенияПроведения = ДокументыИсключения;
	
	ТекстМакета = СтрЗаменить(ТекстМакета, "&ДокументыИсключенияПроведения", ДокументыИсключенияПроведения);
	ТекстМакета = СтрЗаменить(ТекстМакета, "&СправочникиИсключения", СправочникиИсключения);
	ТекстМакета = СтрЗаменить(ТекстМакета, "&ДокументыИсключения", ДокументыИсключения);
	ТекстМакета = СтрЗаменить(ТекстМакета, "&ОбработкиИсключения", ОбработкиИсключения);
	ТекстМакета = СтрЗаменить(ТекстМакета, "&ОтчетыИсключения", ОтчетыИсключения);
	ТекстМакета = СтрЗаменить(ТекстМакета, "&БизнесПроцессыИсключения", БизнесПроцессыИсключения);
	
	Возврат ТекстМакета;
	
КонецФункции

 

Функции получения списков объектов для исключений будут идентичны:

- список справочников:


&НаСервереБезКонтекста
Функция ПолучитьСправочникиИсключения(Настройки)
	
	Результат = "";
	Для Каждого Описание Из Метаданные.Справочники Цикл
		СтрокаПоиска = "Catalogs/" + Описание.Имя + "/";
		Если СтрНайти(Настройки, СтрокаПоиска) > 0 Тогда
			Продолжить;
		КонецЕсли;
		Результат = Результат + ?(ПустаяСтрока(Результат), "", "," + Символы.ПС) + """" + Описание.Имя + """";
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

- список документов:


&НаСервереБезКонтекста
Функция ПолучитьДокументыИсключения(Настройки)
	
	Результат = "";
	Для Каждого Описание Из Метаданные.Документы Цикл
		СтрокаПоиска = "Documents/" + Описание.Имя + "/";
		Если СтрНайти(Настройки, СтрокаПоиска) > 0 Тогда
			Продолжить;
		КонецЕсли;
		Результат = Результат + ?(ПустаяСтрока(Результат), "", "," + Символы.ПС) + """" + Описание.Имя + """";
		
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

- список обработок:


&НаСервереБезКонтекста
Функция ПолучитьОбработкиИсключения(Настройки)
	
	Результат = "";
	Для Каждого Описание Из Метаданные.Обработки Цикл
		СтрокаПоиска = "DataProcessors/" + Описание.Имя + "/";
		Если СтрНайти(Настройки, СтрокаПоиска) > 0 Тогда
			Продолжить;
		КонецЕсли;
		Результат = Результат + ?(ПустаяСтрока(Результат), "", "," + Символы.ПС) + """" + Описание.Имя + """";
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

- список отчетов:


&НаСервереБезКонтекста
Функция ПолучитьОтчетыИсключения(Настройки)
	
	Результат = "";
	Для Каждого Описание Из Метаданные.Отчеты Цикл
		СтрокаПоиска = "Reports/" + Описание.Имя  + "/";
		Если СтрНайти(Настройки, СтрокаПоиска) > 0 Тогда
			Продолжить;
		КонецЕсли;
		Результат = Результат + ?(ПустаяСтрока(Результат), "", "," + Символы.ПС) + """" + Описание.Имя + """";
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

- список бизнес-процессов:


&НаСервереБезКонтекста
Функция ПолучитьБизнесПроцессыИсключения(Настройки)
	
	Результат = "";
	Для Каждого Описание Из Метаданные.БизнесПроцессы Цикл
		СтрокаПоиска = "BusinessProcesses/" + Описание.Имя  + "/";
		Если СтрНайти(Настройки, СтрокаПоиска) > 0 Тогда
			Продолжить;
		КонецЕсли;                	
		Результат = Результат + ?(ПустаяСтрока(Результат), "", "," + Символы.ПС) + """" + Описание.Имя + """";
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

На процедуре УбитьBOM остановимся подробнее. Чтобы файл настройки xUnitParams.json был корректно обработан Jenkins и Vanessa-Runner, его потребовалось сформировать в кодировке UTF-8 без лидирующих меток порядка байтов (BOM-символы из стандарта Юникод). Для этого была использована доработанная обработка из статьи Андрея Чибидина :


// //infostart.ru/1c/articles/137454/
&НаКлиенте
Процедура УбитьBOM(Знач ИсходныйФайл, РезультирующийФайл, ВременнаяПапка, МассивФайлов = Неопределено)
    Если МассивФайлов = Неопределено Тогда
        МассивФайлов = Новый Массив;
    КонецЕсли;
    Бин = Новый ДвоичныеДанные(ИсходныйФайл);
    Размер = Бин.Размер();
    НовыйРазмер = Макс(Окр(Размер/2,0),3);
    Массив = РазделитьФайл(ИсходныйФайл,НовыйРазмер);
    Если Массив.Количество() = 2 Тогда
        МассивФайлов.Вставить(0,Массив[1]);
    КонецЕсли;
    Если НовыйРазмер = 3 Тогда
        ОбъединитьФайлы(МассивФайлов, РезультирующийФайл);
        УдалитьФайлы(ВременнаяПапка);
    Иначе
        УбитьBOM(Массив[0], РезультирующийФайл, ВременнаяПапка, МассивФайлов);
    КонецЕсли;
КонецПроцедуры

Далее помещаем полученный файл настройки в каталог инструмента vanessa-runner, при последующем запуске в Jenkins сценария дымового тестирования будут отработаны выбранные нами операции только для измененных в git-репозитории объектов.

обработка разработка автоматизация тестирование дымовые тесты smoke xUnitParams CI DevOps

См. также

Автотесты для типовых конфигураций ERP Управление предприятием 2 и Комплексная автоматизация 2 (для vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.15.111.

2220 руб.

04.07.2022    6990    26    1    

24

Системы контроля версий для 1С-разработчиков.

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Платформа 1С v8.3 Платные (руб)

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9471    78    4    

112

Управление сборкой. Расширение для конфигурации СППР

DevOps и автоматизация разработки Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Подсистема «Управление сборкой GLI» предназначена для динамического формирования сборочных линий Gitlab и отслеживания процесса доработок систем на базе1С:Предприятия Позволяет упростить выпуск новых релизов системы, подготовить описание доработок системы. Интегрируется с GitLab API по событиям Push, Merge-request, Pipeline. Уведомляет пользователей о результатах сборки/тестирования сборочных конвейеров через СВ, либо при её недоступности или отсутствию по E-Mail. Поможет при отправке исправлений ошибок в общую базу тестирования, сформирует запросы на слияние в ветку версии только по протестированному и подтверждённому функционалу. Подсистема рассчитана исключительно на клиент - серверную архитектуру тестовых ИБ. Поддерживаемая версии СППР 2.0.4.15, платформа не ниже 8.3.17.1549, 2.0.7.3 / не ниже 8.3.21.1664, начиная с релиза 1.0.4.30 требуется платформа не ниже 8.3.23 рекомендуемый релиз 8.3.23.1997

7000 руб.

26.08.2022    10844    7    5    

30

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Расширение для конфигураций 1С для автоматического подтверждения легальности обновления и выполнения обработчиков обновления при пакетном автоматическом обновлении большого числа баз 1С. А также сам модуль обработки по автоматическому обновлению баз.

2 стартмани

08.05.2019    24498    56    VPanin56    26    

28

Нагрузочное тестирование для определения производительности системы

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка с простым и понятным интерфейсом позволяет выполнить нагрузочное тестирование системы: появляется возможность понять, сколько документов записывается / проводится группой пользователей в текущей информационной системе и сколько будет проводиться / записываться в другой информационной системе. Таким образом, можно оценить потенциальный прирост производительности от перехода в другую систему по сравнению с текущей информационной системой (переход на новый сервер, переход от файловой базы к серверной и т.д.).

10 стартмани

08.04.2024    1278    3    user1527257    1    

4

Выполнение тестов и обработка их результатов в 1С: Тестировщик

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной статье мы рассмотрим имитацию действий пользователя 1С и протоколирование тестов в инструменте 1С: Тестировщик.

14.03.2024    1450    Koder_Line    1    

11

1С, СППР и Архитектура как код

DevOps и автоматизация разработки Бесплатно (free)

Можно ли идеи подхода «Архитектура как код» положить на 1С или иную платформу, чтобы не изобретать ещё какой-то язык и сразу получить множество готовых библиотек функций и инструмент достижения главной цели подхода AaC.

01.02.2024    2807    roman72    9    

8

Создание и модификация тестов в 1С:Тестировщик

Тестирование QA Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

1С: Тестировщик позволяет создавать и модифицировать тесты для проверки функциональности программного обеспечения, гарантируя надежность и стабильность приложений. В данной статье будет рассмотрен процесс написания и модификации тестов в конфигурации системы 1С: Тестировщик, а также основные принципы и методики, которые помогут тестировщикам эффективно использовать этот инструмент для обеспечения качества программных продуктов.

23.01.2024    736    Koder_Line    1    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. amiralnar 9 01.04.24 12:03 Сейчас в теме
Очень интересно. А без сонар это как можно попробовать применить?
Оставьте свое сообщение