ivanov660 / TestingTool-3

Инструмент автоматизации тестирования ПО
Apache License 2.0
104 stars 24 forks source link

ВОПРОС: передача параметров между тестами в рамках одной проверки #79

Closed uramalyutin closed 4 years ago

uramalyutin commented 4 years ago

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

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

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

Нет ли уже какого-то функционала, который мог бы решить эту проблему? Или эту проблему надо решать другим способом - например, как-то переделывать тесты или еще что-то...

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

uramalyutin commented 4 years ago

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

ivanov660 commented 4 years ago
  1. Интересное предложение. Ранее думали над этим.
  2. Однако, в логике есть некоторая проблема. Если упадет первый тест, то все остальные упадут совместно.
  3. Этот параметр думаю можно передавать несколькими способами:

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

--- далее где надо записываете: ПланировщикЗаданийСервер.УстановитьЗначениеПользовательскойПеременной(Неопределено, ИмяПеременной, ЗначениеПеременной)

--- где надо читаете: ПланировщикЗаданийСервер.ПолучитьЗначениеПользовательскойПеременной(Неопределено, ИмяПеременной)

для имени переменной можете добавить номер проверки ИмяПеременной="Моя переменная"+Объект.НомерПроверки (если в параллель могут работать несколько разных тестов или на разных базах)

б) через файл на клиенте:

`ПутьКФайлу = "C://temp/Данныетеста "+Объект.НомерПроверки+".txt";
Данные = "Номер документа";

// чтение
ТекстовыйДокумент = новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ПутьКФайлу);
Текст = ТекстовыйДокумент.ПолучитьТекст();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Текст);
ДанныеСтруктура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

// запись
ДанныеСтруктура = новый Струкутра("НомерДокумента,ИмяКонтрагента",122,"ООО Тест");
Документ = новый ТекстовыйДокумент;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписатьJSON(ЗаписьJSON,ДанныеСтруктура);
Текст = ЗаписьJSON.Закрыть();
Модуль_СервисныеФункции = ПолучитьФорму("ВнешняяОбработка.МенеджерСценарногоТеста.Форма.Модуль_СервисныеФункции");
Документ.УстановитьТекст(Текст);
Документ.Записать(ПутьКФайлу,"UTF-8");`

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

uramalyutin commented 4 years ago

Доработки конфигурации.

  1. Сделал новый общий модуль image

  2. Для измерения Задание регистра сведений Пользовательские переменные заданий в тип данных добавил еще тип Строка (для возможности хранения параметров в разрезе наименований тестируемых баз) image

Работа с параметрами (код выполняется на клиенте).

  1. Для записи параметров в РС Пользовательские переменные заданий создал тест с кодом image

  2. Для получения параметров из РС Пользовательские переменные заданий создал тест с кодом image

  3. Для удаления параметров из РС Пользовательские переменные заданий создал тест с кодом (пока не применяем нигде, но пусть будет) image

  4. Для удобства работы с параметрами создал обработку (код по сути почти весь взял в конфигурации, остальное прям в готовом виде из интернетов). Особо не заморачивался, но пока устраивает. РаботаСПараметрами.zip

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

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

Допущения.

  1. Параметры записываются и получаются по имени базы. Имя базы берется из настройки "Путь подключения клиента тестирования". Этот путь должен быть заполнен (у нас не возникло случая, когда этот путь не был заполнен, но мало ли). Более того, если в этом реквизите срока подключения не к той базе, которая в данный момент подключена в качестве тестируемого приложения, то, естественно, будут получены неправильные значения параметров. image
  2. Поскольку для работы с параметрами используется префикс "Общий_", то такая комбинация символов не должна использоваться в имени параметров кроме как в качестве префикса. Иначе такие параметры также будут загружаться в базу.
  3. Обработка может сохранять и загружать параметры в/из файла *.mxl. В файле должны быть три колонки с заголовками: ТестируемаяБаза, ИмяПараметра, Значение.
ivanov660 commented 4 years ago

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

uramalyutin commented 4 years ago

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

Наверное можно реализовать нашу схему прямо в МСТ, но мы не решились на такие изменения обработки. Для каждого теста можно было бы указать файл, из которого брать значения параметров (по аналогии с файлом данных для DDT-тестов). Если файл не указан или не открывается, например, то брать параметры из самого теста. МСТ тогда должен перед выполнением теста получить значения параметров из файла, а при завершении выполнения записать значения некоторых параметров в файл (нужно добавить признак в таблицу параметров).

В ближайшем будущем планируем начать делать сценарные и юнит-тесты для УТ 11.0, наверное будет еще какое-то количество вопросов от меня по юнит-тестам =)

ivanov660 commented 4 years ago
  1. Изменения по регистру сведений параметров мы внесем, это нормальное замечание.
  2. По другой части изменений, пока у меня еще есть некоторая неопределенность по варианту реализации.
  3. Сейчас мы дальше развиваем менеджер сценарных тестов, сейчас добавляем ИИ для выполнения сценарных тестов (наш проект ИИ Лариса, виртуальный помощник), т.ч. думаю мы в скором времени увидим небольшой прорыв в данном направлении.
ivanov660 commented 4 years ago

Добавили изменения в проект конфигурации

ivanov660 commented 4 years ago

решено в рамках релиза v3.20.11.07

uramalyutin commented 4 years ago

@ivanov660 image Добрый день. Нигде не нашел описания нового механизма, потому пишу сюда: поясните, пожалуйста, как пользоваться новыми командами и самое главное за что отвечаю свойства в них (особенно тип и ключ).

ivanov660 commented 4 years ago
  1. Документацию пока еще оформляю, думаю что все же выложить отдельным куском на сайте. Целиком уж очень большой объем получается(
  2. Действие предназначено для возможности сохранения параметров и передачи между различными сценариями. Может использоваться для отладки. Для запуска клиентов тестирования по параметрам сохраненным в базе тестирование 3.0. Для работы с виртуальным помощником (в разработке). Это позволит создавать еще более гибкие и интеллектуальные сценарии.
  3. Описание: Действие: Память Команда: Запомнить - сохранить в один из вариантов по типу. Вспомнить - загрузить из параметра Забыть - удаляет Ключ: Требуется для идентификации в базе Тестирование 3.0 Путь к файлу: Требуется если сохраняется в файл каталога или временный файл. Для временного файла указывается имя файла. Для каталога полный путь до файла в общем каталоге. Имя параметра - имя параметра из таблицы "Параметры", в которую будет сохраняться или из которой будет браться значение Тип: Определяет как будут храниться данные Временный каталог + JSON - хранятся во временном каталоге в текстовом файле формата JSON. Обязательно указывать свойство "Путь к файлу". Каталог + JSON - хранятся по пути (общий каталог или путь на диске сервера) в текстовом файле формате JSON. Обязательно указывать свойство "Путь к файлу" *База данных - хранится в базе данных Тестирование 3.0. Обязательно указывать свойство Ключ.
    • Свойства подключения - позволяет только загрузить параметры подключения пользователей. Доступна только одна команда "Вспомнить". Данные будут сохранены в параметр таблицы "Параметры" с типом строка подключения. Данные хранятся в разделе "Тестирование" и регистре сведений "Параметры подключения к базам данных". Указание ключа в поле регистра сведений должно совпадать с ключом в сценарии. Номер порта указывать также обязательно и они не должны пересекаться в рамках одного ключа и запущенных сценариев (проверки пока нет). В регистре допускается указание полей в комбинации.
      • Пользователь 1с и База 1С - в этом случае будут использоваться логин и пароль и параметры подключения к базе.
      • Пользователь 1С и пустое значение для Базы 1С - в этом случае логин и пароль берутся из базы тестирование 3.0, а параметры подключения используются те, которые были указаны при запуске сценария (или по умолчанию в настройках).
      • Пустое значение пользователя 1С и База 1С - в этом случае пароль и логин берутся те, которые были указаны при запуске сценария (или по умолчанию в настройках), а параметры подключения берутся из базы тестирование 3.0. Если вы запускаете тест для той же базы, но с разными правами, то в регистре достаточно указать ключ, пользователя 1С, порт подключения, а для базы 1С указать пустое значение. Это позволит запускать один и тот же тест для разных проверок с разными клиентами тестирования, т.е. снизит количество настроек. При запуске сценария система автоматически запросит данные подключения и запустит с необходимыми параметрами тестируемых клиентов.