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

15.06.20

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

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

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

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

Для поддержания работоспособности конфигурации необходимо проводить тестирование. В частности, это касается внешних печатных форм. 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 тестирование

См. также

Автотесты для типовых конфигураций ERP Управление предприятием 2 и Комплексная автоматизация 2 (для vanessa automation)

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

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

2220 руб.

04.07.2022    5816    16    0    

19

Подсценарии для заполнения форм типовых справочников и документов конфигураций ERP 2.5 и КА 2.5 (для vanessa automation)

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

Набор универсальных подсценариев для заполнения форм типовых объектов справочников и документов конфигураций ERP 2.5 и КА 2.5. Сценарии представляют собой feature-файлы для vanessa-automation с тегом @exportscenarios. Используются для разработки функциональных сценариев.

1500 руб.

26.01.2023    3003    5    0    

2

Автотесты для типовых конфигураций Бухгалтерия предприятия КОРП 3.0 и Бухгалтерия предприятия 3.0 (vanessa automation)

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

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

1728 руб.

20.01.2022    5989    6    0    

6

YAxUnit или модульное тестирование в 1С

Тестирование QA Бесплатно (free)

Почему-то, когда говорят о тестировании в 1С, в основном подразумевают пользовательское или сценарное тестирование. А модульное или юнит-тестирование незаслуженно обходят стороной. Расскажем об инструменте модульного тестирования, позволяющем писать тесты в формате текучих выражений и выполнять их в конфигураторе, EDT и на CI, а также о плагине для EDT, облегчающем написание и выполнение тестов.

16.11.2023    2306    theshadowco    3    

37

Чем Service Discovery поможет 1С-нику и его клиентам?

Тестирование QA Мониторинг Бесплатно (free)

Если развернуть слепок рабочей среды в окружении для тестирования, тесты могут начать взаимодействовать с рабочим окружением. Расскажем о том, как автоматически перенастраивать базы 1С под окружение разработки или тестирования с помощью концепции Service Discovery.

08.11.2023    2300    ktb    0    

18

Обработка для подготовки файла настройки дымовых тестов измененных объектов конфигурации

DevOps и автоматизация разработки Тестирование QA Россия Абонемент ($m)

В статье приведен пример обработки, которая на основании измененных файлов git-репозитория готовит специальный файл настройки xUnitParams.json для последующего выполнения дымовых тестов (xUnitFor1C/add) только для измененных объектов конфигурации

1 стартмани

09.10.2023    420    3    ICL-Soft    0    

2

100+ тестов на Vanessa-Automation. Личный опыт без маркетинга

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

Всем привет. Меня зовут Онянов Виталий, и сегодня поговорим немного про тестирование в 1С. Так уж сложилось, что мне посчастливилось довольно основательно погрузиться в эту тему, и я хотел бы немного поделиться с вами своим опытом и вообще своими мыслями на тему тестирования в программах 1С:Предприятие.

18.09.2023    6374    Tavalik    20    

119

Каждому проекту – сценарные тесты! Быстрый старт в тестирование с помощью СППР

Тестирование QA Бесплатно (free)

Интересуетесь тестированием в 1С, но не знаете, с чего начать? Для быстрого вкатывания в разработку сценарных тестов в знакомом окружении можно использовать СППР (типовая конфигурация «Система проектирования прикладных решений»). Расскажем, что есть в СППР для тестирования, и как создать свой первый тест на примере типичного сценария.

30.08.2023    3203    naa1c    2    

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


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


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

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

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

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