17 KiB
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С:Предприятие по завершению тестирования |
Параметры фильтрации:
Имя параметра | Тип | Значение по умолчанию | Описание |
---|---|---|---|
extensions |
Array |
["tests"] |
Список имен расширений, из которых грузятся тесты |
modules |
Array |
Null |
Список имен модулей, из которых грузятся тесты |
suites |
Array |
Null |
Не реализованно. Список имен тестовых наборов, которые будут запускаться |
tags |
Array |
Null |
Не реализованно. Список тегов, которые будут запускаться |
contexts |
Array |
Null |
Не реализованно. Список имен контекстов исполнения, в которых будут запускаться тесты |
paths |
Array |
Null |
Не реализованно. Список полных путей к исполняемым тестам (`[имя модуля.имя теста |
Примеры:
-
Запустить тесты из расширения
tests
, расположенные в модуляхМодульТестов1
,МодульТестов2
, закрыть предприятие по завершении и сохранить отчет в форматеjunit
{ "filter": { "modules": ["МодульТестов1", "МодульТестов2"] }, "reportPath": "C:\\temp\\jUnit\\report.xml", "reportFormat": "jUnit", "closeAfterTests": true }
-
Запустить все тесты из расширения
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