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

09.10.23

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

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

Файлы

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

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

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

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

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Описанное решение может оказаться полезным в случаях, когда на этапе автоматического тестирования (процесса 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 и автоматизация разработки Групповая разработка (Git, хранилище) Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С 8.5 Бесплатно (free)

Выгрузка типовой Бухгалтерии в XML через базу занимает больше четырёх минут. Я написал движок, который читает файл конфигурации напрямую и выгружает его за 35 секунд, совпадая с выгрузкой платформы байт в байт во всех 90 385 файлах. Загрузка обратно тоже работает: круг через платформу совпадает полностью. Рассказываю, как ускоряли, как проверяем и что при загрузке XML теряет сама платформа. А в конце спрашиваю, нужно ли это кому-то, кроме меня, и на какой конфигурации проверить следующей.

27.10.2026    1005    oyti    20    

16

Нейросети DevOps и автоматизация разработки Разработчик Руководитель проекта 1С 8.3 1С 8.5 Бесплатно (free)

Полтора месяца ИИ-агенты писали мне коммерческое расширение 1С. Я поднял журналы всех сессий и сложил по прайсу: $13 365, из них 94 % — за то, что агент заново перечитывает уже известное. Разбор счёта, три дыры, правила, которые вчетверо удешевили шаг, и скрипт, чтобы посчитать свой.

08.10.2026    2474    deda    29    

16

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Абонемент ($m)

Запуск MCP-сервера в Docker с --read-only, --cap-drop ALL, сетью none и внутренней сетью только до заглушки 1С. Что показали попытки соединения, записи на диск и чтения окружения, почему сервер падал на журнале и как это исправлено. Прогон на Docker 29.8.0 и mcp 2.2.0, в архиве Dockerfile и скрипт проверки.

1 стартмани

06.10.2026    865    Ninel_S    0    

8

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Бесплатно (free)

Подключаем Cursor к 1C: Platform Tools MCP на Windows: установка расширений, packagedef, IPC, токен и mcp.json. Восемь шагов со снимками экрана, проверка env_status, разбор MODULE_NOT_FOUND и конфликта портов. Исправляем ошибки предыдущей статьи и объясняем, как агент получает метаданные из XML. Стенд: Cursor 3.19.7, Platform Tools 0.9.6, MCP 0.3.0.

28.09.2026    6456    Ninel_S    2    

10

DevOps и автоматизация разработки Тестирование QA Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Бесплатно (free)

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

03.09.2026    12460    KatanaDragon511    30    

40

Инструменты администратора БД Инструментарий разработчика Тестирование QA Системный администратор Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)

В экосистеме 1С давно живут сотни инструментов: от Конфигуратора и Хранилища до систем тестирования, мониторинга, интеграции и CI/CD. Я собрал их в Ландшафт технологий, а теперь добавляю данные о реальном использовании. Рассказываю, как устроена карта, что показал первый опрос и почему в новой волне особенно нужны администраторы, аналитики и тестировщики.

01.09.2026    2910    mrXoxot    6    

25

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

Представьте, что вас попросили «сделай нам DevOps для 1С». С чего начинать? Часто за этой потребностью скрывается хаос в самом процессе разработки. Поэтому начинать нужно не с инструментов, не с серверов и не со скриптов, а с понимания того, что именно необходимо изменить. Предлагаем небольшой спасительный чек-лист, по которому можно относительно безболезненно запустить современные процессы управления разработкой 1С, даже когда у команды нет ничего, а изменения они присылают друг другу почтой и в мессенджерах. Вы получите структурированный пошаговый список задач, с которым не страшно окунаться в любой проект аудита разработки на 1С с целью навести там порядок.

31.08.2026    3889    Evil Beaver    3    

13

DevOps и автоматизация разработки Мониторинг Тестирование QA Разработчик 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    24925    mrXoxot    55    

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