1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-26 18:58:55 +02:00

15 KiB

tags
Getting started
Test data

Тестовые данные

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

Есть разные подходы к работе с тестовыми данными:

  1. Ручное наполнение тестовой базы (мы предварительно создаем все что необходимо для тестов в базе, а потом используем её для прогона тестов)
  2. Использование файлов с данными (макеты - сгенерированные в нужном формате файлы с описанием тестовых данных, загружаемые при выполнении тестов)
  3. Программное создание нужных данных внутри теста

У каждого из вариантов есть свои плюсы и минусы, и при грамотной компоновке можно достичь наилучшего результата.

Например:

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

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

В текущей версии тестовый движок предоставляет api для программного создания тестовых данных. За это отвечает общий модуль ЮТТестовыеДанные, к которому можно обратиться через метод ЮТест.Данные.

Сейчас это минимальный набор методов, который в дальнейшем будет развиваться. Он позволяет:

  • Создавать данные информационной базы
  • Генерировать случайные значения
  • Работать с файлами
  • Использовать таблицы markdown в качестве макетов данных

Примеры

  1. Генерация фейкового документа

    #Если Сервер Тогда
        Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
    #Иначе
        Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
    #КонецЕсли
    
        Конструктор
            .Фикция("Поставщик")
            .Фикция("Склад")
            .Фикция("Валюта")
            .Фикция("Организация")
            .ТабличнаяЧасть("Товары");
    
        Для Инд1 = 1 По ЮТест.Данные().СлучайноеЧисло(1, 5) Цикл
            Конструктор.ДобавитьСтроку()
                .Фикция("Товар")
                .Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
                .Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
                .Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
        КонецЦикла;
    
        Ссылка = Конструктор.Провести();
    
  2. Генерация произвольных фейковых данных

    Функция ОписаниеСервера(Знач Идентификатор = Неопределено) Экспорт
    
        Описание = БазовоеОписаниеОбъекта(Идентификатор, "СРВ");
    
        Описание.Вставить("Адрес", ЮТТестовыеДанные.Случайный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, Версия, Данные);
    
    КонецФункции
    
  3. Чтение из таблицы Markdown

    Макет = 
    "| Имя                    | ИмяКоллекции            | Конструктор          | Группы | Ссылочный | Реквизиты | Измерения | Ресурсы | РеквизитыАдресации | ТабличныеЧасти |
    ||------------------------|-------------------------|----------------------|--------|-----------|-----------|-----------|---------|--------------------|----------------|
    || Справочник             | Справочники             | СоздатьЭлемент       | +      | +         | +         |           |         |                    | +              |
    || Документ               | Документы               | СоздатьДокумент      |        | +         | +         |           |         |                    | +              |
    || ПланВидовХарактеристик | ПланыВидовХарактеристик | СоздатьЭлемент       | +      | +         | +         |           |         |                    | +              |
    || ПланСчетов             | ПланыСчетов             | СоздатьСчет          |        | +         | +         |           |         |                    | +              |
    || ПланВидовРасчета       | ПланыВидовРасчета       | СоздатьВидРасчета    |        | +         | +         |           |         |                    | +              |
    || ПланОбмена             | ПланыОбмена             | СоздатьУзел          |        | +         | +         |           |         |                    | +              |
    || РегистрСведений        | РегистрыСведений        | СоздатьНаборЗаписей  |        |           | +         | +         | +       |                    |                |
    || РегистрНакопления      | РегистрыНакопления      | СоздатьНаборЗаписей  |        |           | +         | +         | +       |                    |                |
    || РегистрБухгалтерии     | РегистрыБухгалтерии     | СоздатьНаборЗаписей  |        |           | +         | +         | +       |                    |                |
    || РегистрРасчета         | РегистрыРасчета         | СоздатьНаборЗаписей  |        |           | +         | +         | +       |                    |                |
    || БизнесПроцесс          | БизнесПроцессы          | СоздатьБизнесПроцесс |        | +         | +         |           |         |                    | +              |
    || Задача                 | Задачи                  | СоздатьЗадачу        |        | +         | +         |           |         | +                  | +              |
    |";
    КоллекцияОписаний = ЮТТестовыеДанные.ТаблицаMarkDown(Макет);

    ТипыМетаданных = Новый Структура();

    Для Каждого Запись Из КоллекцияОписаний Цикл
        
        Описание = Новый Структура();
        Описание.Вставить("Имя", Запись.Имя);
        Описание.Вставить("ИмяКоллекции", Запись.ИмяКоллекции);
        Описание.Вставить("Конструктор", Запись.Конструктор);
        Описание.Вставить("Группы", Запись.Группы = "+");
        Описание.Вставить("Ссылочный", Запись.Ссылочный = "+");
        Описание.Вставить("Реквизиты", Запись.Реквизиты = "+");
        Описание.Вставить("Измерения", Запись.Измерения = "+");
        Описание.Вставить("Ресурсы", Запись.Ресурсы = "+");
        Описание.Вставить("РеквизитыАдресации", Запись.РеквизитыАдресации = "+");
        Описание.Вставить("ТабличныеЧасти", Запись.ТабличныеЧасти = "+");
        
        ТипыМетаданных.Вставить(Описание.Имя, Описание);
        ТипыМетаданных.Вставить(Описание.ИмяКоллекции, Описание);
        
    КонецЦикла;

    Возврат ТипыМетаданных;