Очищаем счётчики отдельного теста, вызываем серверную функцию, читаем показатели и не называем их скоростью всего приложения.
Где и как запускать
Полный клиентский модуль формы обработки в менеджере тестов, запущенном с /TESTMANAGER. Это не модуль тестируемой таблицы.
Подготовка
Создайте собственную пустую учебную конфигурацию УчебнаяКонфигурацияСинтаксиса. Первый урок содержит полный модуль отдельной внешней обработки УчебнаяТаблицаТестирования; её данные только в памяти.
Запустите два отдельных тонких клиента собственной учебной базы: тестируемый с /TESTCLIENT -TPort15380, менеджер с /TESTMANAGER. Порт 15380 — собственный учебный; убедитесь, что на нём не работает другой клиент. Не подключайте менеджер к рабочей базе/чужому приложению.
В тестируемом клиенте вручную откройте собственную обработку из первого урока. В менеджере создайте другую внешнюю обработку с командой ВыполнитьПример; полный код одного теста вставьте в её модуль формы.
Перед каждым тестом закройте и заново откройте таблицу в тестируемом клиенте. Исходно в ней A-01/Книга/3, B-02/Ручка/1, C-00/Бумага/2, без ранее установленной сортировки и редактирования.
Каждый тест ищет точный учебный заголовок и таблицу ТаблицаТоваров внутри этой формы. Не заменяйте селекторы на * или первый найденный элемент рабочего приложения.
Это код штатного механизма тестирования 1С, не браузерная проверка HTML. В данном окружении выполнение UI-тестов в настоящей 1С не подтверждено.
&НаКлиенте
Процедура ВыполнитьПример(Команда)
Приложение = Новый ТестируемоеПриложение("127.0.0.1", 15380);
Приложение.УстановитьСоединение();
ИсходныйЛимит = Неопределено;
ОшибкаТеста = "";
Попытка
Форма = Приложение.ПолучитьОбъект(Тип("ТестируемаяФорма"), "Учебная таблица guide-owned-ui-2026", , 10);
Таблица = Форма.ПолучитьОбъект(Тип("ТестируемаяТаблицаФормы"), , "ТаблицаТоваров", 10);
ИсходныйЛимит = Приложение.ПолучитьМаксимальноеВремяВыполненияДействия();
Приложение.УстановитьМаксимальноеВремяВыполненияДействия(10);
Кнопка = Форма.ПолучитьОбъект(Тип("ТестируемаяКнопкаФормы"), , "КнопкаУчебныйСерверныйВызов", 10);
Приложение.ОчиститьНакопленныеПоказателиПроизводительности();
Кнопка.Нажать();
Показатели = Приложение.ПолучитьНакопленныеПоказателиПроизводительности(Ложь);
Для Каждого Пара Из Показатели Цикл
Сообщить("Показатель " + Пара.Ключ + ": " + Строка(Пара.Значение));
КонецЦикла;
Вызовы = Неопределено;
Если Не Показатели.Свойство("Вызовы", Вызовы) Тогда
Если Не Показатели.Свойство("Calls", Вызовы) Тогда
ВызватьИсключение "Поле количества вызовов не найдено в реальном результате";
КонецЕсли;
КонецЕсли;
Сообщить(ТипЗнч(Вызовы) = Тип("Число"));
Сообщить(Вызовы >= 1);
ПолеСтатуса = Форма.ПолучитьОбъект(Тип("ТестируемоеПолеФормы"), , "ПолеУчебногоСтатуса", 10);
Сообщить(ПолеСтатуса.ПолучитьОтображаемыйТекст() = "Сервер вернул 3");
СнимокСОчисткой = Приложение.ПолучитьНакопленныеПоказателиПроизводительности(Истина);
Сообщить("Показателей в снимке с очисткой: " + Строка(СнимокСОчисткой.Количество()));
Исключение
ОшибкаТеста = ОписаниеОшибки();
КонецПопытки;
ОшибкиЗавершения = ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит);
Если Не ПустаяСтрока(ОшибкаТеста) Или Не ПустаяСтрока(ОшибкиЗавершения) Тогда
ВызватьИсключение "Ошибка учебного UI-теста: " + ОшибкаТеста + " " + ОшибкиЗавершения;
КонецЕсли;
Сообщить("Сценарий завершён без исключения. Отдельно сверяйте контрольные Истина и видимые данные учебного клиента");
КонецПроцедуры
&НаКлиенте
Функция ЗавершитьСобственныйУчебныйТест(Приложение, ИсходныйЛимит)
ОшибкиЗавершения = "";
Если ТипЗнч(ИсходныйЛимит) = Тип("Число") Тогда
Попытка
Приложение.УстановитьМаксимальноеВремяВыполненияДействия(ИсходныйЛимит);
Исключение
ОшибкиЗавершения = "Не восстановлен лимит действий: " + ОписаниеОшибки();
КонецПопытки;
КонецЕсли;
Попытка
Приложение.РазорватьСоединение();
Исключение
ОшибкиЗавершения = ОшибкиЗавершения + " Не разорвано соединение: " + ОписаниеОшибки();
КонецПопытки;
Возврат ОшибкиЗавершения;
КонецФункцииРазбор по шагам
Сначала открываем собственную таблицу в отдельном клиенте тестирования. Подключаемся только к 127.0.0.1:15380, ищем точный заголовок и внутреннее имя таблицы с таймаутами 10 секунд.
Нужен расширенный fixture с собственной кнопкой из первого урока этой группы. Она вызывает серверную функцию, возвращающую константу 3; записи базы не используются.
ОчиститьНакопленныеПоказателиПроизводительности сбрасывает накопленный участок измерения. Это собственный изолированный тест, не общий сбор статистики рабочего приложения.
ПолучитьНакопленныеПоказателиПроизводительности(Ложь) читает без сброса, Истина возвращает снимок и очищает накопленное.
Имена Вызовы/Calls зависят от варианта встроенного языка менеджера тестов, поэтому проверяем оба фактических ключа. Нет выдуманного Requests или обращения к отсутствующему свойству.
Вызовов ожидается хотя бы один, не строго один: отображение/обработчики могут вызвать дополнительные запросы. Длительность — серверные вызовы измеряемого участка, не доказательство полной скорости интерфейса.
После теста восстанавливаем исходный лимит действий и отдельно пытаемся разорвать соединение, даже при исключении. Ошибки завершения не скрываем; разрыв соединения не закрывает тестируемое приложение.
Как проверить результат
Три контрольных Истина: количество вызовов числовое и не меньше 1, поле статуса Сервер вернул 3.
Фактические четыре показателя снимка проверьте по справке и языку менеджера. Не заявляйте заранее фиксированные байты или время.
Ожидаемый результат
Подготовлен конкретный измеряемый серверный участок с раздельным чтением и сбросом показателей.
На что обратить внимание
Не измеряйте рабочее приложение, сбрасывая чужую накопленную статистику.
Накопленные серверные показатели не являются профилировщиком всех клиентских операций.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.