Особенности нагрузочного тестирования 1С: Предприятие
Недавно мне подкинули интересную задачку: провести нагрузочное тестирование 1С: Предприятие. Раньше с таким не сталкивался, но что-то подсказывает, что со временем таких запросов будет всё больше. Импортозамещение шагает по стране, 1С всё глубже укореняется в бизнес-процессах, а значит, вопросы “почему всё тормозит?” будут звучать всё чаще.
Переход на решения 1C в связи с импортозамещением, определение пределов мощностей имеющегося оборудования и поиск «узких мест», которые можно оптимизировать – всё это непосредственные поводы для проведения нагрузочного тестирования. А если учесть, что медленная 1С — это почти традиция, то тестирование можно считать народным промыслом. Поэтому хотелось на этом примере разобраться со всеми тонкостями процесса.
Клиенты 1С: Предприятие
У 1С есть три клиента: толстый клиент, тонкий клиент и веб-клиент. Толстый клиент работает напрямую с кластером серверов 1С. Веб-клиент работает через веб-сервер, а тонкий может работать и так, и так. В этом посте расскажу про особенности, выявленные при попытке нагрузки веб-клиента и тонкого клиента.
Выбор инструмента тестирования
Для нагрузочного тестирования 1С: Предприятие можно использовать инструмент 1С Тест-Центр. Это решение позволяет использовать встроенные сценарии нагрузочного тестирования или создавать новые. Однако все не так просто: нужно учитывать особенности продуктов 1С и специфический синтаксис, который непросто использовать без опыта и подготовки.
Так как и тонкий и веб-клиенты работают через веб-сервер, для их тестирования не обязательно использовать Тест-Центр, а можно воспользоваться более универсальными инструментами. Поэтому в этом проекте было решено не усложнять себе жизнь и использовать привычный Apache JMeter.
Авторизация
Первая проблема, с которой я столкнулся при создании нагрузочных скриптов, – авторизация пользователей. В ERP 1С Предприятие логин и пароль отправляются в зашифрованном виде. Какое именно используется шифрование учетных данных? Хороший вопрос… Ответ я так и не нашел. Соответственно, не получалось организовать авторизацию виртуальных пользователей. Поэтому для тестирования авторизацию пришлось отключить вообще. Добрые люди в комментариях, поделитесь, пожалуйста, вашим опытом решения этих проблем, если таковой есть! Возможно, ваш лайфхак спасёт не одну нервную систему.
Авторизацию я отключил путём удаления всех пользователей. После этого остался один пользователь без имени и пароля, но с правами администратора, которого можно было использовать для входа виртуальных пользователей.
Костыль? Да. Работает? Тоже да. Способ не самый элегантный, но иного на горизонте пока не видно.
Особенности трафика или воплощение хаоса
Следующая проблема – перенасыщенный и сложноорганизованный трафик. На одно действие в интерфейсе приходится множество запросов, что сильно осложняет работу.
Все действия в системе, как известно, осуществляются запросами POST. Трафик веб-клиента полностью состоит из JSONов, а вот трафик тонкого клиента по умолчанию сжимается в LZ4. С проблемой сжатого трафика тонкого клиента вроде как удалось справиться с помощью изменения настроек. После отключения сжатия трафик тонкого клиента становится таким же, как у веб-клиента, однако вместо JSON используются XML.
Помимо этого, каждый полученный ответ системы начинается с символа-спойлера "\uFEFF". Это знак порядка байтов (BOM, byte order mark), стандартный для некоторых кодировок. Однако из-за этого символа в дальнейшем возникают проблемы при использовании экстракторов в JMeter. Поэтому все ответы нужно предварительно прочесать постпроцессорами, удаляя этот символ.
Корреляция
И вот наконец авторизация отключена, трафик записан и предобработан. Вроде бы худшее позади, но пришло время корреляции запросов. И тут возникает целый набор проблем.
В трафике много GUID-параметров. Очень много. При этом одни и те же значения могут встречаться в разных местах в разных регистрах, поэтому, при их извлечении и последующем использовании нужно сохранять регистр.

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

Ну а вишенка на торте — это дата. Штатный тип данных «дата» в 1С, в отличие от таймстемпа, является количеством секунд, прошедших с начала нашей эры.
Выводы
Как видите, далеко не все проблемы получилось решить. А те решения, которые я нашёл, возможно не самые оптимальные. Так, хотелось бы найти способ авторизации виртуальных пользователей вместо отключения авторизации. И очень хочется как-то упростить и ускорить процесс корреляции запросов.
Расскажите, был ли у вас опыт нагрузочного тестирования 1С через JMeter? Как вы решали описанные проблемы?
Комментарии (37)
nixel
12.02.2025 19:34Параметры авторизации можно передать в адресной строке (в случае веб клиента) и в строке запуска (в случае тонкого клиента).
Но с гуидами это только первый слой ада, дальше вы столкнетесь с перегенерируемыми ключами свойств и не постоянными именами объектов в интерфейсе. Поэтому мой вам совет - для тестирования 1с используйте инструменты тестирования 1с. Максимум, что можно тестировать через JMeter - это web и http сервисы.
Разберитесь с тест-центром, разберитесь с механизмом автоматизированного тестирования (либо платформенного, либо на базе Vanessa Automation и Gherkin), и задача будет решаться намного проще, а тесты, которые вы напишите, не протухнут с новым релизом платформы или конфигурации.
DvoiNic
12.02.2025 19:34Разберитесь с <....>
Вы предлагаете неверный подход. Верный подход - клиенту сменить "тестировщика".
Ghool
12.02.2025 19:34А какой подход к тестированию предложили бы вы?
Как смоделироаать большую нагрузку?
DvoiNic
12.02.2025 19:34нагрузка нагрузке рознь. Запрос на обновление динсписка, и запрос на обновление динсписка :-) внешне могут быть почти одинаковыми, но давать совершенно разную нагрузку на целевую систему. ХТТП-запрос сервиса текущего времени и ХТТП-запрос "результата продаж товаров группы А за последнюю неделю" тоже могут быть совершенно одинаковы внешне...
Я говорю, тестировщика менять надо... На того, кто представляет, что именно тестирует...
Ghool
12.02.2025 19:34Ну, в статье, конечно, очень многих деталей не хватает.
Из неё невозможно понять, что из этого делалось.
Если сперва был снять нормальный профиль нагрузки и запросы не «втупую» моделировались, то подход вполне рабочий. С ограничениями, конечно - но ограничения в НТ всегда есть
DvoiNic
12.02.2025 19:34в статье, конечно, очень многих деталей не хватает.
Более того, там вообще ничего нет.
Если сперва был снять нормальный профиль нагрузки [...] то подход вполне рабочий
Для начала, нужно вообще понять "что такое нагрузка".
Вот стоит себе 1С, никого не трогает. И ее никто не трогает. Нет с ней никаких соединений, нет к ней никаких запросов. и тут она начала по расписанию закрывать месяц, считать себес и финрез... это "есть нагрузка" или "нет нагрузки"?
Ghool
12.02.2025 19:34У вас если есть понимание, как создавать большую нагрузку на 1с (пусть даже только через веб) - скажите пожалуйста.
всё делать только через тест-сервер, используя 100500 нагрузочных станций?
Или есть другие тулы, которые могут моделировать хотя бы сотни клиентов с одного компа?
Спасибо.
DvoiNic
12.02.2025 19:34два клиента, у которых просто открыты разные рабочие столы (например, пустой стол, только со значками разделов, и универсальный настраиваемый рабочий стол об Белокаменцева, с пятком динсписков, да десятком графиков и диаграмм), дадут очень разную загрузку сети. Более того, можно на том же настраиваемом столе создать один-единственный элемент, который практически не даст нагрузки на сеть, но положит нафиг сервер 1С.
повторю на всякий случай еще раз: 1С - это не сайт-визитка. Это даже не интернет-магазин. Это большая и достаточно сложная вещь.
У вас если есть понимание, как создавать большую нагрузку на 1с
а у вас есть понимание, что такое "нагрузка", и что такое "большая" (хотя бы чем одна "нагрузка" отличается от "другой", и как их измерять)? И почему нагрузку пренепременно нужно делать сотнями клиентов?
Ghool
12.02.2025 19:34И почему нагрузку пренепременно нужно делать сотнями клиентов?
Потому что если нагрузку можно создать одним клиентом, то нагрузочное тестирование для этого не нужно - работник скажет "когда я запускаю отчёт, всё тормозит", а программист 1с повторит это и помощь инженеров по нагрузке ему не нужна.
Нагрузочное тестирование нужно как раз в тех случаях, когда моделирование нагрузки выходит за рамки работы (или за список обязанностей) разработчика.
Поэтому тестирование и делится на разные ветки - "ручное/автоматическое" или "нагрузочное".
И тут я возвращаюсь к своему вопросу: если 1с тормозит от того, что в ней работает много пользователей (а не от того, что кто-то запустил одну "тяжёлую" операцию) - как правильно её тестировать?
Предположим, у нас большая организация, тормоза начинаются когда в с 1с взаимодействуют множество менеджеров одновременно (скажем, 200 или 500) - что делать? Запускать 200-500 тест-центров или другой инструмент?
Я люблю нагрузочное тестирование, но с 1с у меня опыта нету а значит нет и ответа на этот вопрос, у вас есть, помогите понять!
Спасибо.DvoiNic
12.02.2025 19:341с тормозит от того, что в ней работает много пользователей (а не от того, что кто-то запустил одну "тяжёлую" операцию) - как правильно её тестировать?
Предположим, у нас большая организация, тормоза начинаются когда в с 1с взаимодействуют множество менеджеров одновременно (скажем, 200 или 500) - что делать? Запускать 200-500 тест-центров или другой инструмент?
Еще раз: пользователи работают по-разному. даже одни и те же "менеджеры". Даже одни и те же операторы могут работать в разное время с разным товаром - сейчас с "обычным", а через 10 минут - с товаром, учитываемым по сериям и характеристикам, и оформляемым не только в учетной системе, но и в Меркурии и Честном знаке - и, соответственно, будет разный объем запросов к БД, и разная скорость отклика системы.
Я люблю нагрузочное тестирование, но с 1с у меня опыта нету а значит нет и ответа на этот вопрос, у вас есть, помогите понять!
Нету опыта в 1с - и вы беретесь за нагрузочное тестирование 1с? Это, мягко говоря, нехорошо... Вообще говоря, у самой фирмы 1с есть курс "эксперт по технологическим вопросам", с соответствующей сертификацией (и, соответственно, со входными требованиями - иметь некоторые знания (вообще, формально они хотят сертификаты, конечно - но фактически нужно просто иметь знания, за которые эти сертификаты выдают )). Есть аналогичная книга ("настольная книга эксперта по технологическим вопросам")... в двух словах это не объясняется.
Почитайте хотя бы описание курса на https://uc1.1c.ru/course/podgotovka-k-1s-ekspertu-po-tehnologicheskim-voprosam-osnovnoj-kurs/#toc или содержание книги https://v8.1c.ru/metod/books/42721.htm - и поймете всю глубину идиотизма "попытки нагрузочного тестирования 1с с помощью JMeter" (вот аналогия родилась - тестирование 1с джиметром - это примерно как тестирование телевизора количеством зрителей, которые могут одновременно смотреть на экран)
Ghool
12.02.2025 19:34А я и не берусь за тестирование 1с :)
Мне просто любопытно, как это делать.
Вы правы в том, что 1с сильно отличается от «сайта-визитки», но проблемы, описанные вами (одна и та же операция, выполняемая с разными параметрами создаёт разную нагрузку) свойственны большинству сложных систем, которые я тестировал.
Это решается. Более того, эту проблему приходится решать при тестировании 1с «родным» по.
Я прочитал ваши ссылки, круто, спасибо за них. Покупать книгу не хотелось, всё же тестировать 1с мне не нужно, это просто любопытство.
Но я нашёл вот такую статью на хабре - выглядит очень интересно:
https://habr.com/ru/articles/696790/
И тут коллеги запускают тесты «по 2 пользователя на сервере» на 6 серверах.
В нескорых ситуациях такой подход годится, в некоторых - нет.
Так вот, я хочу понять - есть ли какой-то аналог инструмента для создания массовой нагрузки на 1с через веб-сервер (сотни параллельно выполняющихся операций)?
Вы говорите, что jmeter не годится категорически - значит есть аналоги.
Ваш аналог - это запуск сотен серверов с тест-центром?
Уточню, я не против такого подхода - но в нагрузочном тестировании он используется только если нет другого выхода (в силу огромной ресурсоёмкости и дороговизны)
DvoiNic
12.02.2025 19:34аналог инструмента для создания массовой нагрузки на 1с через веб-сервер (сотни параллельно выполняющихся операций)
Вы хотите веб-сервер протестировать на нагрузку, или 1с? Вы понимаете, что это совершенно разные вещи? А понимаете то, что "сотни параллельно выполняющихся операций" можно запустить с одного клиента? или вообще без клиента? (И при этом оценивать нагрузку, иметь соответсвующие метрики, и т.п.). Нужно понимать, что именно вы хотите протестировать. Ну, или если вы тестируете некую "систему" - неплохо знать, из чего эта система состоит, и как каждый элемент или подсистема влияет на общую производительность. а у вас получается, что вам пожаловались на то, что хреново показывает телевизор - а вы вместо проверки антенны, наличия сигнала, напряжения в розетке и т.п. - сгоняете в комнату с этим телеыизором десятки человек, и справшиваете у них "а как вам сейчас видно?", да еще и называете это "нагрузочным тестированием".
jmeter не годится категорически - значит есть аналоги.
Практически невозможно без мата объяснить, что JMeter и его аналог не отдиагностирует, например, медленное подыхание диска, отведенного на сервере под темдб... 1с - это не сайт-визитка. И то, что там код на русском - не означает, что с 1с справится прям совсем-совсем любой идиот... не только лишь все смогут это сделать
Ghool
12.02.2025 19:34хреново показывает телевизор
Ваш пример с телевизором не состоятелен, так как зрители не оказывают влияния на работу телевизора
С другой стороны, если у большинство клиентов работают с 1с через web-сервис, то создание нагрузки именно через web-сервер будет корректным способом воспроизведения этой самой нагрузки (не берусь судить, насколько удобным).JMeter … не отдиагностирует медленное подыхание диска
Ну, тут надо отделять мух от котлет.
JMeter - это инструмент подачи нагрузки.
Он анализирует те клиентские метрики, которые ему доступны: количество возвращаемых ошибок, количество успешно выполненных операций, времена отклика.
А анализ работы системы, сбор её внутренних метрик а так же метрик составляющих ей систем (база данных, сеть и прочее) - это отдельная задача, выполняющаяся другими методами.
Это относится не только к 1с, так делается с любой системой
1с - это не сайт-визитка
Вы всё время это повторяете.
Я полагаю, что 1с - это классная система, не зря же она стала такой популярной. И код на русском - это на мой взгляд только помогает.
Я понимаю, что это система очень сложная и чтобы грамотно её протестировать, необходимо хорошо понимать, как она устроена.
Но я пока так и не увидел, чем она отличается от других ЕРП-систем, например SAP.
Мои коллеги тестировали SAP - с помощью JMeter и с помощью Load Runner.
С Load Runner было удобнее, так как в нём есть специальные рекордеры, облегчающие процесс записи и параметризации скрипта (проблемы, подобные описанным в статье).
Главное, что я хочу сказать - в SAP (как и в множестве других сложных систем) есть все те проблемы, которые вы описали. Они решаются (обычно глубоким анализом статистики и разработкой профиля тестирования совместно с разработчиками предприятия).
Я из комментариев в этом треде понял, что если репрезентативную нагрузку на систему можно создать несколькими пользователями, то лучше использовать тест-центр.
Что делать, если нельзя - пока ответа нет. Было бы здорово, если бы он появился, это пригодилось бы тем, кому понадобится тестировать 1с в дальнейшем
DvoiNic
12.02.2025 19:34Ваш пример с телевизором не состоятелен, так как зрители не оказывают влияния на работу телевизора
пример демонстрирует ровно то же самое - как зрители возле телевизра мешают друг другу, так и запросы от джиметра...
есть все те проблемы, которые вы описали. Они решаются обычно глубоким анализом статистики и разработкой профиля тестирования
Для того, чтобы статистику анализировать - она прежде всего должна быть. И должна быть релевантная. А не то дерьмо, которое вы получите щупая джиметром веб-сервер..
это пригодилось бы тем, кому понадобится тестировать 1с в дальнейшем
Если тестировать соберется нормальный человек (т.е. человек, представляющий себе 1с, ее внутреннее устройство и внутреннюю работу со всеми реализованными закидонами - профессионал), то он и так знает. Если же "сапоги начнет тачать пирожник", то пусть хоть чем пользуется. Результата не будет.
Ghool
12.02.2025 19:34Ну, чтож.
Оставим тред тому, кто "и так знает".
Ответы ему не нужны, он и так знает.
А я поищу их где-нибудь ещё :)
Спасибо за беседу.
Ghool
12.02.2025 19:34О, это интересно!
А через Vanessa Automation можно создавать нагрузку отправкой трафика, моделируя сотни пользователей с одной нагрузочной странции?nixel
12.02.2025 19:34если использовать механизм автоматизированного тестирования, то нет. тест-менеджер одновременно может взаимодействовать только с одним тест-клиентом. можно запускать n тест-менеджеров, часть из них - с одной нагрузочной станции. подробнее https://infostart.ru/1c/articles/1182048/
в любом случае стоит разобраться с 1С:Тест-Центром.
Ghool
12.02.2025 19:34Спасибо за ответ!
Ну вот и причина, по которой автор использовал JMeter для создания нагрузки.
Я так полагаю, 1000 тест-центров на одном компе запустить проблематично. А чтобы слать запросы в 1000 потоков из JMeter хватит обычной рабочей станции.
Тест-центр, полагаю, учить всё равно надо - для моделирования толстого клиента, и, вероятно ради более точных метрик.
DvoiNic
12.02.2025 19:34Нет, JMeter использовался только потому, что ТС его знал, а разбираться в принципах построения систем на 1с он не захотел.
luluglassgo Автор
12.02.2025 19:34Все верно, JMeter — очень хорошо знакомый инструмент. Но в особенностях построения систем 1С и ТЦ я не то чтобы не захотел разбираться, а просто пока не добрался. Да и у задачи всегда есть дедлайн, который не позволял сесть за глубокое изучение с нуля.
stungnthumz
Получилось?
luluglassgo Автор
На данный момент да.
Пока Тест-Цент вызывает большие опасения по юзабилити его использования и терминологии. Писать скрипты на русском не добавляет вдохновения. А JMeter и Java я знаю хорошо, проверенные инструменты