mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-01-23 18:54:40 +02:00
237 lines
16 KiB
Markdown
237 lines
16 KiB
Markdown
|
# YAXUnit. Расширение для запуска тестов
|
||
|
|
||
|
* [Назначение](#назначение)
|
||
|
* [Возможности](#возможности)
|
||
|
* [Пример тестового модуля](#пример-тестового-модуля)
|
||
|
* [Запуск](#запуск)
|
||
|
* [Конфигурация запуска](#конфигурация-запуска)
|
||
|
* [Строка запуска предприятия](#строка-запуска-предприятия)
|
||
|
* [Запуск из EDT](#запуск-из-edt)
|
||
|
* [Благодарности](#благодарности)
|
||
|
* [Лицензия](#лицензия)
|
||
|
|
||
|
## Назначение
|
||
|
|
||
|
Самостоятельное расширение для написания и выполнения модульного тестирования.
|
||
|
|
||
|
### Возможности
|
||
|
|
||
|
* YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов
|
||
|
* Разрабатывался с оглядкой на JUnit5, пожалуй лучший фреймворк тестирования
|
||
|
* Предоставляет движок выполнения тестов
|
||
|
* Предоставляет утверждения для проверки ожидаемых результатов
|
||
|
* Тесты могут быть организованы в наборы и выполнятся в разных контекстах
|
||
|
* Позволяет быстрее и проще не только писать, но и читать тесты
|
||
|
* Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json.
|
||
|
* Большая часть пользовательского API реализована как [текучие выражения](https://ru.wikipedia.org/wiki/Fluent_interface)
|
||
|
* Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями
|
||
|
* Реализован [плаги для EDT](https://gitlab.dellin.ru/orais/tools/ru.biatech.edt.xtest), который упрощает процесс запуска тестов
|
||
|
|
||
|
Подробнее, с функциональностью, вы можете ознакомится прочитав [документацию](docs/api-topic.md) и попробовав написать тесты
|
||
|
|
||
|
## Пример тестового модуля
|
||
|
|
||
|
Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - `ИсполняемыеСценарии` и реализовать тесты.
|
||
|
|
||
|
Пример модуля тестов:
|
||
|
|
||
|
```bsl
|
||
|
#Область ТестыAPI
|
||
|
|
||
|
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||
|
|
||
|
// Регистрация тестов
|
||
|
ЮТТесты // Регистрация тестов выполняет через модуль регистратор
|
||
|
.ТестовыйНабор ("Математические методы") // Набор - объединение тестов
|
||
|
.Тест("Сложение") // Обязательно при регистрации указываем имя экспортного метода
|
||
|
.Тест("Вычитание", "Вычитание") // Также можно указать представление теста
|
||
|
.Тест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля
|
||
|
.ТестКлиент("УмножениеНаКлиенте") // Есть отдельный метод для регистрации клиентских тестов
|
||
|
.ТестСервер("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов
|
||
|
.Тест("ВызовДеления", "Вызов деления", , "ВызовСервера"); // А для вызова сервер нет метода, поэтому только так
|
||
|
.ТестовыйНабор("Строковые методы")
|
||
|
.Тест("СтрНайти")
|
||
|
.Тест("СтрРазделить);
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
#КонецОбласти
|
||
|
|
||
|
#Область Тесты
|
||
|
|
||
|
Процедура Сложение() Экспорт
|
||
|
|
||
|
// Реализация теста на сложение
|
||
|
ЮТУтверждения.Что(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
|
||
|
.ИмеетТип("Число") // Проверим тип
|
||
|
.Заполнено() // Заполненность проверяемого значения
|
||
|
.Больше(0) // Сравним с нулем
|
||
|
.Равно(5); // Проверим ожидаемый результат
|
||
|
|
||
|
ЮТУтверждения.Что(-8 + 8, "-8 + 8") // Проверим второй вариант
|
||
|
.Равно(0);
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
Процедура Вычитание() Экспорт
|
||
|
|
||
|
// Реализация теста на вычитание
|
||
|
ЮТУтверждения.Что(2 - 3, "2 - 3")
|
||
|
.ИмеетТип("Число")
|
||
|
.Заполнено()
|
||
|
.Меньше(0);
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
#КонецОбласти
|
||
|
|
||
|
#Область События
|
||
|
|
||
|
// Также в тесте можно обрабатывать события выполнения
|
||
|
// Например можно реализовать подготовку и удаление тестовых данных
|
||
|
// Зачистку временных файлов, настройку системы
|
||
|
|
||
|
Процедура ПередВсемиТестами() Экспорт
|
||
|
// Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||
|
Сообщить("Запуск тестирования");
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
Процедура ПередТестовымНабором() Экспорт
|
||
|
|
||
|
// Выполняется перед каждым тестовым набором для каждого контекста выполнения
|
||
|
Контекст = ЮТКонтекст.КонтекстНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании
|
||
|
// Контекст живет в рамках контекста выполнения,
|
||
|
// таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами
|
||
|
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
Процедура ПередТестом() Экспорт
|
||
|
|
||
|
// Выполняется перед каждым тестом
|
||
|
Контекст = ЮТКонтекст.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании
|
||
|
// Контекст создает перед тестом и уничтожается после его выполнения
|
||
|
// В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить
|
||
|
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
Процедура ПослеТеста() Экспорт
|
||
|
|
||
|
// Выполняется после каждого теста
|
||
|
Контекст = ЮТКонтекст.КонтекстТеста();
|
||
|
Сообщить("Время выполнения теста: " + ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала);
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
Процедура ПослеТестовогоНабора() Экспорт
|
||
|
|
||
|
// Выполняется после каждого тестового набора для каждого контекста выполнения
|
||
|
// Применяется для очистки данных и т.д.
|
||
|
Контекст = ЮТКонтекст.КонтекстНабора();
|
||
|
Сообщить("Время выполнения набора: " + ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала);
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
Процедура ПослеВсехТестов() Экспорт
|
||
|
|
||
|
// Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||
|
// В этом событии все контексты уже уничтожены
|
||
|
Сообщить("Тестирование завершено");
|
||
|
|
||
|
КонецПроцедуры
|
||
|
|
||
|
#КонецОбласти
|
||
|
|
||
|
```
|
||
|
|
||
|
После запуска тестов модуля в EDT получаем такой отчет:
|
||
|
|
||
|
![Отчет](docs/images/report.PNG)
|
||
|
|
||
|
## Запуск
|
||
|
|
||
|
Для запуска тестов необходимо создать конфигурацию запуска и указать ее при запуске предприятия в параметре `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`
|
||
|
|
||
|
```JSON
|
||
|
{
|
||
|
"filter": {
|
||
|
"modules": ["МодульТестов1", "МодульТестов2"]
|
||
|
},
|
||
|
"reportPath": "C:\\temp\\jUnit\\report.xml",
|
||
|
"reportFormat": "jUnit",
|
||
|
"closeAfterTests": true
|
||
|
}
|
||
|
```
|
||
|
|
||
|
2. Запустить все тесты из расширения `YAXUNIT` и сохранить отчет файл `C:\temp\jUnit\report.xml`, остальные параметры будут установлены по умолчанию
|
||
|
|
||
|
```JSON
|
||
|
{
|
||
|
"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 процесс запуска тестов можно упростить, установив [плагин](https://gitlab.dellin.ru/orais/tools/ru.biatech.edt.xtest)
|
||
|
и настроив конфигурацию запуска, как указано в описании плагина.
|
||
|
|
||
|
## Благодарности
|
||
|
|
||
|
Приносим благодарность всему [open-source сообществу 1с](https://github.com/topics/1c-enterprise) за идеи и мотивацию.
|
||
|
|
||
|
Особая благодарность авторам и контрибьютерам проектов
|
||
|
|
||
|
* [xUnitFor1C](https://github.com/xDrivenDevelopment/xUnitFor1C/graphs/contributors)
|
||
|
* [vanessa-automation](https://github.com/Pr-Mex/vanessa-automation/graphs/contributors)
|
||
|
* [add](https://github.com/vanessa-opensource/add/graphs/contributors)
|
||
|
|
||
|
---
|
||
|
|
||
|
## Лицензия
|
||
|
|
||
|
Copyright © 2022 [BIA-Technologies Limited Liability Company](http://bia-tech.ru/)
|
||
|
|
||
|
Distributed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)
|