1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-23 18:54:40 +02:00
yaxunit/README.md

237 lines
16 KiB
Markdown
Raw Normal View History

2020-10-12 10:00:55 +03:00
# 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)