Разработка автоматизированного тестирования на основании настольного приложения при помощи платформы 1С: Предприятие 8.3 (версия 01.12)

23.11.22

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

В данной статье я подробно разберу процесс создания автоматизированного тестирования для приложения на базе 1С: Предприятие 8.3.

В рамках этой статьи хотел бы подробно разобрать процесс создания автоматизированного тестирования для приложения, разработанного на базе 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");

	ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.ПерейтиКСледующемуЭлементу();

	ПолеКачество = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Качество");
	ПолеКачество.ОткрытьВыпадающийСписок();

	ПолеКачество.ОжидатьФормированияВыпадающегоСписка();

	ПолеКачество.ВыполнитьВыборИзСпискаВыбора("Средняя");

	ГруппаКоманднаяПанель = ОкноПриложенияНоменклатураСозданиеФормаНоменклатураСоздание.НайтиОбъект(Тип("ТестируемаяГруппаФормы"), "Командная панель");
	КнопкаЗаписатьИЗакрыть = ГруппаКоманднаяПанель.НайтиОбъект(Тип("ТестируемаяКнопкаФормы"), "Записать и закрыть");
	КнопкаЗаписатьИЗакрыть.Нажать();

КонецПроцедуры

Обратите внимание! Из-за возникновения неполадок этот листинг немного отличается от предыдущих тем, что ТестируемоеПриложение заменено на ТестовоеПриложение.

 

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

Выбираем необходимые пути и выполняем тестовый сценарий.

Если всё правильно, то можно успеть заметить ускоренный автоматический процесс заполнения данных. После завершения можем увидеть в нашем справочнике/документе новые данные.

Тестирование прошло успешно!

Конфигурация тестирование автоматизация автоматическое

См. также

DevOps и автоматизация разработки Тестирование QA Программист Пользователь Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Зарплата и Управление Персоналом 3 и версии КОРП: 3.1.30.57.

2160 руб.

05.08.2024    1275    12    1    

7

Тестирование QA DevOps и автоматизация разработки Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.17.113.

2400 руб.

04.07.2022    8366    38    1    

29

Тестирование QA DevOps и автоматизация разработки Программист Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.156.30.

1800 руб.

20.01.2022    7782    19    0    

13

Облачные сервисы, хостинг Linux Тестирование QA Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Завершающая публикация цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием, отказоустойчивостью и прочая, прочая... В этой статье мы определяемся с быстродействием системы, проводим нагрузочное тестирование и отпускаем ее в свободное плавание (зачеркнуто) выпускаем ее в продуктовый контур, где, конечно же, придется отлавливать ошибки, мониторить состояние и т.п.

31.10.2024    1307    capitan    0    

0

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

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

21.10.2024    2775    leemuar    8    

22

Тестирование QA Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

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

30.08.2024    1289    Scorpion4eg    6    

7

Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

Иногда возникают ситуации, когда надо развернуть тестовую базу клиента / свою на серверах Windows или Linux. Тестовые базы могут понадобиться в разных ситуациях: у клиента ошибка, на нашей базе она не воспроизводится, реализуем новый функционал и хотелось бы протестировать на Linux и т.д. А теперь представим, что это все на потоке. Что тестовых баз 1С не одна, а 20-30. И получаем проблему, что непонятно, занята она сейчас кем-то или нет. Предлагаю вариант решения этой проблемы.

28.06.2024    1509    Diversus    12    

5