1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-08 13:06:32 +02:00
yaxunit/README.md
Корякин Алексей 703f5dc7f1 Init
2022-05-30 12:00:41 +03:00

16 KiB

YAXUnit. Расширение для запуска тестов

Назначение

Самостоятельное расширение для написания и выполнения модульного тестирования.

Возможности

  • YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов
  • Разрабатывался с оглядкой на JUnit5, пожалуй лучший фреймворк тестирования
  • Предоставляет движок выполнения тестов
  • Предоставляет утверждения для проверки ожидаемых результатов
  • Тесты могут быть организованы в наборы и выполнятся в разных контекстах
  • Позволяет быстрее и проще не только писать, но и читать тесты
  • Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json.
  • Большая часть пользовательского API реализована как текучие выражения
  • Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями
  • Реализован плаги для EDT, который упрощает процесс запуска тестов

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

Пример тестового модуля

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

Пример модуля тестов:

#Область ТестыAPI

Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт

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

КонецПроцедуры

#КонецОбласти

#Область Тесты

Процедура Сложение() Экспорт

    // Реализация теста на сложение
    ЮТУтверждения.Что(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
        .ИмеетТип("Число") // Проверим тип
        .Заполнено() // Заполненность проверяемого значения
        .Больше(0) // Сравним с нулем
        .Равно(5); // Проверим ожидаемый результат

    ЮТУтверждения.Что(-8 + 8, "-8 + 8") // Проверим второй вариант
        .Равно(0);

КонецПроцедуры

Процедура Вычитание() Экспорт

    // Реализация теста на вычитание
    ЮТУтверждения.Что(2 - 3, "2 - 3")
        .ИмеетТип("Число")
        .Заполнено()
        .Меньше(0);

КонецПроцедуры

#КонецОбласти

#Область События

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

Процедура ПередВсемиТестами() Экспорт
    // Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
    Сообщить("Запуск тестирования");

КонецПроцедуры

Процедура ПередТестовымНабором() Экспорт

    // Выполняется перед каждым тестовым набором для каждого контекста выполнения
    Контекст = ЮТКонтекст.КонтекстНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании
                                            // Контекст живет в рамках контекста выполнения, 
                                            // таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами
    Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());

КонецПроцедуры

Процедура ПередТестом() Экспорт

    // Выполняется перед каждым тестом
    Контекст = ЮТКонтекст.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании
                                            // Контекст создает перед тестом и уничтожается после его выполнения
                                            // В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить
    Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());

КонецПроцедуры

Процедура ПослеТеста() Экспорт

    // Выполняется после каждого теста
    Контекст = ЮТКонтекст.КонтекстТеста();
    Сообщить("Время выполнения теста: " + ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала);

КонецПроцедуры

Процедура ПослеТестовогоНабора() Экспорт

    // Выполняется после каждого тестового набора для каждого контекста выполнения
    // Применяется для очистки данных и т.д.
    Контекст = ЮТКонтекст.КонтекстНабора();
Сообщить("Время выполнения набора: " + ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала);

КонецПроцедуры

Процедура ПослеВсехТестов() Экспорт

    // Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
    // В этом событии все контексты уже уничтожены
   Сообщить("Тестирование завершено");

КонецПроцедуры

#КонецОбласти

После запуска тестов модуля в EDT получаем такой отчет:

Отчет

Запуск

Для запуска тестов необходимо создать конфигурацию запуска и указать ее при запуске предприятия в параметре RunUnitTests

Конфигурация запуска

Конфигурация настраивается в файле json и может иметь следующие параметры:

Имя параметра Тип Значение по умолчанию Описание
filter Object Object, смотрите ниже Параметры фильтрации, поиска тестов
reportFormat String "jUnit" Формат отчета о тестировании, возможные значения: "jUnit", "JSON"
reportPath String "" Путь к формируемому отчету, можно указать или каталог (в которому будет создан файл отчета) или путь к файлу
closeAfterTests Boolean True Признак закрытия 1С:Предприятие по завершению тестирования

Параметры фильтрации:

Имя параметра Тип Значение по умолчанию Описание
extensions Array ["tests"] Список имен расширений, из которых грузятся тесты
modules Array Null Список имен модулей, из которых грузятся тесты
suites Array Null Не реализованно. Список имен тестовых наборов, которые будут запускаться
tags Array Null Не реализованно. Список тегов, которые будут запускаться
contexts Array Null Не реализованно. Список имен контекстов исполнения, в которых будут запускаться тесты
paths Array Null Не реализованно. Список полных путей к исполняемым тестам (`[имя модуля.имя теста

Примеры:

  1. Запустить тесты из расширения tests, расположенные в модулях МодульТестов1, МодульТестов2, закрыть предприятие по завершении и сохранить отчет в формате junit

    {
        "filter": {
            "modules": ["МодульТестов1", "МодульТестов2"]
        },
        "reportPath": "C:\\temp\\jUnit\\report.xml",
        "reportFormat": "jUnit",
        "closeAfterTests": true
    }
    
  2. Запустить все тесты из расширения YAXUNIT и сохранить отчет файл C:\temp\jUnit\report.xml, остальные параметры будут установлены по умолчанию

    {
        "filter": {
            "extensions": ["YAXUNIT"]
        },
        "reportPath": "C:\\temp\\jUnit\\report.xml"
    }
    

Строка запуска предприятия

[путь к клиенту 1С] ENTERPRISE [Параметры подключения к ИБ] [Параметры авторизации] /C RunUnitTests=/путь/к/конфигурационному/файлу

После загрузки расширения в информационную базу необходимо отключить у него безопасный режим и защиту от опасных действий

Пример:

"C:\Program Files\1cv8\8.3.18.1698\bin\1cv8c.exe" ENTERPRISE /IBName MyInfoBase /N Admin /C RunUnitTests=C:\tmp\test-config.json Запуск тестов в режиме тонкого клиента на информационной базе MyInfoBase под пользователем Admin по конфигурации указанной в файле C:\tmp\test-config.json

Запуск из EDT

При разработке в EDT процесс запуска тестов можно упростить, установив плагин и настроив конфигурацию запуска, как указано в описании плагина.

Благодарности

Приносим благодарность всему open-source сообществу 1с за идеи и мотивацию.

Особая благодарность авторам и контрибьютерам проектов


Лицензия

Copyright © 2022 BIA-Technologies Limited Liability Company

Distributed under the Apache License, Version 2.0