Программное создание тестовых данных
Доступ к методам генерации тестовых реализован через ЮТест.Данные()
, этот метод возвращает общий модуль ЮТТестовыеДанные
.
Не рекомендуется обращаться к модулю ЮТТестовыеДанные
напрямую, используйте ЮТест.Данные()
Возможности
Инструменты работы с тестовыми данными можно разделить на следующие группы:
- Генераторы случайных значений
- Методы создания данных в информаци онной базе
- Методы загрузки из макетов
- Работа с файлами
Генераторы случайных данных
Как уже говорилось в статье в YAxUnit сделан большой упор на генерацию случайных тестовых данных, которая позволяет улучшить покрытие и сократить количество "лишнего" кода. Поставив в самом начале на такой подход мы еще ни разу в нем не разочаровались.
Создание случайных данных базируется на генерации примитивных значения:
-
Числа
ЮТест.Данные().СлучайноеЧисло
- Формирует случайное число в указанном диапазонеЮТест.Данные().СлучайноеПоложительноеЧисло
- Формирует случайное положительное число ограниченное максимумомЮТест.Данные().СлучайноеОтрицательноеЧисло
- Формирует случайное отрицательное число ограниченное минимумом
-
Строки
ЮТест.Данные().СлучайнаяСтрока
- Формирует случайную строку указанной длиныЮТест.Данные().СлучайныйИдентификатор
- Формирует случайный валидный идентификатор (Первым символом должна быть буква или символ подчеркивания, каждый из последующих символов может быть буквой, цифрой или символом подчеркивания)ЮТест.Данные().СлучайныйIPАдрес
- Формирует случайный IP адресЮТест.Данные().СлучайныйНомерТелефона
- Формирует случайный номер телефонаЮТест.Данные().УникальнаяСтрока
- Создает строку на базе нового уникального идентификатора
-
Даты
ЮТест.Данные().СлучайнаяДата
- Формирует случайную дату в указанном диапазонеЮТест.Данные().СлучайноеВремя
- Формирует случайное времяЮТест.Данные().СлучайнаяДатаВБудущем
- Формирует случайную дату в будущем (больше текущей) с возможностью ограничить максимальное значение.
Пример:СлучайнаяДатаВБудущем(2, "часа")
- будет сформирована дата в интервале (ТекущаяДата, ТекущаяДата + 2 часа]ЮТест.Данные().СлучайнаяДатаВПрошлом
- Формирует случайную дату в прошлом (меньше текущей) с возможностью ограничить минимальное значение.
Пример:СлучайнаяДатаВПрошлом(2, "часа")
- будет сформирована дата в интервале [ТекущаяДата - 2 часа, ТекущаяДата)ЮТест.Данные().СлучайнаяДатаПосле
- Формирует случайную дату, которая больше указанной с возможностью ограничить максимальное значение.
Пример:СлучайнаяДатаПосле(Дата, 2, "часа")
- будет сформирована дата в интервале (Дата, Дата + 2 часа]ЮТест.Данные().СлучайнаяДатаДо
- Формирует случайную дату, которая меньше указанной с возможностью ограничить минимальное значение.
Пример:СлучайнаяДатаДо(Дата, 2, "часа")
- будет сформирована дата в интервале [Дата - 2 часа, Дата)
-
Булево
ЮТест.Данные().СлучайноеБулево
- Возвращает случайное булево
-
Получение случайного из предопределенного с писка
-
ЮТест.Данные().СлучайноеЗначениеИзСписка
- Возвращает случайное значение из указанного спискаВозможныеЗначения = ЮТКоллекции.ЗначениеВМассиве(-1, 0, 1);
Возврат ЮТест.Данные().СлучайноеЗначениеИзСписка(ВозможныеЗначения); -
ЮТест.Данные().СлучайноеЗначениеПеречисления
- Возвращает случайное значение перечисления Примеры:Цена = ЮТест.Данные().СлучайноеЗначениеПеречисления(Перечисления.ВидыЦен); // Можно получить значение через указание менеджера
Цена = ЮТест.Данные().СлучайноеЗначениеПеречисления("Перечисление.ВидыЦен"); // Или имя объекта метаданных (подходит для работы с клиента) -
ЮТест.Данные().СлучайноеПредопределенноеЗначение
- Возвращает случайное предопределенное значение Примеры:Цена = ЮТест.Данные().СлучайноеПредопределенноеЗначение(Справочники.ВидыЦен); // Можно получить значение через указание менеджера
Цена = ЮТест.Данные().СлучайноеПредопределенноеЗначение("Справочник.ВидыЦен"); // Или имя объекта метаданных (подходит для работы с клиента)
-
-
ЮТест.Данные().Подражатель
- генератор правдоподобных данных. Генерирует случайные данные на базе словарей, является реализацией faker для 1С.ЮТест.Данные().Подражатель().Люди
ЮТест.Данные().Подражатель().Компании
Наименование
- Формирует случайное наименование компанииИНН
- Формирует случайный ИНН компанииКПП
- Формирует случайный КПП компании
ЮТест.Данные().Подражатель().Банки
НомерСчета
- Формирует случайный номер банковского счетаБИК
- Формирует случайный валидный БИК банка
Методы создания данных в информационной базе
Создание пустышек
Создание записей в базе с минимальным заполнения (наименование, код, номер, дата).
Полезно использовать когда вам нужна ссылка определенного типа, но не важно ее заполнение.
-
ЮТест.Данные().СоздатьЭлемент
- Создает новый элемент справочника или плана видов характеристикТовар = ЮТест.Данные().СоздатьЭлемент(Справочники.Товары); // На основании менеджера
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары"); // На основании имени менеджера
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ОбменДаннымиЗагрузка = Истина;
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары", , , ПараметрыЗаписи); // Запись в режиме ОбменДанными.Загрузка = Истина -
ЮТест.Данные().СоздатьДокумент
- Создает новый документТовар = ЮТест.Данные().СоздатьДокумент(Документ.ПриходТовара); // На основании менеджера
Товар = ЮТест.Данные().СоздатьДокумент("Документ.ПриходТовара"); // На основании имени менеджера -
ЮТест.Данные().СоздатьГруппу
- Создает новую группу справочника или плана видов характеристикТовар = ЮТест.Данные().СоздатьГруп пу(Документ.ПриходТовара); // На основании менеджера
Товар = ЮТест.Данные().СоздатьГруппу("Документ.ПриходТовара"); // На основании имени менеджера -
ЮТест.Данные().Фикция
- Создает новый объект на основании его типаТовар = ЮТест.Данные().Фикция(Тип("ДокументСсылка.ПриходТовара"));
Товар = ЮТест.Данные().Фикция(Новый ОписаниеТипов("ДокументСсылка.ПриходТовара"));
Товар = ЮТест.Данные().Фикция(Новый ОписаниеТипов("ДокументСсылка.ПриходТовара, ДокументСсылка.РасходТовара")); // Будет выбран случайный тип
Конструктор объекта
ЮТест.Данные().КонструкторОбъекта
- инструмент, с помощью которого вы можете создать объект информационной базы с необходимыми реквизитами.
Конструктор позволяет:
- В более компактной форме заполнять объект
- Имеет методы записи и проведения
- При возникновении ошибки оборачивает их в более понятные человеку описания
- Киллер фича -
Фикция
,ФикцияРеквизитов
иФикцияОбязательныхПолей
. Устанавливает случайно сгенерированные значения реквизитов. Таким образом делается акцент на важных для теста реквизитах и экономит "строки" на генерацию ненужных значений - Умеет создавать данные с клиента и удалять их по окончании теста
Конструктор = ЮТест.Данные().КонструкторОбъекта("Докум енты.ПриходТовара")
.ФикцияРеквизитов("Поставщик, Склад")
.ФикцияОбязательныхПолей()
.ТабличнаяЧасть("Товары")
ОбщиеДанные = Новый Структура("ВидЦены, Поставщик", Закупочная, Конструктор.ДанныеОбъекта().Поставщик);
Для Инд = 1 По 3 Цикл
Конструктор.ДобавитьСтроку()
.Фикция("Товар")
.УстановитьРеквизиты(ОбщиеДанные)
.Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
.Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
КонецЦикла;
Возврат Конструктор.Провести();
Описание всех методов и примеры можно посмотреть в описании конструктора объекта
Конструктор движения документа
ЮТест.Данные().КонструкторДвижений
- инструмент, с помощью которого вы можете формировать необходимые для теста движения документа.
С его помощью вы можете сократить время на подготовку данных и упростить логику их создания.
Конструктор позволяет:
- В боле е компактной форме формировать движения объекта.
- При возникновении ошибки оборачивает их в более понятные человеку описания.
- Киллер фича -
Фикция
,ФикцияРеквизитов
иФикцияОбязательныхПолей
. Устанавливает случайно сгенерированные значения реквизитов.
Таким образом делается акцент на важных для теста реквизитах и экономит "строки" на генерацию ненужных значений. - Умеет создавать данные с клиента и удалять их по окончании теста.
// Создание пустышки документа, будет использоваться в качестве регистратора
Документ = ЮТест.Данные().СоздатьДокумент("Документы.УстановкаЦен");
// Формирование нужных проводок по регистру ЦеныТоваров
ЮТест.Данные().КонструкторДвижений(Документ, "ЦеныТоваров") // Инициализация конструктора
.ДобавитьСтроку() // Добавление записи в набор
.ФикцияРеквизитов("Товар, ВидЦен") // Заполнение фиктивными данными
.Установить("Цена", 0) // Установка цены
.Записать(); // Сохранение
// Создание дополнительных данных
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
Покупатель = ЮТест.Данные().СоздатьЭлемент("Справочники.Контрагенты");
// Инициализация конструктора
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "Продажи");
// Заполнение движений
Для Инд = 1 По 10 Цикл
Конструктор
.ДобавитьСтроку()
.Установить("Покупатель", Покупатель)
.ФикцияРеквизитов("Товар, Сумма");
КонецЦикла;
// Сохранение записей в базе
Конструктор.Записать();
Загрузка данных из макетов
Работа с макетами описана в отдельной статье
Работа с файлами
ЮТест.Данные().НовыйФайл
- Создает новый файл, который будет удален после тестаЮТест.Данные().НовоеИмяВременногоФайла
- Возвращает имя нового файла, по окончании выполнения теста этот файл будет удален
Создание XDTO
При тестировании обменов или интеграций использующих SOAP вам может пригодится ЮТест.Данные().КонструкторОбъектаXDTO
, с помощью которого вы можете с легкостью создать XDTO объект.
Тип = СериализаторXDTO.XMLТип(Тип("ДокументОбъект.Заказ"));
Дата = ЮТест.Данные().СлучайнаяДата();
Номер = ЮТест.Данные().СлучайнаяСтрока(9);
Сумма = ЮТест.Данные().СлучайноеЧисло();
Реквизиты = Новый Структура("Number, Сумма", Номер, Сумма);
Объект = ЮТест.Данные().КонструкторОбъектаXDTO(Тип.ИмяТипа, Тип.URIПространстваИмен)
.Установить("Date", Дата)
.ФикцияОбязательныхПолей()
.УстановитьРеквизиты(Реквизиты)
.Фикция("Покупатель")
.ДобавитьНовый("Товары")
.ФикцияРеквизитов("Цена, Количество")
.ДанныеОбъекта();
Он был создан на основании уже проверенного и зарекомендовавшего себя ЮТест.Данные().КонструкторОбъекта
и обладает схожим API.
-
Установить(ИмяРеквизита, Значение)
- Устанавливает значение указанного реквизита объекта. -
УстановитьРеквизиты(ЗначенияРеквизитов)
- Устанавливает значения реквизитов объекта. -
Фикция(ИмяРеквизита)
- на основании типа создаваемого объекта определяет тип реквизита и устанавливает для него случайное значение.- Для примитивных значение генерируется случайное значение
- Для объектных типов создается новый объект
- Для коллекций - генерируется случайно количество случайных элементов (на основании типа)
-
ФикцияОбязательныхПолей()
- на основании типа создаваемого объекта определяет список обязательных полей и для каждого из них вызывается методФикция
. -
ФикцияНезаполненных()
- для всех незаполненных полей создаваемого объекта вызывает методФикция
. -
ФикцияРеквизитов()
- для перечисленных полей создаваемого объекта вызывает методФикция
. -
ДобавитьНовый(ИмяРеквизита)
- Добавляет новый объект в указанную реквизит-коллекцию. Все последующие вызовы установки реквизитов будут относится к этому добавленному объекту. -
ПерейтиКВладельцу()
- используется после методаДобавитьНовый
для переключения контекста заполнения на родительский объект. Например вам необходимо добавить две строки в табличную часть.Объект = ЮТест.Данные().КонструкторОбъектаXDTO(Тип.ИмяТипа, Тип.URIПространстваИмен)
.ДобавитьНовый("Товары")
.Фикция("Цена")
.Фикция("Количество")
.ПерейтиКВладельцу()
.ДобавитьНовый("Товары")
.ФикцияРеквизитов("Цена, Количество")
.ДанныеОбъекта();Здесь перед добавлением второй строки нужно переключится (
ПерейтиКВладельцу
) на основной объект и после этого можно добавить строку. -
ДанныеОбъекта()
- возвращает созданный объект XDTO.
Примеры
Генерация фейкового документа
#Если Сервер Тогда
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
#Иначе
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
#КонецЕсли
Конструктор
.ФикцияРеквизитов("Поставщик, Склад, Валюта")
.Установить("Организация", ЮТест.Данные().КонструкторОбъекта("Справочники.Организации").Установить("КакойТоТамУчет", Истина))
.ТабличнаяЧасть("Товары");
Для Инд1 = 1 По ЮТест.Данные().СлучайноеЧисло(1, 5) Цикл
Конструктор.ДобавитьСтроку()
.Фикция("Товар")
.Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
.Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
КонецЦикла;
Ссылка = Конструктор.Провести();
Генерация произвольных фейковых данных
Функция ОписаниеСервера(Знач Идентификатор = Неопределено) Экспорт
Описание = БазовоеОписаниеОбъекта(Идентификатор, "СРВ");
Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
Описание.Вставить("ЧастотаЯдра", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(4, 3));
Описание.Вставить("КоличествоЯдер", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(10));
Описание.Вставить("КоличествоПотоков", Описание.КоличествоЯдер * 2);
Описание.Вставить("ПроизводительностьПроцессора", Описание.ЧастотаЯдра * Описание.КоличествоЯдер);
Описание.Вставить("ОбъемПамяти", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(1024, 3));
Описание.Вставить("Диски", Новый Массив());
Описание.Вставить("Кластер");
Для Инд = 1 По ЮТТестовыеДанные.СлучайноеЧисло(1, 3) Цикл
Описание.Диски.Добавить(ОписаниеДиска());
КонецЦикла;
Возврат Описание;
КонецФункции
Функция ОписаниеЗаявкиНаСозданиеВМ() Экспорт
Описание = Новый Структура();
Описание.Вставить("Наименование", "req-" + ЮТТестовыеДанные.СлучайнаяСтрока());
Описание.Вставить("ДатаДобавления", глПолучитьМосковскоеВремя());
Описание.Вставить("ДатаОкончанияАренды", глДобавитьКДате(глПолучитьМосковскоеВремя(), "ДЕНЬ", 2));
Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
Описание.Вставить("Проект", Проект());
Описание.Вставить("Ментейнер", ПараметрыСеанса.Сотрудник);
Описание.Вставить("КоличествоCPU", ЮТТестовыеДанные.СлучайноеЧисло(1, 4));
Описание.Вставить("КоличествоПамяти", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
Описание.Вставить("КоличествоДисков", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
Описание.Вставить("ОперационнаяСистема", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОперационныеСистемы));
Описание.Вставить("СредаЭксплуатации", "");
Описание.Вставить("Назначение", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.НазначенияВиртуальныхМашин));
Описание.Вставить("ТипСреды", Справочники.ТипыИнформационныхСред.BETA);
Описание.Вставить("КодСервиса", ЮТТестовыеДанные.СлучайнаяСтрока(1));
Возврат Описание;
КонецФункции
Функция НовыйОбразDocker(Версия, ПоУмолчанию = Истина) Экспорт
Данные = Новый Структура("Адрес, ВерсияПлатформы, ТипПлатформы, ИспользоватьПоУмолчанию");
Данные.Адрес = "gitlab.ru/orais/ci_cd/1cws-apache24:" + Версия;
Данные.ВерсияПлатформы = Версия;
Данные.ТипПлатформы = Перечисления.ТипыСоединен ияИсточникаДанных.Соединение1СПредприятие83Сервер;
Данные.ИспользоватьПоУмолчанию = ПоУмолчанию;
Возврат ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОбразыDocker, Версия, Данные);
КонецФункции