Автоматизированное тестирование в среде «1С:Предприятие 8.3» — это мощный инструмент, позволяющий существенно повысить качество разрабатываемых конфигураций и минимизировать количество ошибок при выпуске обновлений. Однако на начальном этапе настройки разработчики часто сталкиваются с техническими сложностями, связанными с корректным запуском сеансов в режимах Менеджера тестирования (Test Manager) и Клиента тестирования (Test Client), особенно когда речь идет о работе в серверном (клиент-серверном) режиме.
В этой статье мы подробно разберем, как правильно сформировать строку запуска для серверной базы данных, как установить программную связь между процессами во встроенном языке 1С, как управлять сетевыми портами и обойти основные архитектурные ограничения платформы.
Прежде чем переходить к написанию скриптов запуска, важно четко разграничить роли двух сеансов, участвующих в процессе автоматизации:
Для запуска системы «1С:Предприятие» в режиме клиента тестирования используется командный файл или функция запуска операционной системы. Главная ошибка начинающих разработчиков заключается в путанице между параметрами для файловых и серверных баз данных.
Рассмотрим структуру параметров командной строки подробнее:
/F используется исключительно для файловых баз данных и указывает путь к каталогу на диске (например, /F "C:\Users\username\Documents\1C\DemoBase")./S предназначен для серверных (клиент-серверных) баз данных. После него указывается адрес базы на сервере 1С.Синтаксис параметра /S формируется следующим образом:
/S"[ИмяСервера]\[ИмяБазыНаСервере]"
Разберем конкретный пример строки запуска тестового клиента для серверной базы:
"C:\Program Files\1cv8\8.3.21.1630\bin\1cv8.exe" ENTERPRISE /S"server-1C\ZUP" /N"Администратор" /P"12345" /TESTCLIENT
Проанализируем эту строку по шагам:
"C:\Program Files\1cv8\8.3.21.1630\bin\1cv8.exe" — полный путь к исполняемому файлу платформы 1С. Если в пути присутствуют пробелы, весь путь обязательно заключается в двойные кавычки.ENTERPRISE — режим запуска в качестве клиентского приложения «1С:Предприятие»./S"server-1C\ZUP" — указание на серверную базу данных. Здесь server-1C — сетевое имя или IP-адрес сервера приложений 1С, а ZUP — имя информационной базы в кластере 1С./N"Администратор" — имя пользователя (логин) для авторизации в системе./P"12345" — пароль пользователя (если задан)./TESTCLIENT — ключевой флаг, который сообщает платформе, что данный сеанс запускается в специальном режиме готовности к приему команд тестирования.Выполнять запуск тестового клиента вручную неудобно. На практике менеджер тестирования должен самостоятельно инициализировать запуск клиента, выполнить тесты и закрыть приложение. Для этого используется метод встроенного языка ЗапуститьСистему.
Посмотрим на пример кода, который запускает клиент тестирования программно:
ПутьКПлатформе = """C:\Program Files\1cv8\8.3.21.1630\bin\1cv8.exe""";
ПараметрыЗапуска = "ENTERPRISE /S""server-1C\ZUP"" /N""Администратор"" /P""12345"" /TESTCLIENT";
СтрокаЗапуска = ПутьКПлатформе + " " + ПараметрыЗапуска;
ЗапуститьСистему(СтрокаЗапуска);
Обратите внимание на экранирование кавычек во встроенном языке 1С: двойные кавычки внутри строки удваиваются ("").
Однако просто вызвать запуск процесса операционной системы недостаточно. Поскольку запуск приложения происходит асинхронно, менеджеру тестирования требуется время для ожидания полной загрузки клиента. Для установления надежной связи используется объект ТестируемоеПриложение.
Разберем отказоустойчивый алгоритм подключения к тестовому клиенту с обработкой ожидания:
ПортТестирования = 1538; // Порт по умолчанию
ТестовоеПриложение = Новый ТестируемоеПриложение("localhost", ПортТестирования);
Подключен = Ложь;
Таймаут = ТекущаяДата() + 30; // Ожидаем запуск клиента в течение 30 секунд
Пока ТекущаяДата() < Таймаут Цикл
Попытка
ТестовоеПриложение.УстановитьСоединение();
Подключен = Истина;
Прервать;
Исключение
// Ждем небольшую паузу и пробуем подключиться снова
// (Платформа может запускаться несколько секунд)
КонецПопытки;
КонецЦикла;
Если Не Подключен Тогда
ВызватьИсключение "Не удалось установить соединение с клиентом тестирования за отведенное время!";
КонецЕсли;
// После успешного подключения можно управлять интерфейсом клиента:
ГлавноеОкно = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"));
// Пример открытия справочника:
// ГлавноеОкно.ВыполнитьКоманду("e1cib/command/Справочник.Номенклатура.Создать");
Связь между менеджером и клиентом тестирования осуществляется по протоколу TCP/IP. По умолчанию платформа использует сетевой порт 1538.
Если вам требуется запустить одновременно несколько клиентов тестирования на одном компьютере (например, для проверки параллельной работы пользователей под разными ролями или в рамках нагрузочных тестов), возникнет конфликт портов. Чтобы этого избежать, каждому клиенту тестирования необходимо назначить индивидуальный сетевой порт.
Для явного указания порта используется ключ -TPort в параметрах запуска тестового клиента:
"C:\Program Files\1cv8\8.3.21.1630\bin\1cv8.exe" ENTERPRISE /S"server-1C\ZUP" /N"Админ" /TESTCLIENT -TPort 1540
В коде менеджера тестирования при создании объекта ТестируемоеПриложение мы должны передать этот же порт в качестве второго параметра:
ПортТестирования = 1540;
ТестовоеПриложение = Новый ТестируемоеПриложение("localhost", ПортТестирования);
ТестовоеПриложение.УстановитьСоединение();
Если вы отлаживаете логику тестов в процессе разработки и не хотите постоянно запускать сеансы через командную строку, вы можете настроить параметры автоматического запуска непосредственно в Конфигураторе 1С:
Разработка сценариев автоматизации «с нуля» во встроенном языке — процесс трудоемкий. Платформа 1С предлагает встроенный механизм интерактивной записи действий пользователя. Вы можете запустить клиент тестирования в специальном режиме логирования:
"C:\Program Files\1cv8\8.3.21.1630\bin\1cv8.exe" ENTERPRISE /S"server-1C\ZUP" /N"Администратор" /TESTCLIENT /UILogRecorder -File "C:\Tests\recorded_steps.xml"
В этом режиме при работе пользователя в интерфейсе программа будет автоматически фиксировать все клики, заполнение полей и выбор элементов, сохраняя их в виде XML-структуры по указанному пути. В дальнейшем этот XML-файл можно преобразовать в готовый программный код сценария.
При организации автоматизированного тестирования обязательно учитывайте следующие архитектурные особенности платформы 1С:
1cv8.exe может оставаться в оперативной памяти ОС в «скрытом» режиме, продолжая удерживать занятый сетевой порт. Хорошей практикой является периодическая очистка процессов или программный перебор портов перед началом прогона тестов с вызовом метода Отключить(Истина).