В рамках этой статьи хотел бы подробно разобрать процесс создания автоматизированного тестирования для приложения, разработанного на базе 1С: Предприятие 8.3.
Возможно, где-то буду описывать крайне подробно, как может показаться опытным программистам, но делаю я это в первую очередь для себя и для того, чтобы это можно было повторить даже совсем начинающим программистам.
Шаг 1.
Создаём новую информационную базу. Я её назвал "МенеджерТестирования" для понятности. Также немаловажно указать понятный путь.
Шаг 2.
Переходим в конфигурацию. Далее во вкладку Сервис -> Параметры -> Запуск 1С: Предприятия -> Дополнительные -> Запускать как менеджер тестирования.
Шаг 3.
Теперь необходимо создать новую обработку (в панели объектов конфигурации, слева). Я назвал её "ЗапускТестов".
Внутри неё создаём новую форму (обработки).
В этой форме в окне реквизитов создаём два новых реквизита: Платформа и ПутьКБазе. Перетаскиваем их на форму.
В завершении, каждому из добавленных реквизитов в свойствах переходим в пункт Использование -> Кнопка выбора -> "Да".
Далее, не выходя из формы, добавляем новую команду - "ТестовыйСценарий". Перетаскиваем её на форму.
Теперь вернёмся к нашим полям путей. В свойствах поля "Платформа" переходим в События -> Начало выбора и теперь жмём на лупу и создаём новую процедуру на клиенте.
Открывается модуль, внутри которого должен лежать следующий код:
&НаКлиенте
Процедура ПлатформаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл базы 1С";
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.МножественныйВыбор = Ложь;
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.Каталог = "c:\";
Если Диалог.Выбрать() Тогда
Платформа = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Теперь пропишем процедуру для пути к базе. Переходим в свойства поля "ПутьКБазе" -> События -> НачалоВыбора -> Создаём процедуру на клиенте.
Туда мы пропишем следующий код:
&НаКлиенте
Процедура ПутьКБазеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Диалог.Заголовок = "Выберите путь к базе для тестирования";
Диалог.МножественныйВыбор = Ложь;
Диалог.Каталог = "";
Если Диалог.Выбрать() Тогда
ПутьКБазе = Диалог.Каталог;
КонецЕсли;
КонецПроцедуры
Чтобы у нас всё заработало, необходимо перейти в свойства всей конфигурации и в пункте "Совместимость" найти поле "Режим использования синхронных вызовов..." -> ставим Использовать.
Примерно так будет выглядеть окно
Проверяем! Указываем необходимые пути и если ошибок не возникает - идём дальше.
Шаг 4.
Теперь пропишем сценарий для кнопки.
Выбираем команду -> Свойства -> Действие -> На клиенте
Внутри пропишем следующий код:
&НаКлиенте
Процедура ТестовыйСценарий(Команда)
ЗапуститьСистему("""Платформа"" ENTERPRISE /F " + ПутьКБазе + " /TESTCLIENT");
ТестируемоеПриложение = Новый ТестируемоеПриложение();
МаксИтераций = 10;
Для Счетчик = 1 По МаксИтераций Цикл
Попытка
ТестируемоеПриложение.УстановитьСоединение();
Прервать;
Исключение
Если Счетчик = МаксИтераций Тогда
Сообщить(ОписаниеОшибки());
КонецЕсли;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Шаг 5.
Переходим в конфигурацию основного, тестируемого приложения. Запускаем специальную отладку: Сервис -> "Запустить для записи журнала действий пользователя".
Запустится программа, в верхнем левом углу которой появятся необходимые нам дополнительные кнопки.
Для записи действий нажимаем кнопку "Начать".
После нажатия, совершаем тестируемое действие (например, заносим новые данные в Номенклатуру).
Важно! Если происходит запись данных через форму элемента, то там необходимо переключаться на новые поля не при помощи курсора, а клавиши Tab.
После выполнения необходимых действий тестирования, нажимаем на кнопку "Завершить запись журнала действий пользователя". Потом отобразится журнал - страница с кучей англоязычного кода. Нам необходимо весь этот текст необходимо сохранить в текстовый файл, чтобы не потерять.
Шаг 6.
Возвращаемся в менеджер тестирования.
Жмём ПКМ по Обработкам -> Вставить внешнюю обработку -> В диалоговом окне выбираем файл "ULogToScript". Я буду работать с этой наработкой.
Запускаем менеджер тестирования. Далее переключаемся на вкладку "Преобразование журнала действий пользователя".
Мы попадаем на новое для нас окно преобразования. Здесь нужно поставить две галочки, а также вставить ранее сохранённый нами журнал действий пользователя (который на английском). Жмём на красивую кнопку "Преобразовать".
Должно выглядеть так:
Преобразование журнала действий пользователя
В окне сценарий появился необходимый преобразованный код. Копируем его или сохраняем в файл и идём дальше.
Переходим в конфигуратор. Открываем форму ЗапускТестов и переходим в модуль. Открываем процедуру кнопки тестового сценария и добавляем в конец следующие строки:
ГлавноеОкноФормы = ТестируемоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"));
КомандныйИнтерфейсГлавногоОкна = ГлавноеОкноФормы.ПолучитьКомандныйИнтерфейс();
И после процедуры, в которой мы это прописали, вставляем целиком весь преобразованный русскоязычный журнал действий.
Чтобы обратиться к нему, после тех двух строчек, что написаны выше, необходимо вызвать процедуру журнала, передав в параметр наше тестируемое приложение.
По итогу, модуль формы ЗапускТестов должен хранить в себе примерно такой код:
&НаКлиенте
Процедура ПлатформаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл базы 1С";
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.МножественныйВыбор = Ложь;
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.Каталог = "c:\";
Если Диалог.Выбрать() Тогда
Платформа = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПутьКБазеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Диалог.Заголовок = "Выберите путь к базе для тестирования";
Диалог.МножественныйВыбор = Ложь;
Диалог.Каталог = "";
Если Диалог.Выбрать() Тогда
ПутьКБазе = Диалог.Каталог;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТестовыйСценарий(Команда)
ЗапуститьСистему("""Платформа"" ENTERPRISE /F " + ПутьКБазе + " /TESTCLIENT");
ТестовоеПриложение = Новый ТестируемоеПриложение();
МаксИтераций = 10;
Для Счетчик = 1 По МаксИтераций Цикл
Попытка
ТестовоеПриложение.УстановитьСоединение();
Прервать;
Исключение
Если Счетчик = МаксИтераций Тогда
Сообщить(ОписаниеОшибки());
КонецЕсли;
КонецПопытки;
КонецЦикла;
// Вставляем тесты
ГлавноеОкноФормы = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"));
КомандныйИнтерфейсГлавногоОкна = ГлавноеОкноФормы.ПолучитьКомандныйИнтерфейс();
ТестовыйСценарий_22_11_2022(ТестовоеПриложение);
КонецПроцедуры
&НаКлиенте
Процедура ТестовыйСценарий_22_11_2022(ТестовоеПриложение)
ОкноПриложенияОсновноеКнопкаКомандногоИнтерфейсаНоменклатураНажать(ТестовоеПриложение);
ОкноПриложенияНоменклатураКнопкаСоздатьНажать(ТестовоеПриложение);
ОкноПриложенияНоменклатураСозданиеПолеНаименованиеПерейтиКСледующемуЭлементу(ТестовоеПриложение);
ОкноПриложенияНоменклатураСозданиеКнопкаЗаписатьИЗакрытьНажать(ТестовоеПриложение);
КонецПроцедуры
&НаКлиенте
Процедура ОкноПриложенияОсновноеКнопкаКомандногоИнтерфейсаНоменклатураНажать(ТестовоеПриложение)
ОкноПриложенияОсновное = Неопределено;
КлиентсткиеОкнаТестируемогоПриложения = ТестовоеПриложение.ПолучитьПодчиненныеОбъекты();
Для Каждого ТестируемоеОкно Из КлиентсткиеОкнаТестируемогоПриложения Цикл
Если ТестируемоеОкно.Основное Тогда
ОкноПриложенияОсновное = ТестируемоеОкно;
Прервать;
КонецЕсли;
КонецЦикла;
ОкноПриложенияОсновноеCommandInterface = ОкноПриложенияОсновное.ПолучитьКомандныйИнтерфейс();
ГруппаКомандногоИнтерфейсаПанельФункцийТекущегоРаздела = ОкноПриложенияОсновноеCommandInterface.НайтиОбъект(Тип("ТестируемаяГруппаКомандногоИнтерфейса"), "Панель функций текущего раздела");
КнопкаКомандногоИнтерфейсаНоменклатура = ГруппаКомандногоИнтерфейсаПанельФункцийТекущегоРаздела.НайтиОбъект(Тип("ТестируемаяКнопкаКомандногоИнтерфейса"), "Номенклатура");
КнопкаКомандногоИнтерфейсаНоменклатура.Нажать();
КонецПроцедуры
&НаКлиенте
Процедура ОкноПриложенияНоменклатураКнопкаСоздатьНажать(ТестовоеПриложение)
ОкноПриложенияНоменклатура = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"), "Номенклатура", , 30);
ОкноПриложенияНоменклатураФормаНоменклатура = ОкноПриложенияНоменклатура.НайтиОбъект(Тип("ТестируемаяФорма"), "Номенклатура");
ГруппаКоманднаяПанель = ОкноПриложенияНоменклатураФормаНоменклатура.НайтиОбъект(Тип("ТестируемаяГруппаФормы"), "Командная панель");
КнопкаСоздать = ГруппаКоманднаяПанель.НайтиОбъект(Тип("ТестируемаяКнопкаФормы"), "Создать");
КнопкаСоздать.Нажать();
КонецПроцедуры
&НаКлиенте
Процедура ОкноПриложенияНоменклатураСозданиеПолеНаименованиеПерейтиКСледующемуЭлементу(ТестовоеПриложение)
ОкноПриложенияНоменклатураСоздание = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"), "Номенклатура (создание)", , 30);
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание = ОкноПриложенияНоменклатураСоздание.НайтиОбъект(Тип("ТестируемаяФорма"), "Номенклатура (создание)");
ПолеНаименование = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Наименование");
ПолеНаименование.ВвестиТекст("Номенклатура3");
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();
КонецПроцедуры
&НаКлиенте
Процедура ОкноПриложенияНоменклатураСозданиеКнопкаЗаписатьИЗакрытьНажать(ТестовоеПриложение)
ОкноПриложенияНоменклатураСоздание = ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"), "Номенклатура (создание) *", , 30);
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание = ОкноПриложенияНоменклатураСоздание.НайтиОбъект(Тип("ТестируемаяФорма"), "Номенклатура (создание) *");
ПолеЕдиницаИзмерения = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Единица измерения");
ПолеЕдиницаИзмерения.ОткрытьВыпадающийСписок();
ПолеЕдиницаИзмерения.ОжидатьФормированияВыпадающегоСписка();
ПолеЕдиницаИзмерения.ВыполнитьВыборИзСпискаВыбора("шт");
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();
ПолеДлинаМ = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Длина, м");
ПолеДлинаМ.ВвестиТекст("1,00");
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();
ПолеКоличество = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Количество");
ПолеКоличество.ВвестиТекст("1");
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();
ПолеТипНоменклатуры = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Тип номенклатуры");
ПолеТипНоменклатуры.ОткрытьВыпадающийСписок();
ПолеТипНоменклатуры.ОжидатьФормированияВыпадающегоСписка();
ПолеТипНоменклатуры.ВыполнитьВыборИзСпискаВыбора("Материалы");
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();
ПолеТипМатериалаФурнитуры = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Тип материала/фурнитуры");
ПолеТипМатериалаФурнитуры.ВвестиТекст("Новый тип");
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();
ПолеЦена = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Цена");
ПолеЦена.ВвестиТекст("366,00");
ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();
ПолеКачество = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Качество");
ПолеКачество.ОткрытьВыпадающийСписок();
ПолеКачество.ОжидатьФормированияВыпадающегоСписка();
ПолеКачество.ВыполнитьВыборИзСпискаВыбора("Средняя");
ГруппаКоманднаяПанель = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемаяГруппаФормы"), "Командная панель");
КнопкаЗаписатьИЗакрыть = ГруппаКоманднаяПанель.НайтиОбъект(Тип("ТестируемаяКнопкаФормы"), "Записать и закрыть");
КнопкаЗаписатьИЗакрыть.Нажать();
КонецПроцедуры
Обратите внимание! Из-за возникновения неполадок этот листинг немного отличается от предыдущих тем, что ТестируемоеПриложение заменено на ТестовоеПриложение.
Проверяем модуль на наличие возможных синтаксических ошибок и запускаем наш менеджер тестирования.
Выбираем необходимые пути и выполняем тестовый сценарий.
Если всё правильно, то можно успеть заметить ускоренный автоматический процесс заполнения данных. После завершения можем увидеть в нашем справочнике/документе новые данные.
Тестирование прошло успешно!