xUnitFor1C icon indicating copy to clipboard operation
xUnitFor1C copied to clipboard

Хотим загрузить/получить настройки из внешнего файла в момент выполнения функции "ЗаполнитьНаборТестов"

Open ivanov660 opened this issue 7 years ago • 12 comments

Предварительно

  • [V] Вы используете [последнюю версию продукта]
  • [V] Вы проверили [Известные проблемы при тестировании]

Описание

Хотим загрузить/получить настройки из файла на диске при выполнении теста в функции "ЗаполнитьНаборТестов". Этот файл изначально лежит рядом с обработкой теста (или известен относительный путь относительно текущей обработки).

Шаги для воспроизведения

нет

Ожидаемое поведение: [ Что вы хотите получить? ]

Видим два варианта:

  1. Мы хотим загрузить из внешнего макета в формате (mxl) настройки. Эти настройки находятся рядом с текущим размещением файла обработки теста, т.е. хотим создать параметризированный тест с настройками из макета без необходимости каждый раз править обработку.

  2. Добавить в командную строку опцию доп. данные, к примеру, ЗагрузчикДополнительныеДанные %путь%\настройки.mxl, и загружать эту таблицу заранее, а в функцию ЗаполнитьНаборТестов передавать дополнительным параметром.

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

Текущее поведение: [ Что происходит в действительности? ]

Нет возможности получить настройки из файла. Использовать макеты прикрепленные в обработку не удобно.

Как мы вышли из ситуации сейчас

В плагине "ЗагрузчикФайла" в модуле объекта добавили для переменной ЗагружаемыйПуть параметр Экспорт.

Прикладывайте скриншоты

Также приветствуется описание в формате Gherkin

Функционал <информация о текущем положении в каталоге загружаемого теста вариант1>
   Как <?>
   Я хочу <упростить создание тестов>

Контекст
  Дано <xUnitFor1C>
  И <8.3.11>

Сценарий <ожидаемое поведение>
  Допустим существует обработка теста и настройки для теста в каталоге <c:\тесты\тест1.epf> и <c:\тесты\тест1_настройки.mxl>
  Когда вызывается функция <ЗаполнитьНаборТестов>
  Тогда получаем путь из переменной <НаборТестов.ЗагружаемыйПуть> и загружаем настройки для параметризированного теста.


ivanov660 avatar Jun 29 '18 09:06 ivanov660

в ADD есть ишуз с решением https://github.com/silverbulleters/add/issues/74 все просто

artbear avatar Jul 13 '18 14:07 artbear

@ivanov660 Закрываем?

artbear avatar Jul 13 '18 14:07 artbear

  1. Посмотрел предлагаемый вариант решения, не подходит. Он срабатывает при выполнении теста. Мы же хотели, чтобы он срабатывал в функции "ЗаполнитьНаборТестов".

  2. По коду происходит следующая последовательность действий: а) Открыли xddRunner и нажимаем кнопку загрузить тест из файла. б) Указываем путь к тесту "Тест1.epf" в) Вызывается плагин "ЗагрузчикФайла.epf" г) xddRunner вызывает функцию модуля обработки "ЗагрузитьТестыВНовомФормате()" плагина "ЗагрузчикФайла.epf" д) В функции "ЗагрузитьТестыВНовомФормате()" идет вызов процедуры модуля объекта "Тест1.epf" "ЗаполнитьНаборТестов()" !!!! вот тут мы бы хотели знать путь. е) Рисуется дерево тестов и т.д. ж) жмем выполнить тест и выполняется процедура

"ЗаполнитьСвойствоПриНаличии(Контекст, "ПутьКФайлуПолный", ДочернийУзел.Путь);"

На шаге "д" мы используем переменную обработки "ЗагрузчикФайла.epf" ЗагружаемыйПуть и для нее добавили признак экспорта. И мы получаем значение ее внутри нашей обрабокти.

Перем КэшПостроительДереваТестов;
Перем ЗагружаемыйПуть ЭКСПОРТ; // ппк чтобы получить путь каталога файла загружаемого

Перем КонтейнерТестов;
Перем ТекущаяГруппа;

  1. Зачем нам это нужно. Цель - упростить создание юнит тестов. К примеру, у нас есть каталог рядом с обработкой, в котором есть набор файлов. И при загрузке теста, мы хотим создать столько тестовых случаев, сколько этих файлов. Это при анализе результатов выполнения тестов поможет понять, какой вариант не сработал. Пример, кода:
Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
	
        Файл = новый Файл(НаборТестов.ЗагружаемыйПуть);
        ПутьКаталог = файл.Путь+"/"+ИмяКаталогаМакетов;
	МассивФайлов = НайтиФайлы(ПутьКаталог,"*.mxl",Истина);

	Для каждого Файл из МассиВФайлов Цикл
		ИмяТеста="Тест_ЗагрузитьДанныеИзМакета";
		НаборТестов.Добавить(ИмяТеста, НаборТестов.ПараметрыТеста(Файл.ПолноеИмя,Файл.Имя), "Загрузить макет: "+Файл.Имя);
	КонецЦикла;
	
КонецПроцедуры

В результате мы увидим в дереве тестов, следующий список:

Папка
   ЗагрузитьМакеты
        Загрузить макет: файл1.mxl
        Загрузить макет: файл2.mxl

ivanov660 avatar Jul 16 '18 14:07 ivanov660

Это как раз один из case-ов про который я рассказывал на infostart event 2017, когда был раздел про создание юнит тестов.

ivanov660 avatar Jul 16 '18 14:07 ivanov660

@ivanov660 Ага, кейс понятен и важен.

Устроит вариант, когда "ЗаполнитьСвойствоПриНаличии(Контекст, "ПутьКФайлуПолный", ПутьФайла);" будет выполняться перед заполнением набора тестов ?

artbear avatar Jul 17 '18 09:07 artbear

@ivanov660 А вообще моя рекомендация - использовать проектные пути.

т.е.

  • задавать каталог проекта при запуске из командной строки
    • запуск 1С - сложная собираемая строка запуска, хотя она у Вас наверняка реализована уже в ваших инструментах :)
    • запуск через vanessa-runner - рекомендую - проще всего.
  • затем этот каталог будет в КонтекстЯдра.Объект.КаталогПроекта
  • можно строить относительные пути и получать любые файлы.

В ADD реализовано.

ps я вчера кейс работы с файлами показывал на вебинаре по АДД - есть отдельная страница презентации.

artbear avatar Jul 17 '18 09:07 artbear

  1. Да. Заполнение экспортной переменной "ПутьКФайлуПолный" модуля объекта обработки теста перед выполнением функции получения набора тестов хороший вариант.
  2. Действительно. Функционал запуска юнит-теста на xddRunner мы реализовали с точки зрения пользователя максимально прозрачно, никакой головной боли ;-) создание задания выполнения юнит-теста с 5-й минуты весь ролик идет 9 минут, будет интересно узнать ваше мнение.
  3. Про структуру хранения тестов (на сколько я понял мы об одном и том же). 3.1. Мы разрабатываем и храним тесты в GIT. 3.2. Для каждой локальной машины в разрезе пользователь и компьютер в базе указывается путь к локальному каталогу GIT (сервер запускающий тесты также имеет свой локальный каталог GIT). 3.3. Все тесты в базе имеют относительный путь. 3.4. Формирование командной строки, интеграция разработчика, тестировщика или распараллеливание выполнения тестов не является проблемой. 3.5. В текущий момент существуют некоторые ограничения, но они устранимы.

ivanov660 avatar Jul 17 '18 19:07 ivanov660

@ivanov660 Реализовано в https://github.com/silverbulleters/add/issues/246 (пока в девелоп-ветке)

Рекомендую переходить к использованию именно ADD, т.к. xUnitFor1C никто не развивает, в отличие от активно развивающейся ADD !

artbear avatar Jul 19 '18 06:07 artbear

Заполнение экспортной переменной "ПутьКФайлуПолный" модуля объекта обработки теста перед выполнением функции получения набора тестов хороший вариант.

реализовано и документировано в ADD

artbear avatar Jul 19 '18 06:07 artbear

хорошо понял. перевели бы в архив текущий проект. текущую проблему можно закрывать. обновления закачаю с потомка)

ivanov660 avatar Jul 19 '18 08:07 ivanov660

@ivanov660 у нас здесь сообщество, и я один не могу принять решение о закрытии/архивировании проекта.

есть коллеги, которые предлагали пока не закрывать проект, возможно, они будут дорабатывать.

например, для 8.2, поддержка которого в ADD пока все-таки под вопросом

artbear avatar Jul 19 '18 11:07 artbear

но АДД уже довольно сильно ускакал вперед :)

artbear avatar Jul 19 '18 11:07 artbear