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

15.06.20

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

См. также

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

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

5000 руб.

04.07.2022    14459    65    5    

41

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

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

4270 руб.

26.01.2023    5349    8    2    

4

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

Tantor Postgres 18 - масштабный релиз СУБД, за которым стоят месяцы тестирования, сотни часов нагрузочных прогонов и десятки исправлений, о которых пользователь никогда не узнает просто потому, что они были найдены и устранены до выхода версии. Александр Симонов, руководитель направления развития 1С в "Тантор Лабс", рассказывает, как устроен процесс тестирования изнутри - почему одного эталонного прогона недостаточно, что делать, когда ванильный PostgreSQL 18 ломает собственные оптимизации, и как Tantor Postgres приближается к той планке, которую MS SQL Server держал годами.

07.07.2026    238    Tantor    2    

5

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

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

29.06.2026    1533    alexandr_yang    4    

8

Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

Как мы пришли к использованию Ванессы для автоматизации действий пользователей? Сначала я увидел в интернете лекцию Олега Филиппова про RPA. И когда встал вопрос про автоматизацию небольших процессов, то эта лекция у меня прекрасно соединилась с опытом тестирования программ с помощью Vanessa Automation. Минимум усилий, минимум ручного кода и высокая скорость внедрения. И самое главное, не надо менять программу. А если программа изменится, то алгоритм быстро поправить и дополнить.

19.06.2026    901    swimdog    3    

7

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

Разбираемся, какие виды тестирования нужно проводить при внедрении заказных бизнес-приложений. Что такое воронка «бесконечного тестирования». Чем синдром «сапера» отличается от синдрома «лудомана». А также можно ли полюбить тестирование.

18.06.2026    563    DmitryShostak    0    

2

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

Нагрузочное тестирование 1С нельзя строить на средних значениях и одном «идеальном» сценарии: такой подход скрывает пики, блокировки, фоновые задания и реальные риски для производительности. Показываем, как собрать данные из технологического журнала, журнала регистрации и поведения пользователей, чтобы построить сценарий, близкий к работе системы в продуктиве. Разбираемся, как вариация, корреляционный анализ и APDEX помогают увидеть неравномерную нагрузку, уточнить модель и понять, какие данные влияют на производительность. А также объясняем, как корректное моделирование помогает заранее выявить проблемы, подобрать железо под реальные пики и снизить риск коллапса системы после запуска.

12.05.2026    2014    gabrielyants    8    

13

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

Переход на Linux и PostgreSQL – серьезный этап для любой компании. Нагрузочное тестирование помогает пройти его без критических сбоев: заранее выявить узкие места, оценить поведение системы под реальной нагрузкой и снизить риск откатов после запуска. В статье разберем, почему миграция с Microsoft SQL Server и Windows на новую инфраструктуру требует отдельной проверки производительности, какие сценарии стоит включать в тест, как настраивать контур и мониторинг, как оценивать результаты и сколько времени реально занимает такой проект.

29.04.2026    1257    kulmaksim    0    

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


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


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

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

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

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