February 14, 2023

Инструмент для создания сложного тестового окружения

В предыдущих заметках: заметка один, заметка два теоретически рассуждал про принципы создания сложного окружения. В этой заметке перейду к практической части и создам окружение с помощью существующих open source инструментов. Воспользуемся vanessa automation single версии 1.2.040.1.

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

Для примера возьмем функционал зарплаты типовой конфигурации Бухгалтерия предприятия КОРП 3.0. Для тестирования функционала зарплаты мне нужен принятый на работу сотрудник, чтобы в каждом сценарии не дублировать шаги по созданию справочников и прием сотрудника на работу. Создание такого окружения описываю в отдельном сценарии, который будет запускаться один раз при подготовке новой тестовой базы. Сценарий должен создать документ Прием на работу и необходимые справочные данные.

В панели vanessa automation single есть инструмент Подготовка и загрузка данных. Это интерактивный помощник, который позволяет сгенерировать текст сценария. Форма состоит из 3-х закладок:

  • Отбор по метаданным - содержит дерево метаданных конфигурации, позволяет выбрать нужные метаданные и сгенерировать сценарий выгрузки всех данных выбранных объектов
  • Отбор по ссылкам - содержит таблицу, в которую можно подобрать нужные ссылки и сгенерировать сценарий только для выбранных данных
  • Фича - текст сгенерированного сценария

Основная особенность инструмента, что он умеет собирать связанные объекты и включает их в состав сценария. Иногда это полезно.

Так как мне нужен только один документ Прием на работу, то на закладке Отбор по ссылкам выбираю документ, который будет служить прототипом документа для окружения.

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

Для этого есть неочевидная комбинация настроек, которая приводит к нужному результату. Устанавливаются в такой последовательности:

  1. параметр Заменять ссылку на реквизит ставим в положение "Да",
  2. в дереве метаданных в строке объекта устанавливаем флаг Искать по атрибуту и в поле Атрибут поиска вводим имя атрибута.

Генерирую текст кнопкой на вкладке Отбор по ссылкам, но в тесте сценария ничего не меняется, везде, где используется справочник Банки остаются ссылки. Оказывается магия происходит только после нажатия кнопки Заменить ссылки реквизитами. Вместо внутренней ссылки на элемент справочника Банки во всем сценарии появляется такая строка FindByAttribute:Catalog.Банки;Наименование;ПАО СБЕРБАНК

В таком сценарии можно заменить наименование справочника и получить новые объекты при выполнении сценарии. Пробую на своем примере для справочников Сотрудники и Физические лица. Из сгенерированного сценария копирую строки шагов для справочников Сотрудники и Физические лица. Вставляю строки в новый feature-файл, из таблиц реквизитов удаляю Код (чтобы создался новый элемент с новым кодом) и заменяю наименование. Запускаю полученный сценарий, возникает ошибка, шаг из библиотеки не понимаетFindByAttribute, сценарий не выполнен, данные не созданы.

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

Идентификация документа по ссылке не очень красиво выглядит в тексте сценарии. Идеальным было бы если все объекты окружения идентифицировались как-то однообразно, например по ФИО сотрудника. Задаем для справочников Сотрудники и Физические лица одно наименование, а документ Прием на работу ищем по реквизиту Сотрудник. Это можно выделить, как общий подход для построения тестового окружения - все объекты окружения идентифицируются наименованием ключевой аналитики.

Однако базовые шаги не могут искать объект по реквизиту ссылочного типа в FindByAttribute. Существующий алгоритм позволяет искать только по одному реквизиту примитивного типа. В данном случае, да и в общем случае тоже, не получится однозначно идентифицировать документ по одному реквизиту примитивного типа.

Сходу не получилось создать окружение с помощью готового инструмента, но путем несложных доработок инструмента результат есть. Также можно сделать вывод, что данный инструмент практически полностью удовлетворяет моим требованиям.