Генерация сценариев тестирования внешних печатных форм средствами Vanessa Automation

Публикация № 1250707

Методология - DevOps - Vanessa Automation

Vanessa тестирование

Предложен способ автоматической генерации сценариев для тестирования внешних печатных форм средствами Vanessa Automation

Для поддержания работоспособности конфигурации необходимо проводить тестирование. В частности, это касается внешних печатных форм. 1С часто переименовывает названия методов в своих общих модулях, после чего внешняя печатная форма становится неработоспособной. Свежий пример: изменение наименования функции с ПолучитьНомерНаПечать() на НомерНаПечать() в общем модуле ПрефиксацияОбъектовКлиентСервер при обновлении ERP на 2.4.12.64. К счастью, нет необходимости вручную формировать все доработанные печатные формы, потому что есть механизмы автоматизации процесса тестирования. Например, Vanessa Automation, которая проводит тестирование по подготовленному скрипту. Но подготовка скрипта тоже отнимает время и силы, и к тому же всегда можно забыть включить в скрипт новую печатную форму. Чтобы автоматизировать создание скриптов и гарантировать, что в базе не появится внешней печатной формы, для которой не будут проводиться тесты, предлагается механизм автоматической генерации скриптов тестирования.

Процедуры генерации размещаются в общем модуле мт_ТестированиеКонфигурации_Служебный. Текст этого модуля:

 

 

#Область ГенераторСценариевТестирования_VanessaAutomation

Функция ТекстФайлаСценариевТестированияПечатныхФорм() Экспорт
	
	//Функция генерирует текст файла сценариев для тестирования средствами Vanessa Automation 
	//Сейчас реализовано для дополнительных печатных форм, планируется сделать для всех модифицированных в расширении печатных форм
	
	ТекстФайлаСценариев = Новый	ТекстовыйДокумент;
	
	ТекстФайлаСценариев.ДобавитьСтроку("#language: ru");
	ТекстФайлаСценариев.ДобавитьСтроку("#encoding: utf-8");
	ТекстФайлаСценариев.ДобавитьСтроку("#Сгенерирован обработкой СоздатьСценарииТестированияПечатныхФорм()");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	ТекстФайлаСценариев.ДобавитьСтроку("Функционал: Проверка печатных форм из дополнительных отчетов и обработок");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	ТекстФайлаСценариев.ДобавитьСтроку("Как Пользователь");
	ТекстФайлаСценариев.ДобавитьСтроку("Я хочу проверить отсутствие синтаксических ошибок в доработанных печатных формах");
	ТекстФайлаСценариев.ДобавитьСтроку("Чтобы ошибки не возникли при работе пользователей");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	ТекстФайлаСценариев.ДобавитьСтроку("Контекст: ");
	ТекстФайлаСценариев.ДобавитьСтроку("	Дано Я запускаю сценарий открытия TestClient или подключаю уже существующий");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	
	СценарииТестирования = ПустаяТаблицаСценариевТестирования();
	
	Запрос = Новый Запрос();
	Запрос.Текст = "ВЫБРАТЬ
	               |	ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
	               |ИЗ
	               |	Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
	               |ГДЕ
	               |	ДополнительныеОтчетыИОбработки.Публикация <> ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	ДополнительныеОтчетыИОбработки.Наименование";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		
		ХранилищеОбработки = Выборка.Ссылка.ХранилищеОбработки;
		ДвоичныеДанные = ХранилищеОбработки.Получить();
		ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf");
		ДвоичныеДанные.Записать(ИмяВременногоФайла);
		ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
		ВнешняяОбработка.ДобавитьСценарииТестирования(СценарииТестирования);
		
	КонецЦикла;
	
	Для Каждого Сценарий Из СценарииТестирования Цикл
		
		ТекстФайлаСценариев.ДобавитьСтроку("");
		ТекстФайлаСценариев.ДобавитьСтроку("Сценарий: " + Сценарий.Наименование);
		ТекстФайлаСценариев.ДобавитьСтроку("");
		Если ЗначениеЗаполнено(Сценарий.Комментарий) Тогда
			ТекстФайлаСценариев.ДобавитьСтроку("	#" + Сценарий.Комментарий);
		КонецЕсли;
		ТекстФайлаСценариев.ДобавитьСтроку("	Когда я открываю навигационную ссылку """ + Сценарий.НавигационнаяСсылка + """");
		
		Для Каждого Команда Из Сценарий.Команды Цикл
			ТекстФайлаСценариев.ДобавитьСтроку("	И я нажимаю на кнопку '" + Команда + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	Тогда открылось окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	");
		КонецЦикла;
		
	КонецЦикла;
	
	Возврат ТекстФайлаСценариев;
	
КонецФункции

Функция ПустаяТаблицаСценариевТестирования()
	
	ТаблицаСценариев = Новый ТаблицаЗначений;
	ТаблицаСценариев.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("НавигационнаяСсылка", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("ЗаголовокОкнаПечатнойФормы", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("Команды", Новый ОписаниеТипов("Массив"));
	
	возврат ТаблицаСценариев;
	
КонецФункции

Функция ПроверитьНаличиеСценариевТестирования(ВнешнийОбъект) Экспорт
	
	ТекстСообщенияОбОшибке = "Не указаны сценарии тестирования! См. описание в общем модуле ""мт_ТестированиеКонфигурации_Служебный""";
	
	СценарииТестирования = ПустаяТаблицаСценариевТестирования();
	Попытка
		ВнешнийОбъект.ДобавитьСценарииТестирования(СценарииТестирования);
		Если СценарииТестирования.Количество() = 0 Тогда
			ВызватьИсключение ТекстСообщенияОбОшибке;
		КонецЕсли;
	Исключение
		ВызватьИсключение ТекстСообщенияОбОшибке;
	КонецПопытки;

КонецФункции

#КонецОбласти

 

Данные для генерации скрипта должны быть размещены в процедуре ДобавитьСценарииТестирования() модуля объекта внешней печатной формы:

 

В этой процедуре указывается:
- наименование сценария,
- необязательный комментарий (я в нем указал номер и дату документа), 
- навигационная ссылка документа
- заголовок окна печатной формы (по этому заголовку при тестировании будет определяться, сформировалась печатная форма или нет)
- массив команд печатной формы (массив наименований пунктов меню в подменю "Печать").

Навигационную ссылку объекта информационной базы можно получить через функцию ПолучитьНавигационнуюСсылку. Я вынес вызов этой функции в общую команду мт_ПоказатьНавигационнуюСсылку, и привязал ее вызов к необходимым документам, после чего в форме этих документов появилась соответствующая кнопка:

 

Для генерации скрипта я сделал общую форму "мт_ГенераторСценариевТестирования_VanessaAutomation" с одним полем "Папка скриптов". Вот код этой формы:

 

Осталось одно: чтобы в справочник дополнительных отчетов и обработок невозможно было добавить печатную форму, в которой не описан сценарий тестирования. Для этого я внес следующие изменения в процедуру ПриПолученииРегистрационныхДанных общего модуля "ДополнительныеОтчетыИОбработки":

 

Теперь, если в модуле внешней печатной формы не указаны данные для генерации скрипта проверки, то при ее подключении будет выдаваться ошибка.

В результате работы генератора сценариев получается примерно такой файл:

 

 

Скачать файлы

Наименование Файл Версия Размер
Генерация сценариев тестирования внешних печатных форм средствами Vanessa Automation:
.cfe 15,95Kb
15.06.20
0
.cfe 15,95Kb Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Pr-Mex 125 15.06.20 17:48 Сейчас в теме
2. artbear 1185 18.06.20 09:31 Сейчас в теме
(0) Интересное решение.
В Vanessa-ADD также будет работать.
3. artbear 1185 18.06.20 09:34 Сейчас в теме
(0) Давно размышляю над дымовым тестом печатных форм, без автогенерации.
Несколько лет назад даже в одном платном проекте сделал для компании-заказчика аналогичный дымовой тест на базе Ванесса-АДД, тест кодом, без использования фич.
4. AlexPC 19.06.20 09:14 Сейчас в теме
Для конфигураций на БСП можно обойтись без доработки ВПЧ на первый взгляд.
Данные можно получить из сведений:
Функция ЗаполнитьСценарийТестированияПоДаннымОбработки(СценарииТестирования, СведенияОВнешнейОбработке)
	
	Для Каждого мСтрока Из СведенияОВнешнейОбработке.Назначение Цикл
		
		Запрос = Новый Запрос;
		
		Если СтрНайти(мСтрока, "Документ.") > 0 Тогда
			Запрос.Текст = 
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	Документ.Ссылка КАК Ссылка,
				|	ПРЕДСТАВЛЕНИЕ(Документ.Ссылка) КАК Представление
				|ИЗ
				|	Документ.АвансовыйОтчет КАК Документ
				|
				|УПОРЯДОЧИТЬ ПО
				|	Документ.Дата УБЫВ";
			
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.АвансовыйОтчет", мСтрока);
		ИначеЕсли  СтрНайти(мСтрока, "Справочник.") > 0 Тогда
			Запрос.Текст = 
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	Справочник.Ссылка КАК Ссылка,
				|	ПРЕДСТАВЛЕНИЕ(Справочник.Ссылка) КАК Представление
				|ИЗ
				|	Справочник.Банки КАК Справочник
				|
				|УПОРЯДОЧИТЬ ПО
				|	Справочник.Код УБЫВ";
			
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Банки", мСтрока);
		Иначе
			Продолжить;
		КонецЕсли;
		РезультатЗапроса = Запрос.Выполнить();
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		Если ВыборкаДетальныеЗаписи.Следующий() Тогда
			
			Сценарий = СценарииТестирования.Добавить();
			Сценарий.Наименование = "Формирование печатной формы """ + СведенияОВнешнейОбработке.Наименование + """ для объекта """ + мСтрока + """";
			Сценарий.Комментарий = ВыборкаДетальныеЗаписи.Представление;
			Сценарий.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ВыборкаДетальныеЗаписи.Ссылка);
			Сценарий.ЗаголовокОкнаПечатнойФормы = "Печать документа";
			
			мКоманды = Новый Массив;
			Для Каждого Команда Из СведенияОВнешнейОбработке.Команды Цикл
				мКоманды.Добавить(Команда.Представление);
			КонецЦикла;
			
			Сценарий.Команды = мКоманды;
	
		КонецЕсли;
		
	КонецЦикла;
	
КонецФункции
Показать


а проверку заголовка заменить на проверку имени формы:
	Для Каждого Сценарий Из СценарииТестирования Цикл
		
		ТекстФайлаСценариев.ДобавитьСтроку("");
		ТекстФайлаСценариев.ДобавитьСтроку("Сценарий: " + Сценарий.Наименование);
		ТекстФайлаСценариев.ДобавитьСтроку("");
		Если ЗначениеЗаполнено(Сценарий.Комментарий) Тогда
			ТекстФайлаСценариев.ДобавитьСтроку("	#" + Сценарий.Комментарий);
		КонецЕсли;
		ТекстФайлаСценариев.ДобавитьСтроку("	Когда я открываю навигационную ссылку """ + Сценарий.НавигационнаяСсылка + """");
		
		Для Каждого Команда Из Сценарий.Команды Цикл
			ТекстФайлаСценариев.ДобавитьСтроку("	И я нажимаю на кнопку '" + Команда + "'");
			//ТекстФайлаСценариев.ДобавитьСтроку("	Тогда открылось окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			//ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	Тогда открылась форма с именем  'ОбщаяФорма.ПечатьДокументов'");
			ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю текущее окно'");
			ТекстФайлаСценариев.ДобавитьСтроку("	");
		КонецЦикла;
		ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю текущее окно'");
		
	КонецЦикла;
Показать


P.S. Понятно, что для красоты нужно докрутить дополнительные проверки - например признак проведения у документов или наличие кода у справочника + игнорирование групп.
5. ipoloskov 120 19.06.20 10:46 Сейчас в теме
(4) дело в том, что печатная форма в общем случае предназначена не для любого первого попавшегося документа. В моем случае есть ряд форм, которые требуют наличия серий в табличной части, определенного покупателя, определенной номенклатуры (у которой есть штрихкод). Поэтому я считаю правильным явно задавать ссылку на объект тестирования.

За подсказку проверки имени формы спасибо. Меня этот момент тоже смущал. Кроме того, кнопку печати тоже лучше искать по наименованию:
И я нажимаю на кнопку с именем 'ПодменюПечатьОбычное_АктОСписанииТоваров_ТОРГ16'

которая будет генерироваться следующим кодом
В процедуре ДобавитьСценарииТестирования:
	мКоманды = Новый Массив;
	Для Каждого Команда Из СведенияОВнешнейОбработке().Команды Цикл
		мКоманды.Добавить(Команда.Идентификатор);
	КонецЦикла;
	
	Сценарий.Команды = мКоманды;

В процедуре ТекстФайлаСценариевТестированияПечатныхФорм:
				ТекстФайлаСценариев.ДобавитьСтроку("	И я нажимаю на кнопку с именем 'ПодменюПечатьОбычное_" + Команда + "'");
Оставьте свое сообщение

См. также

Публикаций не найдено

Попробуйте расширить область поиска, проверьте поисковый запрос и повторите попытку.

Или закажите индивидуальную разработку вашего решения.

Создать заказ на разработку