YAxUnit: Новые возможности для эффективного тестирования в 1С

26.01.26

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

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

Меня зовут Алексей Корякин. Я ведущий разработчик компании BIA Technologies и по совместительству автор YAxUnit.

Хочу рассказать о том, какие возможности появились в YAxUnit за прошедший год – как они увеличивают эффективность тестирования и сокращают время на внедрение модульных и интеграционных тестов в компании.


Улучшение документации YAxUnit



Начнем с основы любого качественного продукта – с документации.

  • Документация по YAxUnit достаточно хорошо проработана и постоянно поддерживается в актуальном состоянии – в ней отражаются любые значимые изменения, благодаря чему ей всегда можно доверять.

  • Поскольку в документации уделено достаточно много внимания к деталям, это позволяет значительно экономить время при внедрении – достаточно просто дать разработчикам ссылку на документацию, и они научатся писать тесты, это уже проверено на практике во многих командах. Кроме того, документация может быть полезна и в самом процессе разработки: в ней описаны различные кейсы, проблемные ситуации и способы их решения.

  • За прошедший год мы активно собирали обратную связь от пользователей-разработчиков. Все вопросы, которые оказались не отражены в документации либо были описаны недостаточно подробно, мы постарались зафиксировать и учесть. Благодаря обратной связи получилось выявить типичные ошибки, ситуации, которые вызывают у разработчиков затруднения, и понять, где необходимо добавить примеры.

 


В результате документация стала заметно лучше:

  • Детально проработаны сложные описания – для принципов работы различных структурных механизмов добавлены блок-схемы и диаграммы последовательности, а также даны подробные разъяснения, чтобы люди могли лучше понимать работу движка и совершать при написании тестов меньше ошибок.

  • Добавлено большое количество разнообразных примеров.

  • Описаны типичные ошибки и способы их избегать. Понимая, что большинство разработчиков читают документацию «по диагонали», мы дополнительно выделили важные моменты, чтобы акцентировать на них внимание.

  • Ряд разделов был существенно переработан: например, был полностью переписан и структурирован блок по мокированию – от базовых понятий к более сложным, чтобы к материалу можно было подходить постепенно и итеративно. Аналогичная работа была проделана с разделом по предикатам и рядом других тем.

 

 

 

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

Почему мы вообще уделяем документации так много внимания?

  • Потому что тестирование в 1С – задача сама по себе непростая. Мы автоматизируем сложные бизнес-процессы, а значит, даже модульные и интеграционные тесты неизбежно получаются сложными. И в такой ситуации важно не усложнять жизнь разработчику еще больше.

  • Наша цель – дать максимально полную, удобную и актуальную информацию, сделать и сам инструмент, и документацию простыми и понятными. Чтобы разработчик мог сосредоточиться на главном: на решении своих задач, качестве кода и качестве тестов.


Долгий запуск тестов: решение в YAxUnit

 

 

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

И все это время разработчик просто ждет. Написали тест, запустили – ждем. Платформа загрузилась, тест быстро отработал, получили отчет, внесли правки – снова запуск и снова ожидание.

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

Чтобы уложиться в дедлайны, разработчики либо полностью перестают писать тесты, либо ограничиваются формальными проверками «для галочки». А переключение между ожиданием и работой демотивирует. Все это напрямую отражается на качестве тестов и на качестве продукта в целом.

 

 

Чтобы решить эту проблему, мы доработали плагин YAxUnit для EDT, реализовав механизм быстрого запуска тестов и добавили в настройки галочку для включения этого режима.

Сценарий разработки при этом остается прежним: вы просто пишете тесты в общем модуле и запускаете их – либо все вместе, либо по отдельности прямо из кода по иконке в левом поле редактора.

 

 

Теперь о том, как это устроено технически.

После того как мы написали тесты и нажали кнопку «Запустить», поднимается 1С:Предприятие, прогоняются тесты, и по результатам прямо в EDT формируется отчет.

При этом сеанс 1С не закрывается – он продолжает ждать команд от EDT. Эти команды доставляются в него через транспорт на базе WebSocket, поддержка которого появилась в платформе 8.3.27. Понятно, что не у всех используется последняя версия 1С – у многих платформа старее. Для таких случаев была разработана внешняя компонента, реализующая поддержку WebSocket. Огромное спасибо Дмитрию Любаневичу, который оперативно откликнулся, реализовал компоненту и помог с устранением проблем. Это позволило поддержать взаимодействие через WebSocket для всех платформ, начиная с версии 8.3.10.

Если по отчету видно, что сам тест работает неправильно, мы можем внести в него исправления и опять нажать кнопку «Запустить». Причем здесь уже не нужно стартовать 1С заново – запущенный сеанс просто получает из EDT команду запуска обновленного тестового модуля с различными параметрами. После из текста тестового модуля формируется внешняя обработка и запускается на стороне 1С, а результат возвращается по вебсокету в EDT.

Все это упрощает запуск тестов и позволяет быстро получать их результаты.

 

 

Но есть некоторый ряд ограничений.

  • Через WebSocket передается только тестовый модуль – изменения в других модулях не учитываются.

  • Если вы написали тест и нашли ошибку в коде конфигурации, вам все-таки потребуется перезапуск после ее исправления.

  • Внутри тестового модуля нельзя поставить точки останова, потому что его код запускается как внешняя обработка, а не общий модуль. Зато можно поставить точки останова в проверяемом коде, но нужно помнить, что при его изменении вам все-таки придется обновиться.

 

 

В результате внедрения для тестовых методов транспорта через WebSocket мы получили следующие преимущества:

  • Моментальный запуск тестов.

  • Время на разработку и отладку наших тестов существенно сокращается.

  • Мы не теряем контекст – а значит, можем быстрее реализовать решение самой задачи.

Правда есть пара минусов, о которых мы уже поговорили:

  • Этот подход применим только для тестов.

  • И мы теряем возможность использовать в тесте точки останова.


Сложности разработки тестов в конфигураторе: решение – редактор тестов YAxUnit в предприятии

 

 

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

  • В конфигураторе мы не можем дополнить тестовыми методами контекстную подсказку.

  • В частности, конфигуратор не подсказывает по текучим выражениям (Fluent), которые являются фишкой YAxUnit и помогают писать более лаконичные тесты. Отсутствие подсказки сильно усложняет работу, потому что разработчику, чтобы вспомнить доступные варианты, приходится либо постоянно обращаться к документации, либо «проваливаться» в код движка, тратя на это дополнительное время.

  • В конфигураторе нет команд запуска для теста.

  • Приходится создавать какой-то JSON-файл с конфигурацией и править его вручную, либо запускать тесты из режима 1С:Предприятие.

Все это сильно снижает эффективность и вообще затрудняет написание тестов в конфигураторе. На мой взгляд, в таком режиме тестированием занимаются только энтузиасты.

 

 

Решение этой проблемы простое: не пишите тесты в конфигураторе. Пишите их в предприятии.

 

 

Для решения этой проблемы мы разработали специальный редактор тестов, который запускается из режима 1С:Предприятие как обработка с полем HTML-документа, куда внедрен Monaco Editor – облегченная веб-версия Visual Studio Code, знакомого многим разработчикам.

В этом редакторе вы можете писать и запускать свои тесты, а главное – он снимает все обозначенные выше ограничения.

 

 

В первую очередь, в него встроены полноценные контекстные подсказки по API YAxUnit:

  • Есть информация по методам.

  • Есть поддержка текучих выражений.

  • Есть подсказки по платформе – методы, типы, конструкторы, перегрузки.

  • Разве что, к сожалению, пока нет подсказки по конфигурации.

 

 

Также в редакторе тестов YAxUnit добавлены шаблоны кода – как по платформе, так и по движку. На слайде вы можете увидеть шаблон для конструктора объекта – это позволяет писать код быстрее.

 

 

И, конечно, предусмотрен удобный запуск тестов.

  • Над каждым тестовым методом отображается команда «Run test», которая позволяет запустить тест.

  • После выполнения теста слева в панели выводится иконка со статусом теста (успешный он или проваленный) и при наведении на нее отображается некоторая сводная информация.

На слайде видно, что серверный метод Вычитание() при использовании параметров «5, 2, 2» упал – возникла ошибка в утверждении проверки равенства Равно(). Проверка не отработала.

 

 

Для более детального анализа проблем в эту информацию добавлено отображение стека ошибки. Все строки этого стека интерактивны и представляют собой ссылки, которые позволяют вам перейти к соответствующей строке кода.

Причем ошибки из стека дополнительно подсвечиваются в тексте, и сразу видно, где именно произошел сбой.

Получается, что при наведении на каждую ошибку мы будем видеть стек, позволяющий быстро понимать, что там случилось.

 

 

Немного технических подробностей о том, как это все устроено.

  • Как я уже говорил, в качестве основы используется Monaco Editor, который предоставляет базовую функциональность по редактированию текста и ряд продвинутых возможностей. Мне особенно нравится режим мультикурсора – если вы еще не пробовали, рекомендую.

  • Для анализа кода используется генерация AST-дерева – это некоторое иерархическое объектное представление кода. Именно это представление по факту является базой для всей основной функциональности редактора.

  • Анализ кода происходит в режиме реального времени. Причем стандартно каждый раз при добавлении или изменении символов в код AST-дерево полностью перестраивается. Но на больших модулях, особенно, если там используется сложная логика, это может вызывать проблемы – редактор начинает тормозить и расходовать слишком много ресурсов. Для решения этой проблемы был реализован инкрементальный разбор – когда у нас анализируется только часть текста и обновляется только часть дерева. Такой подход позволяет комфортно работать даже с большими тестовыми модулями размером до десятков тысяч строк.

  • Для работы контекстной подсказки используется механизм вычисления типов. На основе AST-дерева мы определяем типы переменных, которые используются у нас в выражении – редактор умеет вычислять их типы, а также типы, которые могут быть возвращены выражением.

  • Плюс в редактор встроено описание YAxUnit и его API, а также описание платформы.

Все это вместе позволяет выдавать хорошие подсказки по коду.

Например, на слайде мы видим код с тремя выражениями:

  • В первой строке создается таблица значений и присваивается в переменную «Таблица»

  • Во второй строке в эту таблицу добавляется новая колонка и результат записывается в переменную. При этом редактор знает, что метод «Добавить» у таблицы возвращает результат с типом «КолонкаТаблицыЗначений».

  • И в третьей строке, когда редактор видит нашу переменную, он уже знает, что у нее тип – «КолонкаТаблицыЗначений». И знает, какие у колонки могут быть свойства и методы – таким образом может дать релевантные подсказки.

 

 

В итоге мы получили удобный функциональный редактор, который позволяет:

  • Быстро писать тесты для YAxUnit.

  • Быстро их запускать.

  • Получать быстрый фидбэк и быстрые отчеты.

  • И сократить время на разработку и тестирование.


Подготовка тестовых данных

 

 

Следующая важная тема – это тестовые данные.

  • Одна из фундаментальных проблем в 1С заключается в том, что бизнес-логика практически всегда тесно сплетена с данными.

  • Более того, даже сам код хранится в базе данных.

  • При этом данные, как правило, используются сложные – с большим количеством реквизитов, тянущих за собой большое количество связей.

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

 

 

С решением этой проблемы нам помогло сообщество. Было создано несколько инструментов, которые позволяют работать с тестовыми данными:

  • редактор макетов с тестовыми данными;

  • генератор кода;

  • помощник создания тестовых данных.

Кратко расскажу о каждом из них.

 

 

Первый инструмент – редактор макетов. Он позволяет преобразовать данные:

  • Из формата табличного документа в таблицу Markdown.

  • И обратно – из Markdown в табличный документ,

Это очень простой и универсальный механизм, который помогает в множестве сценариев.

Например, нам для теста нужна корректно заполненная номенклатура. Мы находим нужный элемент номенклатуры в справочнике через фильтр в динамическом списке и выводим данные в табличный документ через пункт меню «Вывести в список».

 

 

А дальше закидываем результат в редактор и преобразуем макет в текст, который можно перенести в наш тест.

 

 

В итоге, используя API YAxUnit, мы можем загрузить это все обратно в справочник и в дальнейшем использовать – например, при создании документа «Приход товаров».

Табличные документы в 1С можно получить практически отовсюду – из консоли запросов, в отчете, динамическом списке, табличной части. Благодаря этому инструменту вы без проблем сможете перенести эти тестовые данные в ваш тест.

 

 

Для более сложных сценариев есть два дополнительных инструмента:

  • помощник создания тестовых данных;

  • и генератор кода.

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

 

 

Эти помощники дают нам следующие возможности:

  • Генерацию скриптов для создания объектов на основании существующих данных.

  • Поддержку различных видов объектов – можно создавать документы, справочники, бизнес-процессы и так далее.

  • Формирование движений документов – для проверки либо для создания необходимого тестового контекста.

  • Все сценарии формируются с использованием конструкций YAxUnit.

  • Также есть возможность генерировать макеты.

Благодаря этим инструментам:

  • Снимается проблема «чистого листа», когда нужно протестировать новую функцию, разработчик часто не знает, какие данные подготовить, и как их корректно заполнить.

  • Мы просто берем существующие объекты и сериализируем. Не надо сильно думать, какие нужны данные, и как их правильно заполнять – достаточно найти подходящий пример.

  • Это позволяет нам готовить реалистичные наборы данных для сложных сценариев.

  • В частности, мы можем воспроизводить баги – нашли проблемный документ, сериализовали, добавили в тест, проверили воспроизведение. Если не воспроизводится – сериализовали дополнительные связанные объекты, дополнили контекст и добиваемся, чтобы тест воспроизводил баг.

 

 

На сквозном примере покажу, как эти помощники помогают нам писать тесты.

Для тестирования возьмем базу с конфигурацией «Управление парком аттракционов», где нам необходимо проверить, как в документе «Реализация билетов» формируются его проводки.

Мы открываем редактор и создаем нужные методы.

 

 

Поскольку подходящий документ у нас уже существует, нам нужно его найти в списке и проверить корректно ли он списал товары из регистра товарных запасов.

Заходим в проводки и из меню вызываем команду «Вывести список».

 

 

Дальше закидываем это все дело в редактор макета и преобразуем в формат маркдауна.

 

 

Результат переносим в тест – добавляем документ «Поступление товаров» и загружаем в его движения данные из макета. Входящие остатки готовы.

 

 

Далее подготавливаем сам документ реализации.

Открываем генератор кода, добавляем туда документ и нажимаем кнопку «Сформировать код».

 

 

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

Чтобы новый документ корректно сопоставился с остатками, используем номенклатуру из кэша значений. Записываем в переменную «Товары» результаты кэша и используем их при заполнении документа.

 

 

После проверки, что все работает, нам остается только сформировать ожидания – добавить утверждения для проверки движений.

И все – тест готов. Весь процесс занимает порядка пяти минут, а на выходе мы получаем полноценный тест.


Искусственный интеллект


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

Но он способен решать и более сложные задачи, и если предоставить ему нужные знания и дополнительный контекст, это расширит его возможности.

 

 

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

Благодаря этому ИИ может проверять результат собственной работы. Например, вы просите его создать проект – он генерирует код, а затем сам же проверяет, как это работает.

Современные модели умеют запускать внешние инструменты, корректно с ними взаимодействовать, находить ошибки компиляции и проблемы в тестах, а затем исправлять их, создавая для вас рабочий и качественный код.

 

 

Чтобы подобный подход стал возможен и для тестов в 1С, был разработан MCP:Test runner.

Думаю, многие уже знакомы с понятием MCP – по сути, это протокол, расширяющий возможности искусственного интеллекта. MCP:Test runner добавляет для нейронок следующие возможности:

  • Позволяет им запускать тест.

  • Но прежде, чем запустить тесты, их сначала необходимо собрать – собрать конфигурацию, обновить информационную базу, загрузить туда расширение с тестами и дополнительные расширения. Все это на себя берет MCP:Test runner.

  • Он позволяет работать с исходниками в формате конфигуратора и в формате EDT.

  • Чтобы все это работало быстро мы выполнили ряд оптимизаций – в частности, загружаются только те проекты (конфигурации или расширения), которые были изменены. А для загрузки и конвертации исходников используется 1C:EDT CLI, запущенная в интерактивном режиме, что позволяет сократить время конвертации, не поднимая каждый раз EDT.

Что это нам в итоге дает?

  • В первую очередь, это запуск тестов – проверка, что наше решение работает так, как нам необходимо.

  • При сборке и выполнении теста формируется логика, которая позволяет проверить, что проект корректно собирается, и все UUID-ы правильные.

  • Плюс в YAxUnit есть механизм, который помогает перехватывать ошибки компиляции – не выбрасывать большое красное исключение, а логировать их. Это позволяет проверить, что наш код компилируется, что он исполняемый – как тестовый код, так и проверяемый.

 

 

Покажу, как это все у нас устроено.

Нам нужна IDE с поддержкой ИИ (я использую Cursor), куда можно подключить этот MCP.

В этой IDE мы открываем проект, где необходимо проверить работу тестового модуля, открываем окно чата и пишем: «Запусти такие-то тесты».

 

 

Cursor находит, что у него есть инструмент для запуска тестирования, запускает тесты и выводит отчет с общей статистикой:

  • Мы видим, сколько у нас тестов всего, сколько из них выполнены успешно, а сколько – провалились.

  • Видим время выполнения каждого теста.

  • И видим ошибки, которые повлияли на эти тесты. Нейронка их проанализировала, поняла, в чем проблема, и вывела рекомендации.

 

 

При этом нейросеть может не только сформировать рекомендации, но и исправить.

На основании кода, который привел к ошибке, она предлагает внести изменения. Если с предложением согласиться, она внесет эти изменения и проверит их корректность с помощью MCP.

 

 

Также дополнительно можно попросить ее проанализировать сам тестовый модуль – какие в нем есть проблемы. Здесь она тоже выявила ряд критических ошибок:

  • Есть странная проверка, что результат равен результату.

  • И есть неполное покрытие тестом.

 

 

Можно согласиться с этими замечаниями, и тогда нейросеть внесет изменения, запустит тесты на свои доработки и найдет еще ряд проблем.

Все это автоматически исправляется и доводится до зеленого результата в тесте.

 

 

В основном нейронка все делает хорошо, но это не значит, что ее не нужно контролировать.

На примере видно, что вместо того, чтобы исправить существующий код, она предложила более простое и надежное решение – удалить падающий тест.

Поэтому будьте внимательны, бывают такие сюрпризы.

 

 

Что мы получаем в итоге:

  • С помощью MCP мы можем поручить нейросети с автоматическом режиме генерировать тесты и проверять их, выявляя и исправляя допущенные в тестах ошибки – это позволяет нам создавать реально работоспособный и качественный код.

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

Пишите тесты, используйте YAxUnit.


Вопросы и ответы


Могут ли нейронки сами писать тесты для YAxUnit? Или для этого обязательно нужны MCP?

Чтобы научить нейронку писать тесты для YAxUnit, есть три возможности:

  • Можно в качестве MCP использовать context7.com – это MCP, который предоставляет информацию о различных библиотеках и работает онлайн, через интернет. Там добавлен YAxUnit, его можно подключить.

  • Если вы используете Cursor или что-то подобное, вы можете просто подключить документацию по написанию тестов в проект.

  • Либо можно написать для нейросети правила и добавить их в контекст – например, скормить ей файл с описанием.

На простые методы модульные тесты они пишут без проблем, интеграционные (для проверки связи между компонентами) – тоже смогут. Но если у вас большие сложные сценарии, им будет нужна помощь. Если им эту помощь дать – без проблем.

MCP работает с исходниками в формате EDT или в формате конфигуратора? И где производится сама настройка MCP – где мы указываем базу и т.д.?

Пример настройки MCP можно посмотреть в репозитории MCP:Test runner. Там используется YML-файл, где описаны пути к исходникам конфигурации, в каком они формате, пути к тестам, как запускать эти тесты, путь к базе, на которой должно запускаться тестирование, параметры авторизации и так далее. Перед подключением MCP-сервера путь к этому YML-файлу прописывается в переменной окружения.

Планируется ли развитие дымовых тестов? Сейчас мы используем для этого Vanessa ADD, но, может, уже стоит все тестирование перенести в YAxUnit?

YAxUnit – действительно удобный инструмент для написания дымовых тестов, но сейчас механизм дымового тестирования реализован там как плагин, и нет уверенности, что его нужно тащить прямо в движок. Мне кажется, это усложнит и размоет назначение инструмента. Vanessa ADD в плане дымовых тестов пока что действительно умеет больше.

Заинтересовал редактор тестов. Он входит в состав расширения для YAxUnit? Можно ли забрать из репозитория на GitHub шаблоны для Monaco Editor?

Можно забрать не только шаблоны, но и весь редактор целиком, если нужно.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

Инфостарт Tech Event 2026

Инфостарт A&PM Event 2026

Вступайте в нашу телеграмм-группу Инфостарт

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

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

См. также

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

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

03.09.2026    10291    KatanaDragon511    28    

38

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

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

01.09.2026    2016    mrXoxot    6    

24

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

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

25.08.2026    20603    mrXoxot    53    

81

HighLoad оптимизация Тестирование QA Программист 1С 8.3 Бесплатно (free)

Шесть внешних отчётов на боевой базе крупной сети переписали за неделю. По секундомеру ускорились четыре, в акт пошли три: у одного отчёта минус тринадцать процентов оказались выбросом нагрузки прода, а не эффектом кода. Поймал это чередующийся замер до/после в одном окне, обычные три прогона с метрикой "минимум" показывали ускорение уверенно. Дальше в тексте: почему построчная сверка выхода ломается ровно на тех правках, ради которых её заводят; из чего собирается повторяемый слепок результата и почему главную работу в нём делает нормализация, а хеш только сигнализация; где слепок не берётся вовсе и его заменяет по-колоночная сверка; чем проверять пересчёт итогов, чистку данных и операции с кластером. Отдельно - гипотеза, которую замер отклонил, и честный счёт, во что вся эта дисциплина обходится.

21.08.2026    1223    nedomolkov.ivan    0    

0

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

Пентест – это не только поиск уязвимостей, но и сложный проект, в котором ошибка может привести к простою, инциденту и потере доверия заказчика. Рассказываем, как правильно определить цели и границы работ, распределить ответственность, выстроить коммуникации и сделать неизбежные риски и изменения контролируемыми. На реальных кейсах разбираем, почему задержка с сообщением о критической уязвимости способна перечеркнуть технический успех, как управленческая рамка помогла разобраться в остановке турбины и когда выход за пределы скоупа приносит пользу бизнесу, а когда становится нарушением договоренностей.

17.08.2026    1032    user2181343    0    

1

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

Написать тест на 1С несложно. Дорого стоит привести базу в состояние, где прогон вообще стартует: семь шагов, каждый ломает запуск молча — без ошибки, без записи в журнале. И эту цену платит заново каждый новый человек на проекте. Разбираю молчаливый отказ окружения как класс проблем, показываю, почему его не закрывают ни документация, ни скрипт развёртывания, и предлагаю решение — фиксацию состояния в артефакте с машинно-проверяемым критерием приёмки. Подход проверен на сквозной задаче (первая задача экзамена «1С:Специалист по платформе» с юнит- и функциональными тестами), а затем перенесён на пул тестовых баз с типовыми конфигурациями. Отдельно — каталог симптомов и их настоящих причин, который пригодится независимо от инструментария.

13.08.2026    1381    chagbig    1    

0

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

Разбираем, как в крупных компаниях регуляторные требования, постмортемы и внутренние ограничения постепенно превращаются в многоуровневую систему инструкций, в которой разработчику все сложнее понять, что и когда нужно проверить. Показываем opensource-сервис внешних проверок для GitLab, который автоматизирует часть этой бюрократии и сводит результат к понятному сигналу: зеленое – все в порядке, красное – нужно обратить внимание на конкретное требование. Объясняем, как такие проверки помогают «сдвинуть влево» контроль задач и снизить риск отказа во внедрении задачи в последний момент перед релизом. А заодно смотрим, может ли связка Autumn + «Вино» + немного разработческого энтузиазма превратить обязательные инструкции в инструмент, который команда сама захочет развивать.

12.08.2026    1245    Golovanoff    2    

4

Поиск данных Тестирование QA Программист 1С 8.3 1С 8.5 Бесплатно (free)

Как мы пришли к Юнит-тестированию и почему стоит его использовать. Использование универсальных тестов для проверки работы IS MagicInput в вашей конфигурации.

16.07.2026    2410    Evg-Lylyk    2    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. krasnoshchekovpavel 266 26.01.26 21:16 Сейчас в теме
YAxUnit технологически - супер, куча наворотов и реально крутых штук. Но есть минусы - тесты должны находиться в отдельном модуле. Соответственно внутри этого модуля нет доступа к не экспортным методам конфигурации. А модульное тестирование не должно ограничиваться только программным интерфейсом. И решение этому есть - размещение тестов в расширении модуля, внутри которого находиться тестируемый код. Но такой возможности нет или я не нашел в документации - и это очень печально. Так же этот "fluent interface" во многих кейсах тестирования вообще не нужен, а его аналогов нет. Предлагается в любом случае использовать что-то типо ЮТест.ОжидаетЧто(А).Равно(Б). А особенность в том, что сравнение в ЮТест происходит не как сравнение двух переменных А = Б, а как сравнение значений. И допустим мне нужно протестить, что А = Б не по значению, а по как бы указателю на переменную -> Это невозможно. Приходиться писать конструкции вида ЮТест.ОжидаетЧто(А=Б).Равно(Истина). И тогда исчезает автогенерация текста ошибки тестирования...и приходиться добавлять сообщение вручную - ЮТест.ОжидаетЧто(А=Б, "Ожидается что А равно Б").Равно(Б). И все это превращается в ад с точки зрения удобства использования.

Какую-бы архитектуру хотелось видеть - пусть остаются все эти фичи и ЮТест.ОжидаетЧто(А)...текучий интерфейс и т.д.. Но дайте возможность использовать стандартный сценарий модульного тестирования который принят во множестве других языков программирования - разработчик самостоятельно проверяет значения на соответствие и в случае чего вызывает исключение. Или используются короткие методы по типу ом.ОжидатьРавенство(А, Б) без всяких неочевидных механизмов. Если првоерка на равенство, то на реальное равенство как если бы сравнивали переменные. Если мы хотим сравнить переменные по их значению (структуры, массивы и т.д.) то мы вызовем ом.Ожидать(ом.ЗначенияРавны(А, Б)).

Имхо - текучий интерфейс это что-то слишком сложное (Не в плане восприятия, обучения и т.д., а в плане легкости использования) для модульных тестов. Это не претензия, а боль при реальном использовании. Если эту проблему можно решить (возможно, я просто плохо знаю документацию) - буду рад вашей помощи.
2. dhurricane 26.01.26 22:35 Сейчас в теме
(1)
Но такой возможности нет или я не нашел в документации - и это очень печально.

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

Но дайте возможность использовать стандартный сценарий модульного тестирования который принят во множестве других языков программирования - разработчик самостоятельно проверяет значения на соответствие и в случае чего вызывает исключение.

Думаю, если зарегистрируете пожелание к проекту в виде issue на github о том, чтобы можно было самому бросать исключения в теле теста, и оно движком интерпретировалось как падение теста, а не как сломанный тест, то автор вполне может отозваться. Есть сомнения лишь в отношении дублирования методов (Равно и ОжидатьРавенство).

А особенность в том, что сравнение в ЮТест происходит не как сравнение двух переменных А = Б, а как сравнение значений.

Так это же наоборот фича :) Думаю, такой сценарий как раз самый популярный, нежели сравнение по ссылке, а не по значению.
charushkin; sergiz; krasnoshchekovpavel; +3 Ответить
3. alexandr_yang 11 27.01.26 10:00 Сейчас в теме
(1)

разработчик самостоятельно проверяет значения на соответствие и в случае чего вызывает исключение


Такой метод есть - ЮТест.Упал()
charushkin; sergiz; Жолтокнижниг; dhurricane; +4 Ответить
12. dhurricane 27.01.26 17:16 Сейчас в теме
(3) О, спасибо. Проглядел. :)
7. Жолтокнижниг 314 27.01.26 13:10 Сейчас в теме
(1)
Соответственно внутри этого модуля нет доступа к не экспортным методам конфигурации

И это правильно, есть такое понятие "Хрупкие тесты" - тесты которые постоянно разваливаются и их приходится чинить. Тестирование приватных методов, для которых не нужно соблюдать контракты как раз относится к этой категории. Не нужно их тестировать, при рефакторинге такие тесты начнут сыпаться с большой долей вероятности.
Да иногда бывает нужно/проще протестировать приватное, но это больше исключение, чем правило. И тут есть способ обойти это ограничение с помощью заимствований и расширений. Так же и в других ЯП, приватное не тестируют, единственный способ это рефлексия.

Так же этот "fluent interface" во многих кейсах тестирования вообще не нужен, а его аналогов нет

Из моего опыта, простых сравнений где флюент был бы излишним немного, но можно запостить issue

А особенность в том, что сравнение в ЮТест происходит не как сравнение двух переменных А = Б, а как сравнение значений. И допустим мне нужно протестить, что А = Б не по значению, а по как бы указателю на переменную -> Это невозможно

При сравнении по указателю и значения будут равны. Но при этом платформа применяет неявные преобразования, в yaxunit реализовано сравнение не только значений но и типов. А если же вопрос к сравнению сложных объектов, то тут да, yaxunit может не выбросить исключение, где обычное сравнение дало бы ложь, но какой вариант верный? Мне кажется если метод вернул структуру с теми же полями, то это правильный результат.

Но дайте возможность использовать стандартный сценарий модульного тестирования который принят во множестве других языков программирования - разработчик самостоятельно проверяет значения на соответствие и в случае чего вызывает исключение.

А можно пример такого, без использования assert?

Имхо - текучий интерфейс это что-то слишком сложное

Хотелось наоборот создать что то простое, чтобы разработчик меньше тратил времени на написание и чтение теста, спрятать под капот сложности, да есть некоторая перегрузка логики в зависимости от типа, но она кажется интуитивная.

ЮТесть.ОжидаетЧто(Строка).Содержит(Подстрока) // проверит вхождение подстроки
ЮТесть.ОжидаетЧто(Массив).Содержит(Значение) // проверит наличие элемента в массиве.
10. krasnoshchekovpavel 266 27.01.26 15:14 Сейчас в теме
(7)

А можно пример такого, без использования assert?

https://cs.opensource.google/go/go/+/master:src/net/url/url_test.go ищите по словам errorf и fatal

Тут же найдете например TestResolvePath - тест в котором тестируется приватный метод resolvePath к слову о том что "в других языках так же"

(7)
И это правильно

Да, такое понятие есть, но решать эту проблему следует архитекторам и разработчикам - они сами решат, что им нужно тестировать, а что нет. И не давать такой возможности под аргументом опеки над пользователями библиотеки считаю некорректно.
11. Жолтокнижниг 314 27.01.26 15:23 Сейчас в теме
(10) По примеру, окей, но как по мне уместнее было бы использовать какой нибудь assertNull(err, message).

По второму пункту, отчасти согласен. Но это не коммерческий продукт и я в первую очередь решаю задачи критичные мне и моей компании, мы не тестируем массово приватный методы. А реализация другого подхода потребует больших изменений в логике движка.
А ещё это опенсурс продукт, в котором вы можете реализовать необходимый функционал.
4. starik-2005 3302 27.01.26 12:37 Сейчас в теме
Ну осталось по результатам тестов патчи автогенерить. МСР тестов, МСР гита, МСР бизнес-модели, МСР на oData для доступа к данным. Прям вот "раз словечко, два словечко - пенсня получается".
5. gybson 13 27.01.26 12:41 Сейчас в теме
Осталось совсем немного чтобы ИИ добавить в редактор кода, более логично будет, чем через курсор крюк делать
6. Жолтокнижниг 314 27.01.26 12:52 Сейчас в теме
(5) С редактором как будто больше проблем, копирование кода туда сюда. Я пока больше нацелен на работу в vscode. Скоро появится для него расширение.
charushkin; alexandr_yang; +2 Ответить
8. gybson 13 27.01.26 13:22 Сейчас в теме
(6) зато можно гонять итерации через ИИ довольно быстро без пересборки файлов, конфигурации и т.п.
9. Жолтокнижниг 314 27.01.26 13:25 Сейчас в теме
(8) Увы при изменении тестируемого кода все равно придется пересобирать.

И подключение ИИ к редактору сложнее чем реализовать запуск тестов yaxunit через web socket из vscode/cursor/etc
13. charushkin 110 28.01.26 14:18 Сейчас в теме
(6) ооо, вот прям бомба! Очень круто было бы иметь возможность прогонять и отлаживать тесты из vs code
14. muskul 29.01.26 02:40 Сейчас в теме
А есть что то простое что может просто по всем доступным документам пройтись создать и провести под конкретным пользователем?
15. Жолтокнижниг 314 29.01.26 08:11 Сейчас в теме
(14) дымовые тесты Ванессы не предлагать? В yaxunit они тоже есть, но там нет создания и проведения документов, может быть в будущем появится
16. muskul 29.01.26 08:32 Сейчас в теме
(15)
дымовые тесты Ванессы не предлагать?

пробовал как то настроить, все сломалось на добавление товара в подбор, потом посчитал сколько времени займет все документы перетыкать, сохранить все правильно и отложил в долгий ящик
17. Antonio1C 22.04.26 16:15 Сейчас в теме
Добрый день!
Спасибо большое за статью и ваш замечательный инструмент. Один вопрос, есть ли возможность запускать тесты без сборки основной базы? Проблема в том, что основная разработка ведется в конфигураторе, а тесты пишем с помощью ИИ агента в вс коде. Соответственно, нужно, чтобы при запуске тестов обновлялось только их расширение, а основная база данных загружалась.

В документации не смог найти ничего подобного.
18. Жолтокнижниг 314 29.04.26 02:20 Сейчас в теме
(17) Если вы про MCP то можно просто не указывать конфигурацию в списке источников, но возможно она обязательна по реализованному процессу, что можно исправить - зарегистрировать issue или самостоятельно.

Если о чем то другом - зависит от инструментов которые используете.
19. Antonio1C 29.04.26 22:10 Сейчас в теме
(18) да, про mcp. Если основную конфигурацию не указывать, то mcp не запускается. Спасибо, зарегистрирую issue.
Для отправки сообщения требуется регистрация/авторизация