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

09.10.23

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Подготовка файла настройки дымовых тестов
.epf 9,16Kb ver:1.03
8 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Описанное решение может оказаться полезным в случаях, когда на этапе автоматического тестирования (процесса 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

См. также

DevOps и автоматизация разработки Тестирование QA Программист Пользователь 1С:Предприятие 8 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Зарплата и Управление Персоналом 3 и версии КОРП: 3.1.35.48.

3660 руб.

05.08.2024    5020    35    1    

18

DevOps и автоматизация разработки Логистика, склад и ТМЦ Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1C:Бухгалтерия 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

10000 руб.

26.08.2022    15506    11    13    

37

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

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

3050 руб.

04.07.2022    12353    45    1    

37

Тестирование QA Программист Бесплатно (free)

В статье расскажем про нашу методику принятия решений по покрытию функционала тестами. Призываем сообщество к всестороннему обсуждению темы выбора своего, наиболее взвешенного подхода к оценке целесообразности в разработке и проведении автоматических сценарных тестов. И надеемся, что подобных публикаций на Инфостарт со временем будет больше. С большим интересом будем за ними следить. К сожалению, сейчас в открытом доступе крайне редко встретишь описание готовых к использованию методик.

27.01.2026    419    vladimir_iclsoft    0    

7

Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

За последний год YAxUnit заметно вырос: обновилась документация, запуск тестов в EDT стал практически мгновенным, появился редактор для режима 1С:Предприятие, инструменты для подготовки тестовых данных и подключение к ИИ через MCP-сервер для проверки и улучшения кода. Расскажем о том, какие свежие возможности YAxUnit позволяют сделать модульное и интеграционное тестирование в 1С быстрым, эффективным и комфортным.

26.01.2026    2872    Жолтокнижниг    16    

26

Тестирование QA Программист Бесплатно (free)

С Docker мы можем попробовать новые подходы, освоить современные инструменты и сделать тестирование 1С более эффективным. Расскажем об особенностях тестирования в Docker-контейнерах и решении проблем, которые могут при этом возникнуть.

20.01.2026    2597    TaGolovkina    12    

23

DevOps и автоматизация разработки Программист 1С 8.3 1С:Библиотека стандартных подсистем Россия Бесплатно (free)

Расширение для VS Code, которое автоматизирует рутинные операции при разработке на платформе 1С:Предприятие 8. Позволяет выполнять все операции с конфигурацией, расширениями, информационными базами и тестами прямо из редактора, без необходимости запоминать команды и копировать их из блокнота.

13.01.2026    6533    0    johnnyshut23    22    

34

DevOps и автоматизация разработки Системный администратор Программист Бесплатно (free)

Rundeck – это бесплатный и мощный оркестратор, «пульт управления», который помогает автоматизировать рутинные операции и внедрить DevOps/GitOps-подход в экосистеме 1С. Объясняем, как с его помощью упростить администрирование, отказаться от cron-скриптов и ручных SSH-подключений, централизовать управление серверами и снизить риски человеческого фактора. Показываем на практике примеры: как создать job, настроить workflow для закрытия месяца, установить платформу 1С через Jumphost и Ansible, а также запускать PowerShell-скрипты и Ansible-модули напрямую из Rundeck. Статья пригодится архитекторам, администраторам и DevOps-инженерам, которые стремятся превратить инфраструктуру 1С в управляемую, безопасную и полностью автоматизированную систему.

17.12.2025    2989    aidar_safin    0    

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