Дымовые тесты для забывчивых/торопливых

26.11.18

Разработка - Инструментарий разработчика

Инструменты для реализации дымовых тестов по метаданным конфигурации. И примеры.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Плагин и тесты
.zip 14,31Kb
18
18 Скачать (1 SM) Купить за 1 850 руб.

 

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

На устоявшихся конфигурациях таких изменений по добавлению нового функционала - достаточно мало. Но вот появилась задача по разработке еще одной конфигурации... К тому же, частенько интересовало, как самому написать дымовой тест - здесь имеются в виду TDD-тесты для xUnitFor1C/ADD.

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

  • Проверка доступности Чтения сохраняемых данных (док-тов, справочников и т.п.) для ролей без расширенных полномочий
  • Проверка установки свойства РежимУправленияБлокировкойДанных в значение, установленное для самой конфигурации

Вторая задача, на самом деле, носит больше академический характер. Но для выработки инструментов - вполне себе подходит.

Поехали

Как устроен дымовой тест - смотрим в реализации от Silverbulleters, \tests\smoke\тесты_ОткрытиеФормКонфигурации. Видим, что для наших задач все сводится к вызовам:

ПараметрыТеста = НаборТестов.ПараметрыТеста(...)

и 

НаборТестов.Добавить(ИмяПроцедурыОбработчика, ПараметрыТеста, ЗаголовокТеста)

Ок. Поехали далее

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

И вот плагин написан (кто не в курсе, это обычная внешняя обработка, только с определенными типовыми методами). Называется ИтераторМетаданных. Его интерфейс описан далее.

Свойства:

  • ДопустимыеМетаданные (СписокЗначений). Заполняем этот список самими метаданными:
Итератор.ДопустимыеМетаданные.Добавить(Метаданные.Справочники.Контрагенты); // добавление конкретного объекта метаданных
Итератор.ДопустимыеМетаданные.Добавить(Метаданные.Документы); // добавление коллекции метаданных
  • ИсключаемыеМетаданные (СписокЗначений). Заполняем его кодом, аналогичным выше. Либо не заполняем.
  • ДополнятьЗависимымиОбъектами (Булево, Ложь по умолчанию). Можно, например, заполнить ДопустимыеМетаданные только документами. И дополнительно можем установить реквизит ДополнятьЗависимымиОбъектами в значение Истина. И тогда анализироваться будут не только документы, но и регистры, справочники и перечисления, которые участвуют в структуре метаданных документов в виде их реквизитов.

Методы:

  • Процедура Инициализация(...). Это типовой для плагина метод. В нем сбрасываем все настройки Итератора - чистим списки метаданных, сбрасываем ДополнятьЗависимымиОбъектами в Ложь.
  • Функция ДеревоМетаданных(), возвращает ДеревоЗначений. Дерево имеет одно поле ОбъектМетаданных и два уровня. На верхнем уровне (Дерево.Строки) имеем имена коллекций метаданных. Например, Справочник. На вложенном уровне (Дерево.Строки[0].Строки) имеем данные типа ОбъектМетаданных, относящиеся к родительской коллекции.
  • Процедура Перечислить(Источник, ПриСледующемОбъектеМетаданных, ПриСледующемТипеМетаданных = Неопределено)
    • Параметры:
    • Источник - ОбработкаОбъект  - Модуль, в котором будут вызываться процедуры-обработчики событий.
    • ПриСледующемОбъектеМетаданных  - Строка - Имя процедуры-обработчика при переходе на следующий объект метаданных.
    • ПриСледующемТипеМетаданных  - Строка, Неопределено - Имя процедуры-обработчика при переходе на следующий тип объектов метаданных.
    • Интерфейс обработчиков - ПроцедураОбработчик(ОбъектМетаданных) или ПроцедураОбработчик(ОбъектМетаданных, Родитель)

Для построения дерева можно и не заполнять реквизит ДопустимыеМетаданные. В этом случае дерево будет заполнено максимальным количеством метаданных. Для этого используется приватная функция плагина ВсеКоллекцииМетаданных().

Пишем тесты

Использовать Итератор и строить дерево дымовых тестов - можно двумя способами. Раз уж мы изначально поставили задачу по написанию двух тестов, то и напишем их с разными подходами.

Вариант 1. Тест на чтение Не-Администраторами

Этот вариант задумывался как раз изначально. И, может быть, чуть сложнее, чем будет следующий вариант. В этом тесте будем использовать метод Итератор.Перечислить(...).

В стандартном методе обработки тестирования проинициализируем Итератор:

Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
	
    [Пропущено]

	ИтераторМетаданных = КонтекстЯдра.Плагин("ИтераторМетаданных");
	ИтераторМетаданных.Инициализация(КонтекстЯдраПараметр); 	// Сброс реквизитов плагина. Необходимо сделать, т.к. плагин уже мог быть инициализирован другой тестовой обработкой	
	ИтераторМетаданных.ДополнятьЗависимымиОбъектами = Истина;   // В принципе, можно и не дополнять. Проверял работу этого флага.
	
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Документы);
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Справочники);
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.РегистрыСведений);
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Константы);
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.РегистрыНакопления);
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.ПланыВидовХарактеристик);
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Задачи);
	ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.БизнесПроцессы);
	
	// При ДополнятьЗависимымиОбъектами = Истина, в объектах проверки появляются и перечисления. 
	// Но настройки прав для перечислений - нет. Поэтому Перечисления исключаем.
	ИтераторМетаданных.ИсключаемыеМетаданные.Добавить(Метаданные.Перечисления); 
		
КонецПроцедуры

Посмотрим еще раз на интерфейсы callback-процедур для метода Итератор.Перечислить(...) и напишем один интерфейсный метод. Он будет отвечать и за обработку разделов, и за обработку объектов метаданных:

Процедура ПриСледующемОбъектеМетаданных(ОбъектМетаданных, Родитель) Экспорт
	
	ЗаголовокОбщаяЧасть = "Проверка доступа на Чтение Не-Администраторами";
	Если Родитель=Неопределено И ТипЗнч(ОбъектМетаданных)=Тип("Строка") Тогда 
		НаборТестов.НачатьГруппу(ЗаголовокОбщаяЧасть + " " + ОбъектМетаданных);
		
	ИначеЕсли ОбъектМетаданных<>Неопределено Тогда 
		ПараметрыТеста = НаборТестов.ПараметрыТеста(ОбъектМетаданных, Родитель);
		ЗаголовокТеста = "" + ОбъектМетаданных.ПолноеИмя() + ": " + ЗаголовокОбщаяЧасть;
		НаборТестов.Добавить("Тест_ПроверитьНеАдминистраторскиеПраваНаЧтение", ПараметрыТеста, ЗаголовокТеста);
		
	КонецЕсли;
	
КонецПроцедуры

И самый конечный метод, который будет тестировать объект метаданных:

Процедура Тест_ПроверитьНеАдминистраторскиеПраваНаЧтение(ОбъектМетаданных, Родитель) Экспорт
	
	ЧтениеДоступно = Ложь;
	Для Каждого ТекРоль Из Метаданные.Роли Цикл 
		
		Если ПривилегированныеРоли.Получить(ТекРоль)<>Неопределено Тогда 
			Продолжить;
		КонецЕсли;
		
		ПараметрыДоступаОбъекта = ПараметрыДоступа("Read", ОбъектМетаданных, , ТекРоль);
		Если ПараметрыДоступаОбъекта.Доступность Тогда 
			ЧтениеДоступно = Истина;
			Прервать;
		КонецЕсли;
		
	КонецЦикла;
	
	Ожидаем.Что(ЧтениеДоступно).ЕстьИстина();
	
КонецПроцедуры

В этом методе используется переменная модуля ПривилегированныеРоли. Это Соответствие, которое заполняем ролями (Объект метаданных: Роль), обладающими расширенными полномочиями на чтение. Инициализируем и заполняем переменную также в стандартном методе Инициализация. Здесь этот код показывать особого смысла нет. См. в исходниках.

Вариант 2. Тест на проверку значений свойств РежимУправленияБлокировкойДанных

Как уже писал, это больше "академический" тест. В реальных разработках он будет иметь ценность лишь для конфигураций, которые находятся в стадии перевода с одного режима управления блокировками на другой.

Код уже не так интересен, и будет расположен в спойлерах.

Опять в стандартном методе обработки тестирования проинициализируем Итератор. Но уже немного по-другому.

 
 Код:

А теперь для построения дерева тестов, воспользуемся функцией Итератор.ДеревоМетаданных().

 
 Код:

И короткий тестовый метод для фреймворка.

 
 Код:

Заключение

Итого, имеем новые знания и инструменты - разобрались, как писать плагины и дымовые тесты для фреймворков  xUnitFor1C/ADD. И написали тесты.

Исходники плагина уже можно смотреть в ADD (ветка develop), по пути add/plugins/ИтераторМетаданных/. Тесты добавятся там же (или уже добавились), в ADD, по пути add/tests/smoke/.

Также все эти наработки можно скачать из прикрепленного к публикации файла. В нем небольшим бонусом еще есть файл с шаблонами кода для скелета тестовой обработки и с функциями текучих утверждений.

Про совместимость кода. На платформе 8.3 - будет работать в любой версии. Для запуска на платформе 8.2 нужно немного подрихтовать - закомментировать объявление областей кода (#Область/#КонецОбласти). БСП не используется.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    160759    889    399    

871

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    8276    62    29    

75

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 19980 руб.

06.10.2023    15583    38    7    

73

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    23731    70    45    

119

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    10601    38    27    

63

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 руб.

14.01.2013    188347    1141    0    

913

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    17515    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7791    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 327 08.11.23 16:11 Сейчас в теме
Накатал еще дымовой тест на проверку входимости хранимых объектов в план обмена ОбновлениеИнформационнойБазы.
По мануалам, все объекты должны входить в него с запретом авто-регистрации.
Возможно, что тест неоптимально работает - долго слишком. Но мне это не оч важно на текущий момент.
Прикрепленные файлы:
Тесты_ПроверкаПланаОбмена_ОбновлениеИнформационнойБазы.epf
Оставьте свое сообщение