/yaxunit

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

Primary Language1C EnterpriseApache License 2.0Apache-2.0

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

Назначение

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

Возможности

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

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

А для того, что бы начать писать тесты необходимо установить расширение в свою IDE (конфигуратор или EDT).

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

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

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

#Область СлужебныйПрограммныйИнтерфейс

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отчет

Запуск

Для запуска тестов необходимо запустить 1С:Предприятие с параметром RunUnitTests, при необходимости можно указать путь к файлу конфигурации запуска.

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

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

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

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

Имя параметра Тип Значение по умолчанию Описание
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