1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-11-30 08:36:50 +02:00
yaxunit/docs/test-data.md
Корякин Алексей Викторович (000106721) e2ee262a36 ONECICD-555 / Документация
2022-10-04 16:39:36 +03:00

8.9 KiB

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

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

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

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

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

Например:

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

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

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

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

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

Примеры

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