Skip to content

Commit

Permalink
Merge branch 'release/24.04'
Browse files Browse the repository at this point in the history
  • Loading branch information
alkoleft committed May 7, 2024
2 parents e21e082 + 5d79eb7 commit e51c92b
Show file tree
Hide file tree
Showing 107 changed files with 3,147 additions and 548 deletions.
13 changes: 13 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Важно: Пожалуйста, перед созданием PR создайте проблему (issue) -->
<!-- Любые изменения необходимо описать и при необходимостиобсудить, прежде чем продолжить. Невыполнение этого требования может привести к отклонению запроса на включение. -->

## Описание изменний

<!-- Разместите здесь краткое описание изменений -->

----

- [ ] Добавлены тесты
- [ ] Изменения отражены в документации (при необходимости)

Close #<Укажите номер issue для автоматического закрытия после принятия реквеста>
34 changes: 34 additions & 0 deletions documentation/blog/2024/05/07-engine-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
title: YaxUnit. Версия 24.04
authors: alkoleft
tags: [releases, yaxunit]
---

[Release 24.04](https://github.com/bia-technologies/yaxunit/releases/tag/24.04)

## Новое в версии

### Тестовые данные

* [NEW] Метод `УстановитьСсылкуНового` в конструкторе объектов [#310](https://github.com/bia-technologies/yaxunit/issues/310), спасибо [@alexandr-yang](https://github.com/alexandr-yang)
* Удаление тестовых данных без учета прав [#309](https://github.com/bia-technologies/yaxunit/issues/309), спасибо [@goodwinvu](https://github.com/goodwinvu)

### Зависимости

* [NEW] Зависимости тестов [#314](https://github.com/bia-technologies/yaxunit/issues/314)
* [NEW] Добавить возможность указывать рабочий каталог в параметрах запуска [#313](https://github.com/bia-technologies/yaxunit/issues/313)
* [NEW] Зависимости тестов. Фабрика XDTO [#322](https://github.com/bia-technologies/yaxunit/issues/322)

Подробнее о зависимостях вы можете узнать из [документации](/docs/features/dependencies)

### Прочее

* Рефакторинг механизма событий [#315](https://github.com/bia-technologies/yaxunit/issues/315)
Добавлена возможность создавать обработчики событий за пределами расширения движка, подробнее в [документации](docs/features/events)
* Добавлен шаблон PR

## Исправленные ошибки

* [Bug]: Не работает формат выбода ошибки HTML на Mac [#319](https://github.com/bia-technologies/yaxunit/issues/319), спасибо [@alexandr-yang](https://github.com/alexandr-yang)
* Мелкие исправления в документации [#320](https://github.com/bia-technologies/yaxunit/issues/320), спасибо [@alexandr-yang](https://github.com/alexandr-yang)
* [Bug]: Некорректное время результатов тестов в отчете формата allure, спасибо [@AlexPCRus](https://github.com/AlexPCRus)
128 changes: 128 additions & 0 deletions documentation/docs/features/dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# Зависимости

Предположим у вас есть набор серверных тестов, которые требуют наличия файлов хранящихся в репозитории на клиенте.
Для выполнения этих тестов вам необходимо передать файлы на сервер перед выполнением. В дополнение, передачу необходимо выполнить только один раз и только если выполняются тесты, для которых файлы нужны.

В решении этой проблемы может помочь механизм зависимостей, который:

* Позволяет указывать зависимости тестов
* Для разрешения зависимостей используется код 1с, вызываемый с клиента
* Разрешение зависимостей выполняется единожды и результат может быть переиспользован в различных тестах
* Если по какой-то причине не удалось разрешить зависимость, то зависимые тесты не будут выполнятся.
* YAxUnit на данный момент реализует зависимость от файлов проекта, которая проверяет наличие нужных файлов и переносит их на сервер.

Например, вам необходимо проверить, что файл `.gitignore` содержит исключение для `ConfigDumpInfo.xml`.

```bsl
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("ПроверитьДанныеGitIgnore")
.ЗависитОт().ФайлыПроекта(".gitignore"); // Указываем зависимость
КонецПроцедуры
Процедура ПроверитьДанныеGitIgnore() Экспорт
ПолноеИмяФайла = ЮТест.Зависимость(ЮТЗависимости.ФайлыПроекта(".gitignore")).ПолноеИмя; // Получаем результат работы зависимости
ЮТест.ОжидаетЧто(ЮТФайлы.Существует(ПолноеИмяФайла), "Файл каталога проекта не существует")
.ЭтоИстина();
Данные = ЮТОбщий.ДанныеТекстовогоФайла(ПолноеИмяФайла);
ЮТест.ОжидаетЧто(Данные, "Содержимое файла")
.Содержит("ConfigDumpInfo.xml");
КонецПроцедуры
```

В примере движок проверит наличие файла `.gitignore` в каталоге проекта и перенесет его на сервер и сохранит в контексте путь к у файлу (причем, для сервера и клиент будут сохранены разные пути).

Другой пример, в своих тестах мы добавили зависимость для создания `ФабрикаXDTO` из файлов:

```bsl
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("ВыполнитьОбмен")
.ЗависитОт().ФабрикаСбора();
КонецПроцедуры
Процедура ВыполнитьОбмен() Экспорт
Фабрика = ЮТест.Зависимость(ЮТЗависимости.ФабрикаСбора()).Фабрика; // Получаем результат работы зависимости
...
КонецПроцедуры
```

Здесь для тестирования различных обменов мы создаем, на основании файлов хранящихся в репозитории, фабрику XDTO. При этом фабрика создается только один раз и доступна во всех серверных тестах.

## Зачем нужны зависимости

Основной целью создания зависимостей было предоставление единого механизма для работы с "тяжелыми" и часто используемыми зависимостями тестов. В большинстве случаев достаточно создать общий метод и вызывать его в тестах или событиях и таким образом готовить контекст теста. Но в некоторых случаях, таких как использование "клиентских" файлов в серверных тестах, этот вариант не подходит. Чтобы избежать костылей в подобных ситуациях и были добавлены зависимости.

## Принцип работы

1. В своих тестах вы указываете зависимости для тестов (наборов или модулей).
2. При запуске, YAxUnit анализирует какие тесты вы хотите запустить и собирает по ним реестр зависимостей.
3. Движок обрабатывает реестр зависимостей:
* вызывает методы реализующие зависимости
* сохраняет признак успешности обработки зависимости
* сохраняет данные, которые сформировала зависимость.
4. Тесты связанные с неразрешенными зависимостями переводятся в статус "Пропущен" и не вызываются при прогоне.
5. После этого происходит запуск тестов.
6. Любой тест может обратиться к результатам обработки зависимостей используя `ЮТест.Зависимость`

## Доступные виды зависимостей

### Зависимость `ФайлыПроекта`

Зависимость тестов от файлов проекта. Если в каталоге проекта нет этих файлов, то тест не будет выполнен.

:::tip
Каталог проекта задается в [параметрах запуска](../getting-started/run/configuration.md) - `projectPath`.
:::

Эта зависимость переносит файлы на сервер, чтобы они были доступны в серверных тестах и сохраняет в контексте путь к перенесенному файлу/каталогу (для клиентского теста будет хранится путь к файлам на клиенте).

```bsl
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("РаботаСФайлами")
.ЗависитОт().ФайлыПроекта("ОтносительныеПуть"); // Указываем зависимость
КонецПроцедуры
Процедура РаботаСФайлами() Экспорт
КаталогСФайлами = ЮТест.Зависимость(ЮТЗависимости.ФайлыПроекта("ОтносительныеПуть")).ПолноеИмя;
...
КонецПроцедуры
```

### Зависимость `ФабрикаXDTO`

Зависимость тестов от фабрики XDTO, созданной на основании файлов проекта.
Создает на сервере из файлов фабрику и сохраняет ее в контекст.

```bsl
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
..ДобавитьСерверныйТест("ФабрикаJUnit").ЗависитОт().ФабрикаXDTO("fixtures/junit")
КонецПроцедуры
Процедура ФабрикаJUnit() Экспорт
Фабрика = ЮТест.Зависимость(ЮТЗависимости.ФабрикаXDTO("fixtures/junit")).Фабрика;
ТестовыйНабор = ЮТест.Данные().КонструкторОбъектаXDTO("testsuite", "http://junit.org/schema", Фабрика)
.ФикцияНезаполненных()
.ДанныеОбъекта();
ЮТест.ОжидаетЧто(ТестовыйНабор)
.ИмеетТип(Тип("ОбъектXDTO"))
.Существует()
.ИмеетСвойство("properties")
.ИмеетСвойство("testcase")
.ИмеетСвойство("failures");
КонецПроцедуры
```
Loading

0 comments on commit e51c92b

Please sign in to comment.