Существующая универсальная реализация дымовых тестов позволяет использовать базовые/«дымовые» проверки, для которых не требуется написание сложных тестов или перестройка схемы разработки конфигурации 1С.
Тесты удобно использовать перед выпуском релиза/обновлений конфигурации и/или перед установкой релиза/обновлений в рабочую базу.
В настоящий момент поддерживается несколько видов дымовых тестов, реализованных отдельными обработками:
- Дымовые тесты открытия/закрытия форм объектов метаданных
- Дымовое тесты ввода документов на основании
- Дымовое тестирование настройки общих модулей и наличия подсистем
Существует возможность выбора режима выполнения данных тестов.
-
Запуск дымовых тестов на клиенте тестирования с помощью штатного API тестирования 1С 8.3 в управляемом приложении
-
ВАЖНО - этот режим включен по умолчанию
-
преимущества:
- данный способ позволяет обойти острую проблему зависания выполнения в случае появления модальных окон, а также других проблем на клиенте 1С
- можно проверить дымовые тесты не только для пользователя-администратора, как для режима 2, но и для произвольного ползователя
-
недостатки:
- может быть существенно медленнее, чем устаревший режим запуска в текущем сеансе 1С из-за "медленного" взаимодействия между менеджером тестирования и клиентом тестирования
-
-
(устаревший) Запуск дымовых тестов в текущем сеансе 1С
-
преимущества:
- существенно быстрее 1-го режима запуска
- работает как в управляемом, так и в обычном приложении
-
недостатки:
- зависание выполнения тестов в случае появления модального окна
- можно проверить дымовые тесты только в режиме администратора, а не для произвольного пользователя
-
С помощью булевого параметра ОткрываемФормыНаКлиентеТестирования
json-файла можно управлять вариантом запуска.
* false или Ложь - открываем в режиме 2, без клиента тестирования
* true или Истина или не указан вообще - открываем в режиме 1, с клиентом тестирования
Данные дымовые тесты проверяют открытие/закрытие различных форм с учетом прав доступа (права "Использование/Просмотр") для пользователей с различными ролями (полные или ограниченные права).
Проверяются следующие виды наиболее активно используемых форм:
- формы списков и формы выбора справочников
- форма элементов справочников
- формы списков и формы выбора документов
- формы документов
- формы отчетов
- формы обработок
- формы списков бизнес-процессов
- формы бизнес-процессов
Также для каждого справочника и бизнес-процесса проверяются 3 дополнительных теста c учетом прав доступа (права "Просмотр/Интерактивное добавление"):
- создание нового элемента и открытие его формы (тип проверки "Новые")
- копирование существующего элемента и открытие формы созданного элемента (тип проверки "Новые")
- открытие формы существующего элемента (тип проверки "Существующие")
Для каждого документа проверяются 3 дополнительных теста c учетом прав доступа (права "Просмотр/Интерактивное добавление"):
- открытие формы существующего документа (берется последний по дате) (тип проверки "Существующие")
- перенос существующего документа на текущий день и открытие формы этого документа (тип проверки "ПереносНаДату")
- открытие формы нового документа (тип проверки "Новый")
В связи с универсальностью дымовых тестов практически всегда возникает потребность скорректировать запуск дымовых тестов под конкретную конфигурацию.
Например, в типовых конфигурациях некоторые формы не предназначены для работы в интерактивном режиме и их нужно исключить. Или другой пример: формы подчиненных справочников требуют перед открытием обязательного заполнения стандартного реквизита Владелец
, или, как например, в случае справочника СерииНоменклатуры
, у номенклатуры-владельца должен быть установлен флаг ВестиУчетПоСериям
и т.п. и тесту нужно указать, как нужно заполнить владельца или какие обязательные реквизиты элемента, чьи формы будем тестировать, нужно обязательно заполнить перед открытием форм.
Дымовые тесты для Vanessa.ADD поддерживают настройку через файл конфигурации в формате json
. Этот способ является основным и рекомендуемым.
Файл настроек для дымовых тестов должен иметь формат json
и в корне содержать один объект с ключом smoke
.
Содержимое файла без настроек будет выглядеть следующим образом:
{
"smoke" : {
}
}
Для того, чтобы настройки из файла конфигурации были использованы при запуске дымовых тестов, можно:
-
При интерактивном запуске тестов загрузить файл настроек при помощи команды "Загрузить настройки из файла" в меню "Загрузить тесты". Это нужно сделать перед тем как загрузить сами дымовые тесты. Если тесты уже были загружены, то после загрузки настроек из файла их нужно перезагрузить.
-
При запуске тестов из командной строки передать путь к файлу конфигурации в параметре командной строки, как показано в примере ниже (bat/cmd-файл):
- современный, наиболее удобный вариант запуска и настройки через vanessa-runner
@call vrunner xunit tests --settings tools/JSON/vrunner.json
- или устаревший вариант:
@echo off set XDD_IBaseConn=Srvr="main:2841";Ref="test_ibase"; set XDD_IBaseUser="Администратор" set XDD_IBasePass="" rem Пути к каталогам с исполняемыми файлами set XDD_V8Bin=C:\Program Files (x86)\1cv82\8.2.19.130\bin set ADD_Dir=C:\Program Files (x86)\OneScript\lib\add "%XDD_V8Bin%\1cv8.exe" ENTERPRISE /IBConnectionString %XDD_IBaseConn% /N %XDD_IBaseUser% /P %XDD_IBasePass% /RunModeOrdinaryApplication /Execute "%ADD_Dir%\bin\xddTestRunner.epf" /C "xddConfig ""W:\smoke.json""; xddRun ЗагрузчикФайла ""%ADD_Dir%\bin\Tests\Smoke\тесты_ОткрытиеФормКонфигурации.epf"";"
Корневой объект smoke
поддерживает следующие свойства (ключи):
Справочники
- для настройки исключений для форм справочников и заполнения элементов при созданииДокументы
- для настройки исключений для форм документов и заполнения документов при созданииОтчеты
- для настройки исключений для отчетовОбработки
- для настройки исключений для обработокБизнесПроцессы
- для настройки исключений для бизнес-процессовПропускаемыеИсключения
- массив с указанием текстов исключений, при появлении которых дымовой тест не будет считаться упавшим. Допускается поиск по подстроке.ИсключитьФормыЗависящиеОтОтключенныхФункциональныхОпций
- для управления исключением форм, зависящих от отключенных функциональных опцийСпособГруппировки
- для настройки способа группировки тестовых случаев для использования в интерактивном режимеКоличествоВГруппе
- для указания количества тестовых случаев в группе при выбранном способе группировкиПоКоличеству
(см. ниже)СтрогийПорядокВыполнения
- Тип: bool (Булево). По умолчанию - false, тесты выполняются в случайном порядке. Если true, то тесты выполняются последовательно и в случае ошибки выполнение набора тестов приостанавливается.
Использование этих свойств подробно описано ниже.
Некоторые формы не могут быть протестированы в автоматическом режиме, например:
- формы, не предназначенные для использования в интерактивном режиме;
- фиктивные формы, которые сами не открываются, но открывают формы других объектов;
- формы, открывающие модальные диалоги;
- и т.п.
Подобные формы необходимо добавить в исключения.
Также с целью распараллеливания выполнения дымовых тестов удобно настроить несколько конфигурационных файлов, в каждом их которых оставить проверки какого-то одного вида метаданных, а другие - исключить.
Важно! Не рекомендуется злоупотреблять исключениями и добавлять в исключения формы по другим причинам – например, если эти формы редко открываются, не работают в выбранном виде клиента и т.п., так как это приводит к ошибкам, которые постоянно существуют, что не всегда верно.
Для того, чтобы исключить все формы определенного вида метаданных, нужно в настройках дымовых тестов для данного вида метаданных указать значение false
. Пример: исключаем из проверки все отчеты и обработки:
{
"smoke": {
"Отчеты": false,
"Обработки": false
}
}
В настоящий момент поддерживаются 5 видов метаданных: Справочники
, Документы
, Отчеты
, Обработки
и БизнесПроцессы
.
Для того, чтобы отключить проверки для форм конкретных видов объектов, нужно указать вид этого объекта в массиве исключений конкретного метаданного.
Для справочников, документов и бизнес-процессов поддерживаются следующие типы исключений:
Списки
- задается массив имен справочников/документов, чьи формы списка (все) нужно исключить из проверкиСуществующие
- задаеся массив имен справочников/документов, чьи формы элементов/документов нужно исключить из проверки открытием в этой форме существующего объектаНовые
- задается массив имен справочников/документов, чьи формы эдементов/документов нужн оисключить из проверки открытием формы скопированного объекта
Для документов дополнительно поддерживается тип исключения для проверки ПеренестиДату
.
{
"smoke": {
"Справочники": {
"Списки": [
"ПростойСправочник",
"СоставПериметра"
],
"Новые": [
"ПростойСправочник2",
"СоставПериметра"
]
},
"Отчеты": [
"Отчет1"
],
"Обработки": [
"xddGuidShow"
]
}
}
Для того, чтобы исключить конкретную форму конкретного вида объектов, нужно вместе с именем вида объекта метаданных указать путь к этой форме. Пример:
{
"smoke": {
"Справочники": {
"Списки": [
"ПростойСправочник.Форма.ФормаВыбора"
],
"Новые": [
"ПростойСправочник.Форма.УпрФормаЭлемента",
"ПодчиненныйСправочник.Форма.УпрФормаЭлемента"
]
},
"Отчеты": [
"Отчет1.ФормаНастроек"
]
}
}
Для формы настроек отчетов, которая указана в свойствах конфигурации как Основная форма варианта отчета
, можно в файл исключений добавить строку вида
"Отчет.ДатыЗапретаЗагрузки.ФормаНастроек"
Для формы, которая не указана в свойствах как Основная форма варианта отчета
, можно в файл исключений добавить строку вида
"ОбщаяФорма.ВспомогательнаяФормаНастроекОтчета"
Для исключения форм, зависящих от отключенных функциональных опций реализована отдельная настройка ИсключитьФормыЗависящиеОтОтключенныхФункциональныхОпций
, которая должна быть указана в корне элемента smoke
. Настройка имеет json-тип bool
(true
или false
).
По умолчанию настройка не используется, т.е. проверки функциональных опций не выполняется.
Эта настройка нужна для больших конфигураций, например, "1С:ERP" или "1С:Управление холдингом".
Пример файла настройки исключений
Описанный ниже способ хуже, чем вышеуказанный метод указания исключений:
- нужно менять код внешней обработки, что усложняет сопровождение
- код обработки менять сложнее, чем простой текстовый файл
- текст файла настроек удобнее держать в репозитории исходников, чем код внешней обработки
Исключения задаются непосредственно в файле-теста Tests\Smoke\Тесты_ОткрытиеФормКонфигурации.epf
В конце файла есть набор методов
+ //{ блок переопределения исключений, чтобы не открывать формы
+ Функция ПолучитьСписокИсключений_Справочники_Списки() Экспорт
+ Функция ПолучитьСписокИсключений_Справочники_Существующие() Экспорт
+ Функция ПолучитьСписокИсключений_Справочники_Новые() Экспорт
+ Функция ПолучитьСписокИсключений_Документы_Списки() Экспорт
+ Функция ПолучитьСписокИсключений_Документы_Существующие() Экспорт
+ Функция ПолучитьСписокИсключений_Документы_ПеренестиДату() Экспорт
+ Функция ПолучитьСписокИсключений_Документы_Новые() Экспорт
+ Функция ПолучитьСписокИсключений_Отчеты() Экспорт
+ Функция ПолучитьСписокИсключений_Обработки() Экспорт
+ //} конец блока
Формат этих методов
Функция ПолучитьСписокИсключений_Справочники_Списки() Экспорт
Результат = Новый СписокЗначений;
Результат.Добавить("ирАлгоритмы"); // Аналогично добавляем наименования нужных метаданных
Возврат Результат;
КонецФункции
Нужно добавить имя метаданного-исключения в соответствующий метод в виде указанного кода.
Чтобы иметь возможность полноценно тестировать формы элементов, списков и выбора подчиненных справочников, которые не могут быть открыты без указания владельцев у элемента такого справочника владелец устанавливается автоматически на основе информации из метаданных.
Но когда владельцев два и более, то иногда бывает нужно указать вид справочника-владельца явно в файле настроек. Это делается в конфигурационном файле в разделе Подчиненные
. Пример:
{
"smoke": {
"Справочники": {
"Подчиненные": {
"БанковскиеСчета": "Контрагенты",
"ДисциплинарныеВзыскания": "СотрудникиОрганизаций"
}
}
}
}
У многих объектов в реальных конфигурациях есть обязательные для заполнения реквизиты или реквизиты, влияющие на поведение самого объекта или подчиненных ему объектов.
Например, возможность открытия форм некоторых справочников зависит от значений других справочников.
Пример из реального проекта тестирования "1С:УПП, редакция 1.3" (обычные формы): чтобы протестировать формы справочника СерииНоменклатуры
, нужно чтобы в настройках номенклатуры-владельца была включен учет по сериям. Чтобы протестировать справочник СотрудникиОрганизаций
- нужно заполнять в нем реквизит Физлицо
.
Чтобы при при автоматическом создании объекта во время выполнения дымовых тестов такие и подобные случаи корректно отрабатывали, предусмотрена настройка ЗначенияРеквизитовНовых
, позволяющая указать значения по умолчанию для реквизитов создаваемых объектов. Пример:
{
"smoke": {
"Справочники": {
"ЗначенияРеквизитовНовых": {
"Номенклатура": {
"ВестиУчетПоСериям": true,
"ВестиУчетПоХарактеристикам": true
},
"СотрудникиОрганизаций": {
"Физлицо": "Тестовое физлицо"
},
},
}
}
}
Значения простых типов (Булево
, Строка
, Число
, ДатаВремя
) указываются как есть (согласно стандарту JSON
, в значения соответствующих типов 1С они будут преобразованы автоматически).
Значения ссылочных типов данных заполняются по следующим правилам:
-
Поиск значений перечислений осуществляется по имени значения (как задано в метаданных);
-
Если реквизит имеет тип СправочникСсылка, то значение будет создано по алгоритму создания нового элемента, а в качестве наименования нового элемента будет использовано значение из настройки (в примере выше для заполнения реквизита
Физлицо
справочникаСотрудникиОрганизаций
будет создан элемент справочникаФизическиеЛица
с наименованием "Тестовое физлицо").
На этапе отладки дымовых тестов их приходится запускать интерактивно в ручном режиме при помощи обработки xddTestRunner.epf
, прежде всего, чтобы выявить все формы, которые блокируют автоматическое выполнение тестов (открывают модальные окна, являются фиктивными формами, т.е. сами не открываются, а вместо этого открывают формы других объектов и т.п.).
По умолчанию тестовые случаи в дереве тестов выводятся сплошным списоком, а в больших конфигурациях это тысячи строк, и ориентироваться в таком списке крайне проблематично.
Чтобы облегчить работу со списком, можно данные в списке сгруппировать. Поддерживаются следующие способы группировки через параметр СпособГруппировки
:
ПоВидуМетаданных
- тестовые случаи объединяются в группы по виду метаданныхПоВидуОбъекта
- тестовые случаи объединяются по виду объектаПоКоличеству
(дополнительно нужно указать свойствоКоличествоВГруппе
) - тестовые случаи объединяются в группы по N штук в каждой, группы именуются по виду метаданных + дипазон порядковых номеров, например "Справочники [1..20]", "Справочники[21..40],..." и т.п.НеГруппировать
(это способ по умолчанию)
Данная обработка может быть использована и в bdd и в tdd/xdd. Запускать данный набора тестов рекомендуется базе данных в которой уже есть заполненные документы.
Для заполнения списка исключений документов из проверки их необходимо заполнить в модуле документа обработки в процедуре ПолучитьСписокИсключений_ДокументыПроведенные
и/или ПолучитьСписокИсключений_ДокументыНеПроведенные
Дымовое тестирование ввода документов на основании может быть сконфигурировано через файл smoke.json
, по аналогии с обычными дымовыми тестами. Для этого конфигурационный файл должен содержать объект с ключом smokeInputBasedOn
, внутри которого задаются исключаемые из тестирования комбиации документов и их оснований ввода следующим образом:
{
"smokeInputBasedOn": {
"Исключения": {
"ДокументыПроведенные": [
"ЧтоОткрываем/ДокументОснование",
"ЗаказКлиента/ЗаданиеТорговомуПредставителю"
],
"ДокументыНеПроведенные": [
"ОперацияПоПлатежнойКарте/ЗаявкаНаРасходованиеДенежныхСредств"
]
}
}
}
Для возможностей запуска дымового тестирования можно использовать данную обработку, как пример сниппетов для генерации feature файлов и использования сниппетов. В обработке используется несколько сниппетов:
Я открываю форму документа "Документ" заполненного на основании проведенного "ДокументОснование"
Я открываю форму документа "Документ" заполненного на основании не проведенного "ДокументОснование"
Я открываю форму документа "Документ" заполненного на основании проведенного "ДокументОснование" номер "НомерДокументаОснования" от "ДатаДокументаОснования"
Я открываю форму документа "Документ" заполненного на основании не проведенного "ДокументОснование" номер "НомерДокументаОснования" от "ДатаДокументаОснования"
Данный сниппет получает форму, открывает ее и потом закрывает. В теории проверяем возможность работы процедур "ПриСозданииНаСервере", "ПриОткрытии", "ОбработкаЗаполнения"
Для быстрого старта необходимо открыть данныю обработку в режиме предприятия и нажать кнопку "Генерация фич", после генерации необходимых feature файлов, предложит выбрать каталог где будут созданны feature файлы в разрезе документов оснований.
Если стоит галочка "Указывать документ основание", то происходит указание номера и даты документа на основании которого будет создаваться документ.
Файлы создаются по имени документа основания, включают все документы которые можно создать на основании документа основания. Документом основания выбирается последний проведенный и не проведенный документ. Этого достаточно для первого старта, в дальнейшем предполагается, что при добавлении новых документов разработчик сам подкорретирует feature файл с необходимым документом.
Предполагается, что перегенерация для типовых конфигураций будет происходить только для репозитория git вы всегда сможете увидеть только добавленные формы в фича файлах, а те которые исправляли сможете вернуть на правильное поведение.
Данная обработка проверяет:
- настройки общих модулей согласно рекомендациям фирмы 1С
- наличие подсистем согласно настроек в файле
smoke.json
Дымовой тест анализирует название общих модулей (Клиент, КлиентСервер, ПовтИсп и прочие) и, соответственно названию, проверяет или ОбщиеМодули имеют настройки рекомендованные стандартами разработки.
Так же дымовой тест проверяет наличие подсистем в тестируемой конфигурации, если они заданы в настройках (это необходимо если итоговая конфигурация собирается из нескольких конфигураций).
{
"smoke" : {...},
"SmokeCommonModules": {
"Subsystems" : ["FoxyLink"],
"ExcludedCommonModules" : []
}
}
{
"smoke" : {...},
"SmokeCommonModules": {
"Subsystems" : ["FoxyLink.*"],
"ExcludedCommonModules" : []
}
}
{
"smoke" : {...},
"SmokeCommonModules": {
"Subsystems" : ["FoxyLink",
"FoxyLink.*"],
"ExcludedCommonModules" : []
}
}
{
"smoke" : {...},
"SmokeCommonModules": {
"Subsystems" : ["FoxyLink",
"FoxyLink.Plugins",
"FoxyLink.Plugins.*",
"FoxyLink.Tasks"],
"ExcludedCommonModules" : []
}
}
{
"smoke" : {...},
"SmokeCommonModules": {
"Subsystems" : ["FoxyLink",
"FoxyLink.*"],
"ExcludedCommonModules" : ["SocialNetworks_ExchangeServer"]
}
}
{
"smoke" : {...},
"SmokeCommonModules": {
"ExcludedCommonModules" : ["SocialNetworks_ExchangeServer"]
}
}
или
{
"smoke" : {...},
"SmokeCommonModules": {
"Subsystems" : ["*"]
"ExcludedCommonModules" : ["SocialNetworks_ExchangeServer"]
}
}
{
"smoke" : {...},
"SmokeCommonModules": {
"Subsystems" : []
"ExcludedCommonModules" : []
}
}