Merge branch 'release/23.04'
12
.bsl-language-server.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"$schema": "https://1c-syntax.github.io/bsl-language-server/configuration/schema.json",
|
||||
"diagnostics": {
|
||||
"computeTrigger": "onSave",
|
||||
"ordinaryAppSupport": true,
|
||||
"parameters": {
|
||||
"LineLength": {
|
||||
"maxLineLength": 150
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
40
.github/workflows/deploy-documentation.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
name: Deploy to GitHub Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
# Review gh actions docs if you want to further define triggers, paths, etc
|
||||
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Deploy to GitHub Pages
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
cache: yarn
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
- name: Build website
|
||||
run: yarn build
|
||||
|
||||
# Popular action to deploy to GitHub Pages:
|
||||
# Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Build output to publish to the `gh-pages` branch:
|
||||
publish_dir: ./build
|
||||
# The following lines assign commit authorship to the official
|
||||
# GH-Actions bot for deploys to `gh-pages` branch:
|
||||
# https://github.com/actions/checkout/issues/13#issuecomment-724415212
|
||||
# The GH actions bot is used by default if you didn't specify the two fields.
|
||||
# You can swap them out with your own user credentials.
|
||||
user_name: github-actions[bot]
|
||||
user_email: 41898282+github-actions[bot]@users.noreply.github.com
|
59
.github/workflows/sq.yml
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
name: sq-analyze
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
SonarScanner:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.event.repository.full_name
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ github.event.workflow_run.head_repository.full_name }}
|
||||
ref: ${{ github.event.workflow_run.head_branch }}
|
||||
fetch-depth: 0
|
||||
- name: Configure env vars for SonarCloud scan
|
||||
env:
|
||||
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
||||
run: |
|
||||
echo "::set-env name=PATH::/opt/sonar-scanner/bin:$PATH"
|
||||
|
||||
- name: Compute branch name
|
||||
env:
|
||||
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
||||
uses: nixel2007/branch-name@v3
|
||||
|
||||
- name: Extract version
|
||||
if: github.event_name == 'push'
|
||||
shell: bash
|
||||
run: echo "##[set-output name=version;]` cat ./exts/yaxunit/src/Configuration/Configuration.mdo | grep -oP '(?<=<version>)[\d.]+'`"
|
||||
id: extract_version
|
||||
|
||||
- name: Setup sonarqube
|
||||
uses: warchant/setup-sonar-scanner@v3
|
||||
|
||||
# Анализ проекта в SonarQube (ветка)
|
||||
- name: Анализ в SonarQube (branch)
|
||||
if: github.event_name == 'push'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: sonar-scanner
|
||||
-Dsonar.host.url=https://sonar.openbsl.ru
|
||||
-Dsonar.branch.name=${{ env.BRANCH_NAME }}
|
||||
-Dsonar.projectVersion=${{ steps.extract_version.outputs.version }}
|
||||
|
||||
# Анализ проекта в SonarQube (PR)
|
||||
# https://docs.sonarqube.org/latest/analysis/pull-request/
|
||||
- name: Анализ в SonarQube (pull-request)
|
||||
if: github.event_name == 'pull_request'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: sonar-scanner
|
||||
-Dsonar.host.url=https://sonar.openbsl.ru
|
||||
-Dsonar.pullrequest.key=${{ github.event.pull_request.number }}
|
||||
-Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }}
|
||||
-Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }}
|
||||
-Dsonar.scm.revision=${{ github.event.pull_request.head.sha }}
|
169
README.md
@ -1,167 +1,20 @@
|
||||
# YAXUnit. Расширение для запуска тестов
|
||||
# ![Logo](documentation/static/img/logo.png) YAXUnit. Расширение для запуска тестов
|
||||
|
||||
- [Назначение](#назначение)
|
||||
- [Возможности](#возможности)
|
||||
- [Пример тестового модуля](#пример-тестового-модуля)
|
||||
- [Запуск](#запуск)
|
||||
- [Запуск из EDT](#запуск-из-edt)
|
||||
- [Запуск вне EDT](#запуск-вне-edt)
|
||||
- [Благодарности](#благодарности)
|
||||
- [Лицензия](#лицензия)
|
||||
----
|
||||
|
||||
[![Actions Status](https://github.com/bia-technologies/yaxunit/actions/workflows/sq.yml/badge.svg)](https://github.com/bia-technologies/yaxunit/actions)
|
||||
[![Download](https://img.shields.io/github/release/bia-technologies/yaxunit.svg?label=download&style=flat)](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
[![GitHub Releases](https://img.shields.io/github/downloads/bia-technologies/yaxunit/latest/total?style=flat-square)](https://github.com/bia-technologies/yaxunit/releases)
|
||||
[![Quality Gate](https://sonar.openbsl.ru/api/project_badges/measure?project=yaxunit&metric=alert_status)](https://sonar.openbsl.ru/dashboard?id=yaxunit)
|
||||
[![Maintainability](https://sonar.openbsl.ru/api/project_badges/measure?project=yaxunit&metric=sqale_rating)](https://sonar.openbsl.ru/dashboard?id=yaxunit)
|
||||
|
||||
Обсудить в [телеграмм чате](https://t.me/BIAOpenTools/12)
|
||||
|
||||
## Назначение
|
||||
----
|
||||
|
||||
Самостоятельное расширение для написания и выполнения модульного тестирования.
|
||||
## Документация
|
||||
|
||||
### Возможности
|
||||
|
||||
- YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов
|
||||
- Разрабатывалось с оглядкой на JUnit5, пожалуй, лучший фреймворк тестирования
|
||||
- Предоставляет движок выполнения тестов
|
||||
- Предоставляет утверждения для проверки ожидаемых результатов
|
||||
- Тесты могут быть организованы в наборы и выполняться в разных контекстах
|
||||
- Позволяет быстрее и проще не только писать, но и читать тесты
|
||||
- Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json.
|
||||
- Большая часть пользовательского API реализована как [текучие выражения](https://ru.wikipedia.org/wiki/Fluent_interface)
|
||||
- Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями
|
||||
- Реализован [плагин для EDT](https://github.com/bia-technologies/edt-test-runner), который упрощает процесс запуска тестов
|
||||
|
||||
Подробнее ознакомиться с функциональностью вы можете изучив [документацию](docs/api-topic.md).
|
||||
|
||||
А для того, что бы начать писать тесты необходимо [установить расширение](docs/install.md) в свою IDE (конфигуратор или EDT).
|
||||
|
||||
## Пример тестового модуля
|
||||
|
||||
Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - `ИсполняемыеСценарии` и реализовать тесты.
|
||||
|
||||
Пример модуля тестов:
|
||||
|
||||
```bsl
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
// Регистрация тестов
|
||||
ЮТТесты // Регистрация тестов выполняет через модуль регистратор
|
||||
.ДобавитьТестовыйНабор("Математические методы") // Набор - объединение тестов
|
||||
.ДобавитьТест("Сложение") // Обязательно при регистрации указываем имя экспортного метода
|
||||
.ДобавитьТест("Вычитание", "Вычитание") // Также можно указать представление теста
|
||||
.ДобавитьТест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля
|
||||
.ДобавитьКлиентскийТест("УмножениеНаКлиенте") // Есть отдельный метод для регистрации клиентских тестов
|
||||
.ДобавитьСерверныйТест("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов
|
||||
.ДобавитьТестовыйНабор("Строковые методы")
|
||||
.ДобавитьТест("СтрНайти")
|
||||
.ДобавитьТест("СтрРазделить");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура Сложение() Экспорт
|
||||
|
||||
// Реализация теста на сложение
|
||||
ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
|
||||
.ИмеетТип("Число") // Проверим тип
|
||||
.Заполнено() // Заполненность проверяемого значения
|
||||
.Больше(0) // Сравним с нулем
|
||||
.Равно(5); // Проверим ожидаемый результат
|
||||
|
||||
ЮТест.ОжидаетЧто(-8 + 8, "-8 + 8") // Проверим второй вариант
|
||||
.Равно(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Вычитание() Экспорт
|
||||
|
||||
// Реализация теста на вычитание
|
||||
ЮТест.ОжидаетЧто(2 - 3, "2 - 3").ИмеетТип("Число").Заполнено().Меньше(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область События
|
||||
|
||||
// Также в тесте можно обрабатывать события выполнения
|
||||
// Например можно реализовать подготовку и удаление тестовых данных
|
||||
// Зачистку временных файлов, настройку системы
|
||||
|
||||
Процедура ПередВсемиТестами() Экспорт
|
||||
// Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||||
Сообщить("Запуск тестирования");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестовымНабором() Экспорт
|
||||
|
||||
// Выполняется перед каждым тестовым набором для каждого контекста выполнения
|
||||
Контекст = ЮТест.КонтекстТестовогоНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании
|
||||
// Контекст живет в рамках контекста выполнения,
|
||||
// таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами
|
||||
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередКаждымТестом() Экспорт
|
||||
|
||||
// Выполняется перед каждым тестом
|
||||
Контекст = ЮТест.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании
|
||||
// Контекст создает перед тестом и уничтожается после его выполнения
|
||||
// В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить
|
||||
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеКаждогоТеста() Экспорт
|
||||
|
||||
// Выполняется после каждого теста
|
||||
Контекст = ЮТест.КонтекстТеста();
|
||||
Сообщить("Время выполнения теста: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТестовогоНабора() Экспорт
|
||||
|
||||
// Выполняется после каждого тестового набора для каждого контекста выполнения
|
||||
// Применяется для очистки данных и т.д.
|
||||
Контекст = ЮТест.КонтекстТестовогоНабора();
|
||||
Сообщить("Время выполнения набора: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
|
||||
// Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||||
// В этом событии все контексты уже уничтожены
|
||||
Сообщить("Тестирование завершено");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
```
|
||||
|
||||
После запуска тестов модуля в EDT (используя [плагин](https://github.com/bia-technologies/edt-test-runner)) получаем такой отчет:
|
||||
|
||||
![Отчет](docs/images/report.PNG)
|
||||
|
||||
## Запуск
|
||||
|
||||
### Запуск из EDT
|
||||
|
||||
При разработке в EDT процесс запуска тестов можно упростить, установив [плагин](https://github.com/bia-technologies/edt-test-runner)
|
||||
и настроив конфигурацию запуска, как указано в описании плагина.
|
||||
|
||||
### Запуск вне EDT
|
||||
|
||||
Для запуска тестов без использования EDT необходимо:
|
||||
|
||||
1. Сформировать файл конфигурации запуска [вручную](docs/run.md), либо воспользоваться [формой настройки](docs/yaxunit-ui.md)
|
||||
2. [Запустить 1С:Предприятие](docs/run.md) с параметром `RunUnitTests=ПутьКФайлуКонфигурации.json`.
|
||||
[https://bia-technologies.github.io/yaxunit/](https://bia-technologies.github.io/yaxunit/)
|
||||
|
||||
## Благодарности
|
||||
|
||||
|
Before Width: | Height: | Size: 78 KiB |
85
docs/run.md
@ -1,85 +0,0 @@
|
||||
# Запуск
|
||||
|
||||
Для запуска тестов необходимо запустить 1С:Предприятие с параметром `RunUnitTests`, при необходимости можно указать путь к файлу конфигурации запуска.
|
||||
|
||||
## Конфигурация запуска
|
||||
|
||||
Конфигурация настраивается в файле json и может иметь следующие параметры:
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|-------------------|-----------|-----------------------|--------------------------------------------------------------------------------------------------------------|
|
||||
| `filter` | `Object` | Object, смотрите ниже | Параметры фильтрации, поиска тестов |
|
||||
| `reportFormat` | `String` | `"jUnit"` | Формат отчета о тестировании, возможные значения: `"jUnit"`, `"JSON"` |
|
||||
| `reportPath` | `String` | `""` | Путь к формируемому отчету, можно указать или каталог (в которому будет создан файл отчета) или путь к файлу |
|
||||
| `closeAfterTests` | `Boolean` | `True` | Признак закрытия 1С:Предприятие по завершению тестирования |
|
||||
| `showReport` | `Boolean` | `True` | Открыть форму отчета завершению тестирования |
|
||||
| `logging` | `Object` | Смотрите ниже | Параметры логирования, подробнее ниже |
|
||||
|
||||
Параметры фильтрации:
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|---------------|---------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| `extensions` | `Array` | `["tests"]` | Список имен расширений, из которых грузятся тесты |
|
||||
| `modules` | `Array` | `Null` | Список имен модулей, из которых грузятся тесты |
|
||||
| `tests` | `Array` | `Null` | Список полных путей к исполняемым тестам (`[имя модуля.имя теста]`) |
|
||||
| `suites` | `Array` | `Null` | **Не реализованно.** Список имен тестовых наборов, которые будут запускаться |
|
||||
| `tags` | `Array` | `Null` | **Не реализованно.** Список тегов, которые будут запускаться |
|
||||
| `contexts` | `Array` | `Null` | Список имен контекстов исполнения, в которых будут запускаться тесты |
|
||||
| `paths` | `Array` | `Null` | **Не реализованно.** Список полных путей к исполняемым тестам (`[имя модуля.имя теста|имя модуля.имя теста.имя контекста]`) |
|
||||
|
||||
Параметры логирования:
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|---------------|-----------|-----------------------|---------------------------------------------------------------------|
|
||||
| `file` | `String` | `""` | Путь к файлу лога |
|
||||
| `enable` | `Boolean` | `Null` | Признак использования логирования. Если не указан, зависит от файла, если он указан - вкл, если не указан - выкл |
|
||||
| `level` | `String` | `"debug"` | Уровень детализации лога. Возможные значения: `"debug"`, `"info"`, `"error"` |
|
||||
|
||||
Примеры:
|
||||
|
||||
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"
|
||||
}
|
||||
```
|
||||
|
||||
3. Запустить все тесты с выводом подробного лога в файл, сохранить отчет файл `C:\temp\jUnit\report.xml`
|
||||
|
||||
```JSON
|
||||
{
|
||||
"reportPath": "C:\\temp\\jUnit\\report.xml",
|
||||
"logging": {
|
||||
"file": "C:\\temp\\jUnit\\tests.log",
|
||||
"level": "debug"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Строка запуска предприятия
|
||||
|
||||
`[путь к клиенту 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`
|
20
documentation/.gitignore
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
# Dependencies
|
||||
/node_modules
|
||||
|
||||
# Production
|
||||
/build
|
||||
|
||||
# Generated files
|
||||
.docusaurus
|
||||
.cache-loader
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
41
documentation/README.md
Normal file
@ -0,0 +1,41 @@
|
||||
# Website
|
||||
|
||||
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
|
||||
|
||||
### Installation
|
||||
|
||||
```
|
||||
$ yarn
|
||||
```
|
||||
|
||||
### Local Development
|
||||
|
||||
```
|
||||
$ yarn start
|
||||
```
|
||||
|
||||
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||
|
||||
### Build
|
||||
|
||||
```
|
||||
$ yarn build
|
||||
```
|
||||
|
||||
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||
|
||||
### Deployment
|
||||
|
||||
Using SSH:
|
||||
|
||||
```
|
||||
$ USE_SSH=true yarn deploy
|
||||
```
|
||||
|
||||
Not using SSH:
|
||||
|
||||
```
|
||||
$ GIT_USER=<Your GitHub username> yarn deploy
|
||||
```
|
||||
|
||||
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
7
documentation/api/index.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Программный интерфейс
|
||||
|
||||
Здесь будет расположена информация о программном интерфейсе YAxUnit
|
3
documentation/babel.config.js
Normal file
@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
||||
};
|
7
documentation/contributing/index.md
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Руководство разработчика
|
||||
|
||||
Здесь будут собраны материалы по доработке тестового движка.
|
32
documentation/docs/first-test.md
Normal file
@ -0,0 +1,32 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
tags: [Getting started]
|
||||
---
|
||||
|
||||
# Пишем первый тест
|
||||
|
||||
Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - ИсполняемыеСценарии и реализовать тесты.
|
||||
|
||||
```bsl title="ОМ_ПервыйТест"
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("Сложение")
|
||||
.СПараметрами(2, 3, 5)
|
||||
.СПараметрами(2, -3, -1)
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Сложение(ПервыйОперанд, ВторойОперанд, Результат) Экспорт
|
||||
|
||||
ЮТест.ОжидаетЧто(ПервыйОперанд + ВторойОперанд)
|
||||
.ИмеетТип("Число")
|
||||
.Равно(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
```
|
BIN
documentation/docs/images/config-ui.png
Normal file
After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
BIN
documentation/docs/install/images/gh-release-content.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
documentation/docs/install/images/gh-release.png
Normal file
After Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
BIN
documentation/docs/install/images/plugin-install-from-rep.png
Normal file
After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
67
documentation/docs/install/install-plugin.md
Normal file
@ -0,0 +1,67 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
sidebar_label: Установка плагина EDT
|
||||
---
|
||||
# Установка плагина для работы с тестами в EDT
|
||||
|
||||
```mdx-code-block
|
||||
import Tabs from '@theme/Tabs';
|
||||
|
||||
import TabItem from '@theme/TabItem';
|
||||
```
|
||||
|
||||
Для того, что бы вам и нам было проще писать тесты мы разработали плагин для EDT.
|
||||
|
||||
С его помощью вы сможете:
|
||||
|
||||
* Запускать и отлаживать свои тесты;
|
||||
* Просматривать результаты выполнения.
|
||||
* И [что-то еще](https://github.com/bia-technologies/edt-test-runner/blob/develop/docs/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8.md)
|
||||
|
||||
Для установки плагина вам необходимо воспользоваться стандартным функционалом Eclipse (EDT) `Установить новое ПО...`.
|
||||
|
||||
* Открываем EDT.
|
||||
* Переходим к `Установить новое ПО` (в меню `Справка`);
|
||||
* Добавляем новый репозиторий;
|
||||
|
||||
```mdx-code-block
|
||||
<Tabs>
|
||||
<TabItem value="master" label="Основной репозиторий">
|
||||
```
|
||||
|
||||
```url
|
||||
https://bia-technologies.github.io/edt-test-runner/repository
|
||||
```
|
||||
|
||||
```mdx-code-block
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="develop" label="Develop">
|
||||
```
|
||||
|
||||
```url
|
||||
https://bia-technologies.github.io/edt-test-runner/dev/repository
|
||||
```
|
||||
|
||||
```mdx-code-block
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
```
|
||||
|
||||
![Установка плагина](images/plugin-install-from-rep.png)
|
||||
|
||||
:::tip совет
|
||||
|
||||
Для ускорения установки можно убрать галочку `Обращаться во время инсталляции ко всем сайтам ...`
|
||||
|
||||
:::
|
||||
|
||||
* Нажимаем далее;
|
||||
* Принимаем лицензию;
|
||||
* Соглашаемся с предупреждением безопасности;
|
||||
* И перезагружаем IDE.
|
||||
:::note примечание
|
||||
|
||||
EDT будет долго перезагружаться и это нормально.
|
||||
|
||||
:::
|
@ -1,29 +1,43 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
tags: [Getting started]
|
||||
---
|
||||
|
||||
# Установка
|
||||
|
||||
YAXUnit - это расширение для 1С:Предприятия, которое надо добавить к вашему проекту.
|
||||
|
||||
## Требования
|
||||
|
||||
* 1С:Предприятие версии 8.3.10 или старше
|
||||
|
||||
## Установка в EDT
|
||||
|
||||
### Первичная установка тестового движка в рабочее пространство (workspace)
|
||||
|
||||
1. Качаем архив [последнего релиза](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
2. Распаковываем содержимое в каталог с исходниками (не в воркспейс)
|
||||
3. Импортируем проект
|
||||
1. Скачаем архив [релиза](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
![Страница релиза](images/gh-release.png)
|
||||
|
||||
2. Копируем из архива расширение расположенное в каталоге `exts/yaxunit/` в свой каталог с исходниками (не в воркспейс)
|
||||
![Содержимое архива](images/gh-release-content.png)
|
||||
3. Импортируем проект расширения в воркспейс
|
||||
![Импорт проекта](images/project-import.png)
|
||||
4. Привязываем импортированный проект расширения к конфигурации
|
||||
|
||||
![Связь с базовым проектом](images/link-base-project.png)
|
||||
|
||||
5. Обновляем конфигурацию
|
||||
6. В конфигураторе снимаем с расширения **безопасный режим** и **защиту от опасных действий**
|
||||
7. Готово, можно приступить к написанию тестов.
|
||||
|
||||
:::tip совет
|
||||
Для удобства разработки тестов рекомендуется [установить плагин](install-plugin.md)
|
||||
:::
|
||||
|
||||
### Обновление тестового движка
|
||||
|
||||
1. Качаем архив [последнего релиза](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
1. Скачаем архив [релиза](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
2. Если вы дорабатывали движок, то скачиваем архив оригинальной установленной версии движка
|
||||
3. Разархивируем их во временный каталог
|
||||
4. Воспользуемся механизмом сравнения объединения EDT
|
||||
|
||||
![Сравнение объединение](images/compare.png)
|
||||
* Второй источник - каталог к новой версии тестового движка
|
||||
* Использование третьего источника нужно для трехстороннего сравнения и применяется при доработках движка.
|
||||
@ -32,7 +46,8 @@
|
||||
|
||||
## Установка в конфигуратор
|
||||
|
||||
1. Качаем расширение (cfe) из [последнего релиза](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
1. Скачаем расширение (cfe) [релиза](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
![Страница релиза](images/gh-release.png)
|
||||
2. Загружаем в конфигуратор
|
||||
3. Снимаем с расширения **безопасный режим** и **защиту от опасных действий**
|
||||
4. Готово
|
73
documentation/docs/run/configuration.md
Normal file
@ -0,0 +1,73 @@
|
||||
# Конфигурация запуска
|
||||
|
||||
Конфигурация настраивается в файле json и может иметь следующие параметры.
|
||||
|
||||
## Основные параметры
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|-------------------|-----------|-------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
|
||||
| `filter` | `Object` | [Object, смотрите ниже](#параметры-фильтрации) | Параметры фильтрации, поиска тестов |
|
||||
| `reportFormat` | `String` | `"jUnit"` | Формат отчета о тестировании, возможные значения: `"jUnit"`, `"JSON"` |
|
||||
| `reportPath` | `String` | `""` | Путь к формируемому отчету, можно указать или каталог (в которому будет создан файл отчета) или путь к файлу |
|
||||
| `closeAfterTests` | `Boolean` | `True` | Признак закрытия 1С:Предприятие по завершению тестирования |
|
||||
| `showReport` | `Boolean` | `True` | Открыть форму отчета завершению тестирования |
|
||||
| `logging` | `Object` | [Object, смотрите ниже](#параметры-логирования) | Параметры логирования, подробнее ниже |
|
||||
| `exitCode` | `String` | `""` | Путь к файлу, в который будет записан признак успешного выполнения (0 - успешно, 1 - есть ошибки) |
|
||||
|
||||
## Параметры фильтрации
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|---------------|---------|-----------------------|------------------------------------------------------------------------------|
|
||||
| `extensions` | `Array` | `["tests"]` | Список имен расширений, из которых грузятся тесты |
|
||||
| `modules` | `Array` | `Null` | Список имен модулей, из которых грузятся тесты |
|
||||
| `tests` | `Array` | `Null` | Список полных путей к исполняемым тестам (`[имя модуля.имя теста]`) |
|
||||
| `suites` | `Array` | `Null` | **Не реализованно.** Список имен тестовых наборов, которые будут запускаться |
|
||||
| `tags` | `Array` | `Null` | **Не реализованно.** Список тегов, которые будут запускаться |
|
||||
| `contexts` | `Array` | `Null` | Список имен контекстов исполнения, в которых будут запускаться тесты |
|
||||
| `paths` | `Array` | `Null` | **Не реализованно.** Список полных путей к исполняемым тестам |
|
||||
|
||||
## Параметры логирования
|
||||
|
||||
| Имя параметра | Тип | Значение по умолчанию | Описание |
|
||||
|---------------|-----------|-----------------------|-----------------------------------------------------------------------------------------------------------------------------|
|
||||
| `file` | `String` | `""` | Путь к файлу лога |
|
||||
| `enable` | `Boolean` | `Null` | Признак использования логирования. Если не указан, зависит от параметра `file`, если он указан - вкл, если не указан - выкл |
|
||||
| `level` | `String` | `"debug"` | Уровень детализации лога. Возможные значения: `"debug"`, `"info"`, `"error"` |
|
||||
|
||||
Примеры:
|
||||
|
||||
1. Запустить тесты расположенные в модулях `МодульТестов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"
|
||||
}
|
||||
```
|
||||
|
||||
3. Запустить все тесты с выводом подробного лога в файл, сохранить отчет файл `C:\temp\jUnit\report.xml`
|
||||
|
||||
```JSON
|
||||
{
|
||||
"reportPath": "C:\\temp\\jUnit\\report.xml",
|
||||
"logging": {
|
||||
"file": "C:\\temp\\jUnit\\tests.log",
|
||||
"level": "debug"
|
||||
}
|
||||
}
|
||||
```
|
BIN
documentation/docs/run/images/from-configurator.png
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
documentation/docs/run/images/from-edt.png
Normal file
After Width: | Height: | Size: 78 KiB |
30
documentation/docs/run/run.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Запуск
|
||||
|
||||
Для запуска тестов необходимо запустить 1С:Предприятие с параметром `RunUnitTests`, при необходимости можно указать путь к файлу [конфигурации запуска](configuration.md).
|
||||
|
||||
:::caution Важно
|
||||
*После загрузки расширения в информационную базу необходимо отключить у него `безопасный режим` и `защиту от опасных действий`*
|
||||
:::
|
||||
|
||||
## Запуск из EDT
|
||||
|
||||
Для запуска тестов из EDT необходимо установить [плагин](../install/install-plugin.md), либо вручную создать файл [конфигурации запуска](configuration.md) и указать его в параметрах запуска.
|
||||
|
||||
![EDT](images/from-edt.png)
|
||||
|
||||
## Запуск из конфигуратора
|
||||
|
||||
Для запуска тестов из конфигуратора вы можете
|
||||
|
||||
* Вручную создать файл [конфигурации запуска](configuration.md) и указать его в параметрах запуска
|
||||
![Конфигуратор](images/from-configurator.png)
|
||||
* Воспользоваться [интерфейсом настройки](../yaxunit-ui.md#интерфейс-настройки-конфигурации)
|
||||
|
||||
## Строка запуска предприятия
|
||||
|
||||
`[путь к клиенту 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`
|
@ -1,3 +1,7 @@
|
||||
---
|
||||
tags: [Getting started, Asserts]
|
||||
---
|
||||
|
||||
# Утверждения
|
||||
|
||||
Каждый тестовый сценарий должен проверить результат работы тестируемого метода, будь то функция или процедура.
|
@ -1,3 +1,7 @@
|
||||
---
|
||||
tags: [Getting started]
|
||||
---
|
||||
|
||||
# Контекст
|
||||
|
||||
Одним из важнейших блоков работы тестового движка является механизм контекстов.
|
@ -1,3 +1,8 @@
|
||||
---
|
||||
description: Create a doc page with rich content.
|
||||
tags: [Getting started]
|
||||
---
|
||||
|
||||
# Пользовательский API
|
||||
|
||||
Для разработчиков тестов расширение предоставляет API для:
|
@ -1,3 +1,6 @@
|
||||
---
|
||||
tags: [Getting started, Mock]
|
||||
---
|
||||
# Мокито
|
||||
|
||||
Мокито - модуль созданный по образу популярного java-фреймворка для тестирования [Mockito](https://site.mockito.org/). Расширяет возможности тестирования, позволяет легко менять логику работы системы подменяя результаты работы методов, отключая какие-либо алгоритмы и проверки.
|
||||
@ -28,9 +31,15 @@
|
||||
|
||||
Работа с Мокито делится на 3 стадии:
|
||||
|
||||
1. Обучение - настраиваем поведение методов системы
|
||||
2. Прогон - выполнение теста целевого метода
|
||||
3. Проверка - анализ вызовов
|
||||
```mermaid
|
||||
flowchart LR
|
||||
training(Обучение) --> run(Прогон, запуск тестового метода)
|
||||
run --> check(Проверка)
|
||||
```
|
||||
|
||||
* [Обучение](#обучение) - настраиваем поведение методов системы
|
||||
* [Прогон](#прогон) - выполнение теста целевого метода
|
||||
* [Проверка](#проверка) - анализ вызовов
|
||||
|
||||
## Использование
|
||||
|
||||
@ -44,7 +53,7 @@
|
||||
* использовать явный вызов метода с параметрами на стадии обучения, например `Мокито.Обучение(Справочники.ИсточникиДанных).Когда(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник)).Вернуть(Результат)`
|
||||
* использовать явный вызов метода с параметрами на стадии проверки, например `Мокито.Проверить(Справочники.ИсточникиДанных).КоличествоВызовов(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник)).Больше(1)`
|
||||
|
||||
Примеры добавления методов в расширение:
|
||||
Примеры добавления методов в расширение.
|
||||
|
||||
#### Метод общего модуля
|
||||
|
||||
@ -178,7 +187,7 @@
|
||||
1. `Мокито.Обучение(РаботаСHTTP).Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Мокито.ТипизированныйПараметр(ТипИсточникДанных), Мокито.ЧисловойПараметр())).Вернуть(3)`
|
||||
2. `Мокито.Обучение(РаботаСHTTP).Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Мокито.ТипизированныйПараметр(ТипИсточникДанных), Мокито.ЧисловойПараметр()).Вернуть(3)`
|
||||
|
||||
## Прогон
|
||||
### Прогон
|
||||
|
||||
После обучения, настройки реакций на вызовы методов, можно запускать тест нужного метода. Для перехода к этому режиму работы Мокито используется метод `Прогон`.
|
||||
|
||||
@ -198,7 +207,7 @@
|
||||
Результат = РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2); // Результат будет равен 2
|
||||
```
|
||||
|
||||
## Проверка
|
||||
### Проверка
|
||||
|
||||
После прогона теста можно проверить какие методы, с какими параметрами вызывались. Для этих целей необходимо воспользоваться методом `Проверить`
|
||||
|
@ -1,3 +1,6 @@
|
||||
---
|
||||
tags: [Getting started, Test data]
|
||||
---
|
||||
# Тестовые данные
|
||||
|
||||
Почти в каждом тесте разработчику необходимы данные, которые он будет использовать при тестировании: элементы справочников, документы, остатки и тд.
|
@ -1,3 +1,6 @@
|
||||
---
|
||||
tags: [Getting started]
|
||||
---
|
||||
# Регистрация тестовых методов (ЮТТесты)
|
||||
|
||||
Кроме того, чтобы написать тестовые сценарии, разработчик должен зарегистрировать их в движке.
|
@ -2,7 +2,7 @@
|
||||
|
||||
## Интерфейс отчета
|
||||
|
||||
Для просмотра результатов тестирования в режиме 1С:Предприятие, вам необходимо в параметрах запуска указать [настройку](../README.md#конфигурация-запуска) `showReport`
|
||||
Для просмотра результатов тестирования в режиме 1С:Предприятие, вам необходимо в параметрах запуска указать [настройку](run) `showReport`
|
||||
Например, создав файла настроек
|
||||
|
||||
```json
|
178
documentation/docusaurus.config.js
Normal file
@ -0,0 +1,178 @@
|
||||
// @ts-check
|
||||
// Note: type annotations allow type checking and IDEs autocompletion
|
||||
|
||||
const lightCodeTheme = require('prism-react-renderer/themes/github');
|
||||
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: 'YAx Unit',
|
||||
tagline: 'Модульные тесты для 1С - это не сложно',
|
||||
favicon: 'img/logo.png',
|
||||
|
||||
// Set the production url of your site here
|
||||
url: 'https://bia-technologies.github.io/',
|
||||
// Set the /<baseUrl>/ pathname under which your site is served
|
||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||
baseUrl: '/yaxunit',
|
||||
|
||||
// GitHub pages deployment config.
|
||||
// If you aren't using GitHub pages, you don't need these.
|
||||
organizationName: 'bia-technologies', // Usually your GitHub org/user name.
|
||||
projectName: 'yaxunit', // Usually your repo name.
|
||||
deploymentBranch: 'gh-pages',
|
||||
|
||||
onBrokenLinks: 'throw',
|
||||
onBrokenMarkdownLinks: 'warn',
|
||||
|
||||
// Even if you don't use internalization, you can use this field to set useful
|
||||
// metadata like html lang. For example, if your site is Chinese, you may want
|
||||
// to replace "en" with "zh-Hans".
|
||||
i18n: {
|
||||
defaultLocale: 'en',
|
||||
locales: ['en'],
|
||||
},
|
||||
|
||||
presets: [
|
||||
[
|
||||
'classic',
|
||||
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||
({
|
||||
docs: {
|
||||
routeBasePath: 'docs',
|
||||
sidebarPath: require.resolve('./sidebars.js'),
|
||||
// Please change this to your repo.
|
||||
// Remove this to remove the "edit this page" links.
|
||||
editUrl:
|
||||
'https://github.com/bia-technologies/yaxunit/',
|
||||
},
|
||||
blog: false,
|
||||
theme: {
|
||||
customCss: require.resolve('./src/css/custom.css'),
|
||||
},
|
||||
}),
|
||||
]
|
||||
],
|
||||
plugins: [
|
||||
[
|
||||
'@docusaurus/plugin-content-docs',
|
||||
{
|
||||
id: 'api',
|
||||
path: 'api',
|
||||
routeBasePath: 'api',
|
||||
sidebarPath: require.resolve('./sidebarsAPI.js'),
|
||||
// ... other options
|
||||
},
|
||||
],
|
||||
[
|
||||
'@docusaurus/plugin-content-docs',
|
||||
{
|
||||
id: 'lessons',
|
||||
path: 'lessons',
|
||||
routeBasePath: 'lessons',
|
||||
sidebarPath: require.resolve('./sidebarsLessons.js'),
|
||||
// ... other options
|
||||
},
|
||||
],
|
||||
[
|
||||
'@docusaurus/plugin-content-docs',
|
||||
{
|
||||
id: 'contributing',
|
||||
path: 'contributing',
|
||||
routeBasePath: 'contributing',
|
||||
sidebarPath: require.resolve('./sidebarsContributing.js'),
|
||||
// ... other options
|
||||
},
|
||||
]
|
||||
],
|
||||
|
||||
themeConfig:
|
||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||
({
|
||||
// Replace with your project's social card
|
||||
navbar: {
|
||||
title: 'YAx Unit',
|
||||
logo: {
|
||||
alt: 'YaxUnit Logo',
|
||||
src: 'img/logo.png',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: 'doc',
|
||||
docId: 'user-api/index',
|
||||
position: 'left',
|
||||
label: 'Описание',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
docId: 'index',
|
||||
docsPluginId: 'lessons',
|
||||
position: 'left',
|
||||
label: 'Уроки',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
docId: 'index',
|
||||
docsPluginId: 'api',
|
||||
position: 'left',
|
||||
label: 'API',
|
||||
},
|
||||
{
|
||||
type: 'doc',
|
||||
docId: 'index',
|
||||
docsPluginId: 'contributing',
|
||||
position: 'left',
|
||||
label: 'Руководство разработчика',
|
||||
},
|
||||
{
|
||||
href: 'https://github.com/bia-technologies/yaxunit',
|
||||
label: 'bia-technologies/yaxunit',
|
||||
position: 'right',
|
||||
},
|
||||
],
|
||||
},
|
||||
footer: {
|
||||
style: 'dark',
|
||||
links: [
|
||||
{
|
||||
title: 'Docs',
|
||||
items: [
|
||||
{
|
||||
label: 'Tutorial',
|
||||
to: '/docs/user-api',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Community',
|
||||
items: [
|
||||
{
|
||||
label: 'Telegram',
|
||||
href: 'https://t.me/BIAOpenTools/12',
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'More',
|
||||
items: [
|
||||
{
|
||||
label: 'GitHub',
|
||||
href: 'https://github.com/bia-technologies/yaxunit',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} BIA Technologies, Inc. Built with Docusaurus.`,
|
||||
},
|
||||
prism: {
|
||||
theme: lightCodeTheme,
|
||||
darkTheme: darkCodeTheme,
|
||||
},
|
||||
}),
|
||||
markdown: {
|
||||
mermaid: true,
|
||||
},
|
||||
themes: ['@docusaurus/theme-mermaid'],
|
||||
};
|
||||
|
||||
module.exports = config;
|
3
documentation/lessons/index.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Уроки и примеры использования YAxUnit
|
||||
|
||||
Здесь будут собраны различные материалы для лучшего понимая принципов написания тестов в работы с YAxUnit
|
12966
documentation/package-lock.json
generated
Normal file
44
documentation/package.json
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "documentation",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
"start": "docusaurus start",
|
||||
"build": "docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"deploy": "docusaurus deploy",
|
||||
"clear": "docusaurus clear",
|
||||
"serve": "docusaurus serve",
|
||||
"write-translations": "docusaurus write-translations",
|
||||
"write-heading-ids": "docusaurus write-heading-ids"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "2.3.1",
|
||||
"@docusaurus/preset-classic": "2.3.1",
|
||||
"@docusaurus/theme-mermaid": "^2.3.1",
|
||||
"@mdx-js/react": "^1.6.22",
|
||||
"clsx": "^1.2.1",
|
||||
"prism-react-renderer": "^1.3.5",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "2.3.1"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.5%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.14"
|
||||
}
|
||||
}
|
33
documentation/sidebars.js
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Creating a sidebar enables you to:
|
||||
- create an ordered group of docs
|
||||
- render a sidebar for each doc of that group
|
||||
- provide next/previous navigation
|
||||
|
||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
||||
|
||||
Create as many sidebars as you want.
|
||||
*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||
tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
|
||||
|
||||
// But you can create a sidebar manually
|
||||
/*
|
||||
tutorialSidebar: [
|
||||
'intro',
|
||||
'hello',
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Tutorial',
|
||||
items: ['tutorial-basics/create-a-document'],
|
||||
},
|
||||
],
|
||||
*/
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
33
documentation/sidebarsAPI.js
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Creating a sidebar enables you to:
|
||||
- create an ordered group of docs
|
||||
- render a sidebar for each doc of that group
|
||||
- provide next/previous navigation
|
||||
|
||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
||||
|
||||
Create as many sidebars as you want.
|
||||
*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||
api: [{type: 'autogenerated', dirName: '.'}],
|
||||
|
||||
// But you can create a sidebar manually
|
||||
/*
|
||||
tutorialSidebar: [
|
||||
'intro',
|
||||
'hello',
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Tutorial',
|
||||
items: ['tutorial-basics/create-a-document'],
|
||||
},
|
||||
],
|
||||
*/
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
33
documentation/sidebarsContributing.js
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Creating a sidebar enables you to:
|
||||
- create an ordered group of docs
|
||||
- render a sidebar for each doc of that group
|
||||
- provide next/previous navigation
|
||||
|
||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
||||
|
||||
Create as many sidebars as you want.
|
||||
*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||
contributing: [{type: 'autogenerated', dirName: '.'}],
|
||||
|
||||
// But you can create a sidebar manually
|
||||
/*
|
||||
tutorialSidebar: [
|
||||
'intro',
|
||||
'hello',
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Tutorial',
|
||||
items: ['tutorial-basics/create-a-document'],
|
||||
},
|
||||
],
|
||||
*/
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
33
documentation/sidebarsLessons.js
Normal file
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Creating a sidebar enables you to:
|
||||
- create an ordered group of docs
|
||||
- render a sidebar for each doc of that group
|
||||
- provide next/previous navigation
|
||||
|
||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
||||
|
||||
Create as many sidebars as you want.
|
||||
*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||
lessons: [{type: 'autogenerated', dirName: '.'}],
|
||||
|
||||
// But you can create a sidebar manually
|
||||
/*
|
||||
tutorialSidebar: [
|
||||
'intro',
|
||||
'hello',
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Tutorial',
|
||||
items: ['tutorial-basics/create-a-document'],
|
||||
},
|
||||
],
|
||||
*/
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
30
documentation/src/css/custom.css
Normal file
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Any CSS included here will be global. The classic template
|
||||
* bundles Infima by default. Infima is a CSS framework designed to
|
||||
* work well for content-centric websites.
|
||||
*/
|
||||
|
||||
/* You can override the default Infima variables here. */
|
||||
:root {
|
||||
--ifm-color-primary: #2e8555;
|
||||
--ifm-color-primary-dark: #29784c;
|
||||
--ifm-color-primary-darker: #277148;
|
||||
--ifm-color-primary-darkest: #205d3b;
|
||||
--ifm-color-primary-light: #33925d;
|
||||
--ifm-color-primary-lighter: #359962;
|
||||
--ifm-color-primary-lightest: #3cad6e;
|
||||
--ifm-code-font-size: 95%;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
/* For readability concerns, you should choose a lighter palette in dark mode. */
|
||||
[data-theme='dark'] {
|
||||
--ifm-color-primary: #25c2a0;
|
||||
--ifm-color-primary-dark: #21af90;
|
||||
--ifm-color-primary-darker: #1fa588;
|
||||
--ifm-color-primary-darkest: #1a8870;
|
||||
--ifm-color-primary-light: #29d5b0;
|
||||
--ifm-color-primary-lighter: #32d8b4;
|
||||
--ifm-color-primary-lightest: #4fddbf;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||
}
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
197
documentation/src/pages/index.md
Normal file
@ -0,0 +1,197 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
slug: /
|
||||
---
|
||||
|
||||
# YAXUnit. Расширение для запуска тестов
|
||||
|
||||
----
|
||||
|
||||
[![Actions Status](https://github.com/bia-technologies/yaxunit/actions/workflows/sq.yml/badge.svg)](https://github.com/bia-technologies/yaxunit/actions)
|
||||
[![Download](https://img.shields.io/github/release/bia-technologies/yaxunit.svg?label=download&style=flat)](https://github.com/bia-technologies/yaxunit/releases/latest)
|
||||
[![GitHub Releases](https://img.shields.io/github/downloads/bia-technologies/yaxunit/latest/total?style=flat-square)](https://github.com/bia-technologies/yaxunit/releases)
|
||||
[![Quality Gate](https://sonar.openbsl.ru/api/project_badges/measure?project=yaxunit&metric=alert_status)](https://sonar.openbsl.ru/dashboard?id=yaxunit)
|
||||
[![Maintainability](https://sonar.openbsl.ru/api/project_badges/measure?project=yaxunit&metric=sqale_rating)](https://sonar.openbsl.ru/dashboard?id=yaxunit)
|
||||
|
||||
Обсудить в [телеграмм чате](https://t.me/BIAOpenTools/12)
|
||||
|
||||
----
|
||||
|
||||
- [Назначение](#назначение)
|
||||
- [Возможности](#возможности)
|
||||
- [Пример тестового модуля](#пример-тестового-модуля)
|
||||
- [Запуск](#запуск)
|
||||
- [Запуск из EDT](#запуск-из-edt)
|
||||
- [Запуск вне EDT](#запуск-вне-edt)
|
||||
- [Благодарности](#благодарности)
|
||||
- [Лицензия](#лицензия)
|
||||
|
||||
## Назначение
|
||||
|
||||
Самостоятельное расширение для написания и выполнения модульного тестирования.
|
||||
|
||||
### Возможности
|
||||
|
||||
- YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов
|
||||
- Разрабатывалось с оглядкой на JUnit5, пожалуй, лучший фреймворк тестирования
|
||||
- Предоставляет движок выполнения тестов
|
||||
- Предоставляет утверждения для проверки ожидаемых результатов
|
||||
- Тесты могут быть организованы в наборы и выполняться в разных контекстах
|
||||
- Позволяет быстрее и проще не только писать, но и читать тесты
|
||||
- Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json.
|
||||
- Большая часть пользовательского API реализована как [текучие выражения](https://ru.wikipedia.org/wiki/Fluent_interface)
|
||||
- Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями
|
||||
- Реализован [плагин для EDT](https://github.com/bia-technologies/edt-test-runner), который упрощает процесс запуска тестов
|
||||
|
||||
Подробнее ознакомиться с функциональностью вы можете изучив [документацию](/docs/user-api).
|
||||
|
||||
А для того, что бы начать писать тесты необходимо [установить расширение](/docs/install) в свою IDE (конфигуратор или EDT).
|
||||
|
||||
## Пример тестового модуля
|
||||
|
||||
Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - `ИсполняемыеСценарии` и реализовать тесты.
|
||||
|
||||
Пример модуля тестов:
|
||||
|
||||
```bsl
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
// Регистрация тестов
|
||||
ЮТТесты // Регистрация тестов выполняет через модуль регистратор
|
||||
.ДобавитьТестовыйНабор("Математические методы") // Набор - объединение тестов
|
||||
.ДобавитьТест("Сложение") // Обязательно при регистрации указываем имя экспортного метода
|
||||
.ДобавитьТест("Вычитание", "Вычитание") // Также можно указать представление теста
|
||||
.ДобавитьТест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля
|
||||
.ДобавитьКлиентскийТест("УмножениеНаКлиенте") // Есть отдельный метод для регистрации клиентских тестов
|
||||
.ДобавитьСерверныйТест("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов
|
||||
.ДобавитьТестовыйНабор("Строковые методы")
|
||||
.ДобавитьТест("СтрНайти")
|
||||
.ДобавитьТест("СтрРазделить");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура Сложение() Экспорт
|
||||
|
||||
// Реализация теста на сложение
|
||||
ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
|
||||
.ИмеетТип("Число") // Проверим тип
|
||||
.Заполнено() // Заполненность проверяемого значения
|
||||
.Больше(0) // Сравним с нулем
|
||||
.Равно(5); // Проверим ожидаемый результат
|
||||
|
||||
ЮТест.ОжидаетЧто(-8 + 8, "-8 + 8") // Проверим второй вариант
|
||||
.Равно(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Вычитание() Экспорт
|
||||
|
||||
// Реализация теста на вычитание
|
||||
ЮТест.ОжидаетЧто(2 - 3, "2 - 3").ИмеетТип("Число").Заполнено().Меньше(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область События
|
||||
|
||||
// Также в тесте можно обрабатывать события выполнения
|
||||
// Например можно реализовать подготовку и удаление тестовых данных
|
||||
// Зачистку временных файлов, настройку системы
|
||||
|
||||
Процедура ПередВсемиТестами() Экспорт
|
||||
// Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||||
Сообщить("Запуск тестирования");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередТестовымНабором() Экспорт
|
||||
|
||||
// Выполняется перед каждым тестовым набором для каждого контекста выполнения
|
||||
Контекст = ЮТест.КонтекстТестовогоНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании
|
||||
// Контекст живет в рамках контекста выполнения,
|
||||
// таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами
|
||||
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередКаждымТестом() Экспорт
|
||||
|
||||
// Выполняется перед каждым тестом
|
||||
Контекст = ЮТест.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании
|
||||
// Контекст создает перед тестом и уничтожается после его выполнения
|
||||
// В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить
|
||||
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеКаждогоТеста() Экспорт
|
||||
|
||||
// Выполняется после каждого теста
|
||||
Контекст = ЮТест.КонтекстТеста();
|
||||
Сообщить("Время выполнения теста: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеТестовогоНабора() Экспорт
|
||||
|
||||
// Выполняется после каждого тестового набора для каждого контекста выполнения
|
||||
// Применяется для очистки данных и т.д.
|
||||
Контекст = ЮТест.КонтекстТестовогоНабора();
|
||||
Сообщить("Время выполнения набора: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
|
||||
// Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
|
||||
// В этом событии все контексты уже уничтожены
|
||||
Сообщить("Тестирование завершено");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
```
|
||||
|
||||
После запуска тестов модуля в EDT (используя [плагин](https://github.com/bia-technologies/edt-test-runner)) получаем такой отчет:
|
||||
|
||||
![Отчет](images/report.png)
|
||||
|
||||
## Запуск
|
||||
|
||||
### Запуск из EDT
|
||||
|
||||
При разработке в EDT процесс запуска тестов можно упростить, установив [плагин](https://github.com/bia-technologies/edt-test-runner)
|
||||
и настроив конфигурацию запуска, как указано в описании плагина.
|
||||
|
||||
### Запуск вне EDT
|
||||
|
||||
Для запуска тестов без использования EDT необходимо:
|
||||
|
||||
1. Сформировать файл конфигурации запуска [вручную](/docs/run), либо воспользоваться [формой настройки](/docs/yaxunit-ui)
|
||||
2. [Запустить 1С:Предприятие](/docs/run) с параметром `RunUnitTests=ПутьКФайлуКонфигурации.json`.
|
||||
|
||||
## Благодарности
|
||||
|
||||
Приносим благодарность всему [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)
|
0
documentation/static/.nojekyll
Normal file
BIN
documentation/static/img/logo.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
@ -58,13 +58,20 @@
|
||||
КонецФункции
|
||||
|
||||
// Прогон
|
||||
// Переводит мокито в режим прогона тестов
|
||||
// Вызов этого метода обязателен перед выполнением тестового прогона метода
|
||||
Процедура Прогон() Экспорт
|
||||
// Переводит мокито в режим прогона тестов
|
||||
// Вызов этого метода обязателен перед выполнением тестового прогона метода
|
||||
//
|
||||
// Параметры:
|
||||
// СброситьСтатистику - Булево - Сбросить статистику прошлых прогонов
|
||||
Процедура Прогон(СброситьСтатистику = Истина) Экспорт
|
||||
|
||||
Режимы = МокитоСлужебный.РежимыРаботы();
|
||||
МокитоСлужебный.УстановитьРежим(Режимы.Тестирование);
|
||||
|
||||
Если СброситьСтатистику Тогда
|
||||
МокитоСлужебный.ОчиститьСтатистику();
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Проверить.
|
||||
@ -139,7 +146,7 @@
|
||||
// см. МокитоСлужебный.ОписаниеМаскиПараметра
|
||||
Функция ТипизированныйПараметр(Тип) Экспорт
|
||||
|
||||
МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 1);
|
||||
МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 10);
|
||||
МаскаПараметра.Вставить("Тип", Тип);
|
||||
|
||||
Возврат МаскаПараметра;
|
||||
|
@ -224,7 +224,7 @@
|
||||
|
||||
Иначе
|
||||
|
||||
Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 10));
|
||||
Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 100));
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
@ -46,24 +46,28 @@
|
||||
// ОбщийМодуль
|
||||
Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
|
||||
|
||||
Параметры = ПараметрыПроверки();
|
||||
|
||||
Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
|
||||
СтруктураВызоваМетода = ИмяМетода;
|
||||
Иначе
|
||||
СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова);
|
||||
КонецЕсли;
|
||||
|
||||
Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда
|
||||
ВызватьИсключение "Установлен другой проверяемый объект";
|
||||
КонецЕсли;
|
||||
|
||||
Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода;
|
||||
СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова);
|
||||
|
||||
Возврат МокитоПроверки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает информацию о вызовах метода.
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяМетода - Строка - Имя метода проверяемого объекта
|
||||
// - Произвольный - Вызов метода проверяемого объекта
|
||||
// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода
|
||||
// Возвращаемое значение:
|
||||
// Массив из см. МокитоСлужебный.СтруктураВызоваМетода - Вызовы метода
|
||||
Функция Вызовы(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
|
||||
|
||||
СпозиционироватьсяНаМетоде(ИмяМетода, ПараметрыВызова);
|
||||
|
||||
Возврат СтатистикаВызовов();
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Равно.
|
||||
// Проверяет подобранные вызовы. Их количество должно быть равно переданному значение, иначе вызывается исключение
|
||||
// Параметры:
|
||||
@ -269,4 +273,22 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура СпозиционироватьсяНаМетоде(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено)
|
||||
|
||||
Параметры = ПараметрыПроверки();
|
||||
|
||||
Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
|
||||
СтруктураВызоваМетода = ИмяМетода;
|
||||
Иначе
|
||||
СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова);
|
||||
КонецЕсли;
|
||||
|
||||
Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда
|
||||
ВызватьИсключение "Установлен другой проверяемый объект";
|
||||
КонецЕсли;
|
||||
|
||||
Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -35,6 +35,19 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Настройки.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Настройки:
|
||||
// * Метод - Строка
|
||||
// * Реакция - Строка
|
||||
// * Настройки - Строка
|
||||
// * Перехват - Строка
|
||||
// * Режим - Строка - см. РежимыРаботы
|
||||
// * Статистика - Структура - Статистика вызовов:
|
||||
// * Вызовы - Соответствие из Структура
|
||||
// * ПараметрыОбучения - Структура
|
||||
// * ПараметрыПроверки - Структура
|
||||
Функция Настройки() Экспорт
|
||||
|
||||
Настройки = ЮТКонтекст.ЗначениеКонтекста(КлючНастроек());
|
||||
@ -181,7 +194,7 @@
|
||||
|
||||
ИначеЕсли Условие.Режим = ТипыУсловий.Значение Тогда
|
||||
|
||||
Совпадает = Условие.Значение = Параметр;
|
||||
Совпадает = ЮТОбщий.ДанныеСовпадают(Условие.Значение, Параметр);
|
||||
|
||||
ИначеЕсли Условие.Режим = ТипыУсловий.Тип Тогда
|
||||
|
||||
@ -263,6 +276,8 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Статистика
|
||||
|
||||
Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт
|
||||
|
||||
Если ЭтоОбъект(Объект) Тогда
|
||||
@ -279,6 +294,15 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОчиститьСтатистику() Экспорт
|
||||
|
||||
Настройки = Настройки();
|
||||
Настройки.Статистика.Вызовы.Очистить();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт
|
||||
@ -383,19 +407,33 @@
|
||||
|
||||
Функция НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода)
|
||||
|
||||
Реакция = Неопределено;
|
||||
Приоритет = 0;
|
||||
ПараметрыВызова = СтруктураВызоваМетода.Параметры;
|
||||
|
||||
Для Каждого ВозможнаяРеакция Из ПараметрыПерехватаМетода.Реакции Цикл
|
||||
ПриоритетыРеакций = Новый Массив();
|
||||
ЛучшийПриоритет = 0;
|
||||
|
||||
Для Каждого Реакция Из ПараметрыПерехватаМетода.Реакции Цикл
|
||||
|
||||
ПриоритетВозможнойРеакции = ПроверитьРеакцию(ВозможнаяРеакция, ПараметрыВызова);
|
||||
ПриоритетРеакции = ПроверитьРеакцию(Реакция, ПараметрыВызова);
|
||||
ПриоритетыРеакций.Добавить(Новый Структура("Приоритет, Реакция", ПриоритетРеакции, Реакция));
|
||||
|
||||
Если ПриоритетВозможнойРеакции > Приоритет Тогда
|
||||
|
||||
Реакция = ВозможнаяРеакция;
|
||||
Приоритет = ПриоритетВозможнойРеакции;
|
||||
|
||||
Если ЛучшийПриоритет < ПриоритетРеакции Тогда
|
||||
ЛучшийПриоритет = ПриоритетРеакции;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Реакция = Неопределено;
|
||||
Для Каждого ПриоритетРеакции Из ПриоритетыРеакций Цикл
|
||||
|
||||
Если ПриоритетРеакции.Приоритет = ЛучшийПриоритет Тогда
|
||||
Реакция = ПриоритетРеакции.Реакция;
|
||||
Иначе
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если Реакция.Действие <> Неопределено И НЕ Реакция.Действие.Обработано Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
@ -20,51 +20,101 @@
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Если Клиент Тогда
|
||||
|
||||
// ВыполнитьМодульноеТестирование
|
||||
// Метод, по параметрам запуска, запускает выполнение всего процесса тестирования.
|
||||
//
|
||||
// Параметры:
|
||||
// Параметры - См. ЮТФабрика.ПараметрыЗапуска
|
||||
Процедура ВыполнитьМодульноеТестирование(Параметры = Неопределено) Экспорт
|
||||
Процедура ВыполнитьМодульноеТестирование() Экспорт
|
||||
|
||||
Если Параметры = Неопределено Тогда
|
||||
Параметры = ЮТПараметры.ПараметрыЗапуска(ПараметрЗапуска);
|
||||
ПараметрыИсполнения = ПараметрыИсполнения();
|
||||
ПараметрыИсполнения.АргументыЗапуска = ПараметрЗапуска;
|
||||
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьПараметры");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикАнализПараметровЗапуска");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьОтчет");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьКодВозврата");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗавершить");
|
||||
|
||||
ВызватьСледующийОбработчик(ПараметрыИсполнения);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВызватьОбработчик(Обработчик, Результат = Неопределено) Экспорт
|
||||
|
||||
Если Обработчик <> Неопределено Тогда
|
||||
ВыполнитьОбработкуОповещения(Обработчик, Результат);
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ Параметры.ВыполнятьМодульноеТестирование Тогда
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#Область ОбработчикиЦепочкиДействий
|
||||
|
||||
Процедура ОбработчикОшибки(ИнформацияОбОшибки, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт
|
||||
|
||||
// TODO Подумать надо ли и как реализовать нормально
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикЗагрузитьПараметры(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Обработчик = СледующийОбработчик(ДополнительныеПараметры);
|
||||
ЮТПараметрыЗапуска.ПараметрыЗапуска(ДополнительныеПараметры.АргументыЗапуска, Обработчик);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикАнализПараметровЗапуска(ПараметрыЗапуска, ДополнительныеПараметры) Экспорт
|
||||
|
||||
ДополнительныеПараметры.ПараметрыЗапуска = ПараметрыЗапуска;
|
||||
|
||||
Если НЕ ПараметрыЗапуска.ВыполнятьМодульноеТестирование Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикЗагрузитьТесты(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Параметры = ДополнительныеПараметры.ПараметрыЗапуска;
|
||||
|
||||
ЮТКонтекст.ИнициализироватьКонтекст();
|
||||
ЮТКонтекст.УстановитьГлобальныеНастройкиВыполнения(Параметры.settings);
|
||||
ЮТСобытия.Инициализация(Параметры);
|
||||
// Повторно сохраним для передачи на сервер
|
||||
ЮТКонтекст.УстановитьГлобальныеНастройкиВыполнения(ЮТКонтекст.ГлобальныеНастройкиВыполнения());
|
||||
ЮТКонтекст.УстановитьКонтекстИсполнения(ДанныеКонтекстаИсполнения());
|
||||
ЮТКонтекст.УстановитьКонтекстИсполнения(ЮТФабрика.НовыйКонтекстИсполнения());
|
||||
|
||||
ЮТСобытия.ПередЧтениеСценариев();
|
||||
ТестовыеМодули = ЮТЧитатель.ЗагрузитьТесты(Параметры);
|
||||
ЮТСобытия.ПослеЧтенияСценариев(ТестовыеМодули);
|
||||
|
||||
РезультатыТестирования = Новый Массив();
|
||||
|
||||
КоллекцияКатегорийНаборов = Новый Массив();
|
||||
|
||||
Для Каждого ТестовыйМодуль Из ТестовыеМодули Цикл
|
||||
|
||||
КатегорииНаборов = КатегорииНаборовТестовМодуля(ТестовыйМодуль);
|
||||
КоллекцияКатегорийНаборов.Добавить(КатегорииНаборов);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТСобытия.ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов);
|
||||
ДополнительныеПараметры.КоллекцияКатегорийНаборов = КоллекцияКатегорийНаборов;
|
||||
|
||||
ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикВыполнитьТестирование(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
РезультатыТестирования = Новый Массив();
|
||||
КоллекцияКатегорийНаборов = ДополнительныеПараметры.КоллекцияКатегорийНаборов;
|
||||
|
||||
Для Каждого КатегорииНаборов Из КоллекцияКатегорийНаборов Цикл
|
||||
|
||||
Результат = ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Клиентские, КатегорииНаборов.ТестовыйМодуль);
|
||||
Результат = ЮТИсполнительКлиентСервер.ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Клиентские, КатегорииНаборов.ТестовыйМодуль);
|
||||
ЮТОбщий.ДополнитьМассив(РезультатыТестирования, Результат);
|
||||
|
||||
Результат = ЮТИсполнительСервер.ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Серверные, КатегорииНаборов.ТестовыйМодуль);
|
||||
@ -76,129 +126,81 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТОтчет.СформироватьОтчет(РезультатыТестирования, Параметры);
|
||||
ДополнительныеПараметры.РезультатыТестирования = РезультатыТестирования;
|
||||
ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикСохранитьОтчет(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если ЗначениеЗаполнено(ДополнительныеПараметры.ПараметрыЗапуска.reportPath) Тогда
|
||||
Обработчик = СледующийОбработчик(ДополнительныеПараметры);
|
||||
ЮТОтчет.СформироватьОтчет(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска, Обработчик);
|
||||
Иначе
|
||||
ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикСохранитьКодВозврата(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
ЗаписатьКодВозврата(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска);
|
||||
ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикЗавершить(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Параметры = ДополнительныеПараметры.ПараметрыЗапуска;
|
||||
|
||||
Если Параметры.showReport Тогда
|
||||
ПоказатьОтчет(РезультатыТестирования, Параметры);
|
||||
ПоказатьОтчет(ДополнительныеПараметры.РезультатыТестирования, Параметры);
|
||||
ИначеЕсли Параметры.CloseAfterTests Тогда
|
||||
ПрекратитьРаботуСистемы(Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецЕсли
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Выполняет тесты группы наборов, соответствующих одному режиму выполнения (клиент/сервер)
|
||||
// Параметры:
|
||||
// Наборы - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов - Результат прогона наборов тестов с заполненной информацией о выполнении
|
||||
Функция ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль) Экспорт
|
||||
Процедура ВызватьСледующийОбработчик(ПараметрыИсполнения, Результат = Неопределено)
|
||||
|
||||
Если Наборы.Количество() = 0 Тогда
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПередВсемиТестамиМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки);
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из Наборы Цикл
|
||||
|
||||
Результат = ВыполнитьНаборТестов(Набор, ТестовыйМодуль);
|
||||
|
||||
Если Результат <> Неопределено Тогда
|
||||
Набор.Тесты = Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПослеВсехТестовМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки);
|
||||
КонецЕсли;
|
||||
|
||||
ТестовыйМодуль.Ошибки.Очистить(); // Эти ошибки используются как буфер и уже скопированы в наборы, но ломают последующие наборы
|
||||
|
||||
Возврат Наборы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ВыполнитьНаборТестов(Набор, ТестовыйМодуль)
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
|
||||
Набор.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
ЮТСобытия.ПередТестовымНабором(ТестовыйМодуль, Набор);
|
||||
|
||||
Если ЕстьОшибки(Набор) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Результаты = Новый Массив();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Тест;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
Тест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
|
||||
ЮТСобытия.ПередКаждымТестом(ТестовыйМодуль, Набор, Тест);
|
||||
ВыполнитьТестовыйМетод(Тест);
|
||||
ЮТСобытия.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест);
|
||||
|
||||
ОбработатьЗавершениеТеста(Тест);
|
||||
|
||||
Результаты.Добавить(Тест);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
ЮТСобытия.ПослеТестовогоНабора(ТестовыйМодуль, Набор);
|
||||
|
||||
Набор.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Набор.ДатаСтарта;
|
||||
|
||||
Возврат Результаты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОбработатьЗавершениеТеста(Тест)
|
||||
|
||||
Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта;
|
||||
Тест.Статус = ЮТРегистрацияОшибок.СтатусВыполненияТеста(Тест);
|
||||
Обработчик = СледующийОбработчик(ПараметрыИсполнения);
|
||||
ВыполнитьОбработкуОповещения(Обработчик, Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция СледующийОбработчик(ПараметрыИсполнения)
|
||||
|
||||
ПараметрыИсполнения.ИндексСледующегоОбработчика = ПараметрыИсполнения.ИндексСледующегоОбработчика + 1;
|
||||
Возврат ПараметрыИсполнения.Цепочка[ПараметрыИсполнения.ИндексСледующегоОбработчика];
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьОбработчикЦепочки(ПараметрыИсполнения, ИмяМетода)
|
||||
|
||||
Обработчик = Новый ОписаниеОповещения(ИмяМетода, ЭтотОбъект, ПараметрыИсполнения, "ОбработчикОшибки", ЭтотОбъект);
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Обработчик);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПараметрыИсполнения()
|
||||
|
||||
Параметры = Новый Структура();
|
||||
Параметры.Вставить("АргументыЗапуска");
|
||||
Параметры.Вставить("ПараметрыЗапуска");
|
||||
Параметры.Вставить("Цепочка", Новый Массив());
|
||||
Параметры.Вставить("ИндексСледующегоОбработчика", -1);
|
||||
Параметры.Вставить("КоллекцияКатегорийНаборов");
|
||||
Параметры.Вставить("РезультатыТестирования");
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КатегорииНаборовТестовМодуля(ТестовыйМодуль)
|
||||
|
||||
КатегорииНаборов = ОписаниеКатегорияНабораТестов(ТестовыйМодуль);
|
||||
КатегорииНаборов = ЮТФабрика.ОписаниеКатегорияНабораТестов(ТестовыйМодуль);
|
||||
|
||||
ИсполняемыеТестовыеНаборы = Новый Массив;
|
||||
|
||||
@ -288,79 +290,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЕстьОшибки(Объект)
|
||||
Возврат ЗначениеЗаполнено(Объект.Ошибки);
|
||||
КонецФункции
|
||||
|
||||
Процедура ВыполнитьТестовыйМетод(Тест)
|
||||
|
||||
Если ЕстьОшибки(Тест) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
Тест.Статус = СтатусыИсполненияТеста.Исполнение;
|
||||
|
||||
Ошибка = ЮТОбщий.ВыполнитьМетод(Тест.ПолноеИмяМетода, Тест.Параметры);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуВыполненияТеста(Тест, Ошибка);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СкопироватьОшибкиВ(Объекты, Ошибки)
|
||||
|
||||
Для Каждого Объект Из Объекты Цикл
|
||||
|
||||
ЮТОбщий.ДополнитьМассив(Объект.Ошибки, Ошибки);
|
||||
|
||||
Если Объект.Свойство("Статус") Тогда
|
||||
Объект.Статус = ЮТФабрика.СтатусыИсполненияТеста().Сломан;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Данные контекста исполнения.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные контекста исполнения:
|
||||
// * Уровень - Строка
|
||||
Функция ДанныеКонтекстаИсполнения()
|
||||
|
||||
Контекст = Новый Структура();
|
||||
Контекст.Вставить("Уровень", "");
|
||||
|
||||
Возврат Контекст;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Описание категория набора тестов.
|
||||
//
|
||||
// Параметры:
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание категория набора тестов:
|
||||
// * ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
// * Клиентские - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Серверные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Пропущенные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль)
|
||||
|
||||
КатегорииНаборов = Новый Структура();
|
||||
КатегорииНаборов.Вставить("ТестовыйМодуль", ТестовыйМодуль);
|
||||
КатегорииНаборов.Вставить("Клиентские", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Серверные", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Пропущенные", Новый Массив());
|
||||
|
||||
Возврат КатегорииНаборов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Если Клиент Тогда
|
||||
Процедура ПоказатьОтчет(РезультатыТестирования, Параметры)
|
||||
|
||||
Данные = Новый Структура("РезультатыТестирования, ПараметрыЗапуска", РезультатыТестирования, Параметры);
|
||||
@ -369,6 +298,50 @@
|
||||
ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.Основная", Новый Структура("АдресХранилища", АдресДанных));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Записать код возврата.
|
||||
//
|
||||
// Параметры:
|
||||
// РезультатыТестирования - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// Параметры - см. ЮТФабрика.ПараметрыЗапуска
|
||||
Процедура ЗаписатьКодВозврата(РезультатыТестирования, Параметры)
|
||||
|
||||
Успешно = Истина;
|
||||
|
||||
Если ПустаяСтрока(Параметры.exitCode) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из РезультатыТестирования Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(Набор.Ошибки) Тогда
|
||||
Успешно = Ложь;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(Тест.Ошибки) Тогда
|
||||
Успешно = Ложь;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если НЕ Успешно Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
#Если ВебКлиент Тогда
|
||||
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТИсполнительКлиент.ЗаписатьКодВозврата");
|
||||
#Иначе
|
||||
Запись = Новый ЗаписьТекста(Параметры.exitCode, КодировкаТекста.UTF8);
|
||||
Запись.ЗаписатьСтроку(?(Успешно, 0, 1));
|
||||
Запись.Закрыть();
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c9bf0e7a-6503-44eb-bef0-b37e1d3c6e22">
|
||||
<name>ЮТИсполнительКлиент</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Исполнитель клиент</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -0,0 +1,162 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Выполняет тесты группы наборов, соответствующих одному режиму выполнения (клиент/сервер)
|
||||
// Параметры:
|
||||
// Наборы - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов - Наборы тестов модуля
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов - Результат прогона наборов тестов с заполненной информацией о выполнении
|
||||
Функция ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль) Экспорт
|
||||
|
||||
Если Наборы.Количество() = 0 Тогда
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПередВсемиТестамиМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки);
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из Наборы Цикл
|
||||
|
||||
Результат = ВыполнитьНаборТестов(Набор, ТестовыйМодуль);
|
||||
|
||||
Если Результат <> Неопределено Тогда
|
||||
Набор.Тесты = Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПослеВсехТестовМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки);
|
||||
КонецЕсли;
|
||||
|
||||
ТестовыйМодуль.Ошибки.Очистить(); // Эти ошибки используются как буфер и уже скопированы в наборы, но ломают последующие наборы
|
||||
|
||||
Возврат Наборы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ВыполнитьНаборТестов(Набор, ТестовыйМодуль)
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
|
||||
Набор.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
ЮТСобытия.ПередТестовымНабором(ТестовыйМодуль, Набор);
|
||||
|
||||
Если ЕстьОшибки(Набор) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Результаты = Новый Массив();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Тест;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
Тест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
|
||||
ЮТСобытия.ПередКаждымТестом(ТестовыйМодуль, Набор, Тест);
|
||||
ВыполнитьТестовыйМетод(Тест);
|
||||
ЮТСобытия.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест);
|
||||
|
||||
ОбработатьЗавершениеТеста(Тест);
|
||||
|
||||
Результаты.Добавить(Тест);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
ЮТСобытия.ПослеТестовогоНабора(ТестовыйМодуль, Набор);
|
||||
|
||||
Набор.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Набор.ДатаСтарта;
|
||||
|
||||
Возврат Результаты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОбработатьЗавершениеТеста(Тест)
|
||||
|
||||
Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта;
|
||||
Тест.Статус = ЮТРегистрацияОшибок.СтатусВыполненияТеста(Тест);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЕстьОшибки(Объект)
|
||||
|
||||
Возврат ЗначениеЗаполнено(Объект.Ошибки);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ВыполнитьТестовыйМетод(Тест)
|
||||
|
||||
Если ЕстьОшибки(Тест) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
Тест.Статус = СтатусыИсполненияТеста.Исполнение;
|
||||
|
||||
Ошибка = ЮТОбщий.ВыполнитьМетод(Тест.ПолноеИмяМетода, Тест.Параметры);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуВыполненияТеста(Тест, Ошибка);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СкопироватьОшибкиВ(Объекты, Ошибки)
|
||||
|
||||
Для Каждого Объект Из Объекты Цикл
|
||||
|
||||
ЮТОбщий.ДополнитьМассив(Объект.Ошибки, Ошибки);
|
||||
|
||||
Если Объект.Свойство("Статус") Тогда
|
||||
Объект.Статус = ЮТФабрика.СтатусыИсполненияТеста().Сломан;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="24d9c1de-23c0-4d03-b2bf-9437c0985453">
|
||||
<name>ЮТИсполнитель</name>
|
||||
<name>ЮТИсполнительКлиентСервер</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Исполнитель</value>
|
@ -16,14 +16,6 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
@ -41,14 +33,8 @@
|
||||
// Массив - Результат прогона наборов тестов, структура набора см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ВыполнитьГруппуНаборовТестов(Знач Наборы, Знач ТестовыйМодуль) Экспорт
|
||||
|
||||
Возврат ЮТИсполнитель.ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль);
|
||||
Возврат ЮТИсполнительКлиентСервер.ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
#КонецОбласти
|
||||
|
@ -191,12 +191,13 @@
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Созданный объект или ссылка на него
|
||||
Функция Записать(ВернутьОбъект = Ложь) Экспорт
|
||||
Функция Записать(ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт
|
||||
|
||||
Контекст = Контекст();
|
||||
|
||||
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
|
||||
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
|
||||
ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка;
|
||||
|
||||
Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
|
||||
|
@ -52,7 +52,7 @@
|
||||
// Возвращает значение вложенного контекста, вложенного реквизита контекста
|
||||
// Параметры:
|
||||
// ИмяРеквизита - Строка - Имя реквизита/вложенного контекста
|
||||
//
|
||||
// ПолучитьССервера - Булево - Получить значение из серверного контекста
|
||||
// Возвращаемое значение:
|
||||
// Структура, Неопределено - Значение реквизита/вложенного контекста
|
||||
Функция ЗначениеКонтекста(ИмяРеквизита, ПолучитьССервера = Ложь) Экспорт
|
||||
@ -69,6 +69,7 @@
|
||||
Объект = Объект[Ключи[Инд]];
|
||||
КонецЦикла;
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЮТОбщий.ЗначениеСтруктуры(Объект, Ключи[Ключи.ВГраница()]);
|
||||
|
||||
КонецФункции
|
||||
@ -105,10 +106,11 @@
|
||||
// Данные живут в рамках одного теста, но доступны в обработчиках событий `ПередКаждымТестом` и `ПослеКаждогоТеста`
|
||||
// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста`
|
||||
// Возвращаемое значение:
|
||||
// Структура - Контекст теста
|
||||
// Неопределено - Если метод вызывается за рамками теста
|
||||
// - Структура - Контекст теста
|
||||
// - Неопределено - Если метод вызывается за рамками теста
|
||||
Функция КонтекстТеста() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаТеста());
|
||||
|
||||
КонецФункции
|
||||
@ -123,10 +125,11 @@
|
||||
// + `ПослеКаждогоТеста`
|
||||
// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеКаждогоТеста`
|
||||
// Возвращаемое значение:
|
||||
// Структура - Контекст набора тестов
|
||||
// Неопределено - Если метод вызывается за рамками тестового набора
|
||||
// - Структура - Контекст набора тестов
|
||||
// - Неопределено - Если метод вызывается за рамками тестового набора
|
||||
Функция КонтекстНабора() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаНабораТестов());
|
||||
|
||||
КонецФункции
|
||||
@ -137,10 +140,11 @@
|
||||
// Доступны в каждом тесте модуля и в обработчиках событий
|
||||
// Например, в контекст можно помещать создаваемые данные, что бы освободить/удалить их в обработчике `ПослеВсехТестов`
|
||||
// Возвращаемое значение:
|
||||
// Структура - Контекст тестового модуля
|
||||
// Неопределено - Если метод вызывается за рамками тестового модуля
|
||||
// - Структура - Контекст тестового модуля
|
||||
// - Неопределено - Если метод вызывается за рамками тестового модуля
|
||||
Функция КонтекстМодуля() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаМодуля());
|
||||
|
||||
КонецФункции
|
||||
@ -162,9 +166,10 @@
|
||||
// Возвращает служебный контекст, содержит дополнительные детали ошибки теста
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Неопределено, Структура - Контекст ошибки, см. ЮТРегистрацияОшибок.НовыйКонтекстОшибки
|
||||
// Неопределено, Структура - Контекст ошибки, см. ЮТФабрика.ОписаниеКонтекстаОшибки
|
||||
Функция КонтекстОшибки() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаОшибки());
|
||||
|
||||
КонецФункции
|
||||
@ -175,6 +180,7 @@
|
||||
// Неопределено, Структура - Контекст проверки
|
||||
Функция КонтекстПроверки() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаУтверждений());
|
||||
|
||||
КонецФункции
|
||||
@ -185,6 +191,7 @@
|
||||
// Неопределено, Структура - Контекст проверки
|
||||
Функция КонтекстЧитателя() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаЧитателя());
|
||||
|
||||
КонецФункции
|
||||
@ -192,9 +199,10 @@
|
||||
// КонтекстЧитателя
|
||||
// Возвращает служебный контекста, данные используемые исполнителем тестов
|
||||
// Возвращаемое значение:
|
||||
// см. ЮТИсполнитель.ДанныеКонтекстаИсполнения
|
||||
// см. ЮТФабрика.НовыйКонтекстИсполнения
|
||||
Функция КонтекстИсполнения() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаИсполнения());
|
||||
|
||||
КонецФункции
|
||||
|
@ -158,7 +158,7 @@
|
||||
|
||||
// Обработка события "ПослеФормированияИсполняемыхНаборовТестов"
|
||||
// Параметры:
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТИсполнитель.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТФабрика.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
Процедура ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов) Экспорт
|
||||
|
||||
Количество = 0;
|
||||
|
@ -0,0 +1,50 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ЗначениеНастройкиТеста(ИмяНастройки, ОписаниеТеста, ОписаниеТестовогоНабора, ЗначениеПоУмолчанию) Экспорт
|
||||
|
||||
Значение = ЗначениеПоУмолчанию;
|
||||
|
||||
Если ОписаниеТеста.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ОписаниеТеста.НастройкиВыполнения[ИмяНастройки];
|
||||
ИначеЕсли ОписаниеТестовогоНабора.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ОписаниеТестовогоНабора.НастройкиВыполнения[ИмяНастройки];
|
||||
Иначе
|
||||
|
||||
ГлобальныеНастройки = ЮТКонтекст.ГлобальныеНастройкиВыполнения();
|
||||
Если ГлобальныеНастройки.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ГлобальныеНастройки[ИмяНастройки];
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a3405948-b02e-4e4b-8195-dd51bf07a4c4">
|
||||
<name>ЮТНастройкиВыполнения</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Параметры</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -516,7 +516,6 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// КоллекцияВСоответствие
|
||||
// Возвращает соответствие элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции.
|
||||
//
|
||||
// Параметры:
|
||||
@ -525,7 +524,7 @@
|
||||
// ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции.
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из Произвольный - полученное соответствие.
|
||||
Функция КоллекцияВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт
|
||||
Функция ВСоответствие(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт
|
||||
|
||||
Результат = Новый Соответствие();
|
||||
|
||||
@ -541,6 +540,120 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает структуру элементов переданной коллекции, в качестве ключей выступают значения указанного поля элементов коллекции.
|
||||
//
|
||||
// Параметры:
|
||||
// Коллекция - Произвольный - значение, для которого определен итератор, и возможно обращение к полям элементов через квадратные скобки.
|
||||
// ИмяПоляКлюча - Строка - имя поля элемента коллекции, которое будет ключом соответствия.
|
||||
// ИмяПоляЗначения - Строка - если указан, значениями результата будут не элементы, а значения соответствующих полей элементов коллекции.
|
||||
// Возвращаемое значение:
|
||||
// Структура Из Произвольный - полученная структура.
|
||||
Функция ВСтруктуру(Коллекция, ИмяПоляКлюча, ИмяПоляЗначения = Неопределено) Экспорт
|
||||
|
||||
Результат = Новый Структура();
|
||||
|
||||
Для Каждого ЭлементКоллекции Из Коллекция Цикл
|
||||
|
||||
Значение = ?(ИмяПоляЗначения = Неопределено, ЭлементКоллекции, ЭлементКоллекции[ИмяПоляЗначения]);
|
||||
|
||||
Результат.Вставить(ЭлементКоллекции[ИмяПоляКлюча], Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Сравнивает данные сложной структуры с учетом вложенности.
|
||||
//
|
||||
// Параметры:
|
||||
// Данные1 - Структура
|
||||
// - ФиксированнаяСтруктура
|
||||
// - Соответствие из Произвольный
|
||||
// - ФиксированноеСоответствие из Произвольный
|
||||
// - Массив из Произвольный
|
||||
// - ФиксированныйМассив из Произвольный
|
||||
// - Строка
|
||||
// - Число
|
||||
// - Булево - сравниваемые данные.
|
||||
// Данные2 - Произвольный - те же типы, что и для параметра Данные1.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Истина, если совпадают.
|
||||
//
|
||||
Функция ДанныеСовпадают(Данные1, Данные2) Экспорт
|
||||
|
||||
ТипЗначенияДанные1 = ТипЗнч(Данные1);
|
||||
Если ТипЗначенияДанные1 <> ТипЗнч(Данные2) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗначенияДанные1 = Тип("Структура")
|
||||
ИЛИ ТипЗначенияДанные1 = Тип("ФиксированнаяСтруктура") Тогда
|
||||
|
||||
Если Данные1.Количество() <> Данные2.Количество() Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого КлючИЗначение Из Данные1 Цикл
|
||||
СтароеЗначение = Неопределено;
|
||||
|
||||
Если НЕ Данные2.Свойство(КлючИЗначение.Ключ, СтароеЗначение)
|
||||
ИЛИ НЕ ДанныеСовпадают(КлючИЗначение.Значение, СтароеЗначение) Тогда
|
||||
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
ИначеЕсли ТипЗначенияДанные1 = Тип("Соответствие")
|
||||
ИЛИ ТипЗначенияДанные1 = Тип("ФиксированноеСоответствие") Тогда
|
||||
|
||||
Если Данные1.Количество() <> Данные2.Количество() Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КлючиНовогоСоответствия = Новый Соответствие;
|
||||
|
||||
Для Каждого КлючИЗначение Из Данные1 Цикл
|
||||
КлючиНовогоСоответствия.Вставить(КлючИЗначение.Ключ, Истина);
|
||||
СтароеЗначение = Данные2.Получить(КлючИЗначение.Ключ);
|
||||
|
||||
Если НЕ ДанныеСовпадают(КлючИЗначение.Значение, СтароеЗначение) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого КлючИЗначение Из Данные2 Цикл
|
||||
Если КлючиНовогоСоответствия[КлючИЗначение.Ключ] = Неопределено Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
ИначеЕсли ТипЗначенияДанные1 = Тип("Массив")
|
||||
ИЛИ ТипЗначенияДанные1 = Тип("ФиксированныйМассив") Тогда
|
||||
|
||||
Если Данные1.Количество() <> Данные2.Количество() Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Для Индекс = 0 По Данные1.ВГраница() Цикл
|
||||
Если НЕ ДанныеСовпадают(Данные1[Индекс], Данные2[Индекс]) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Данные1 = Данные2;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЧтениеДанных
|
||||
@ -646,8 +759,8 @@
|
||||
// Булево - Это каталог
|
||||
Функция ЭтоКаталог(ПутьКФайлу) Экспорт
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
Возврат Файл.Существует() И Файл.ЭтоКаталог();
|
||||
ВызовУстаревшегоМетода("ЮТОбщий.ЭтоКаталог", "ЮТФайлы.ЭтоКаталог");
|
||||
Возврат ЮТФайлы.Существует(ПутьКФайлу) И ЮТФайлы.ЭтоКаталог(ПутьКФайлу);
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -20,86 +20,94 @@
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// СформироватьОтчет
|
||||
// Формирует отчет о результатах тестирования по заданным параметрам
|
||||
// Параметры:
|
||||
// РезультатВыполнения - Массив - Коллекция результатов выполнения, каждый элемент - структура, см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// ПараметрыЗапуска - Структура - Параметры запуска, см. ЮТФабрика.ПараметрыЗапуска
|
||||
Процедура СформироватьОтчет(РезультатВыполнения, ПараметрыЗапуска) Экспорт
|
||||
// Обработчик - ОписаниеОповещения
|
||||
Процедура СформироватьОтчет(РезультатВыполнения, ПараметрыЗапуска, Обработчик) Экспорт
|
||||
|
||||
Модули = ЮТРасширения.ГенераторыОтчетов();
|
||||
МодульОтчета = Неопределено;
|
||||
Если НЕ ЗначениеЗаполнено(ПараметрыЗапуска.reportPath) Тогда
|
||||
ВызватьИсключение "Не указан путь сохранения отчета";
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Модуль Из Модули Цикл
|
||||
|
||||
Если Модуль.РеализуетФормат(ПараметрыЗапуска.reportFormat) Тогда
|
||||
МодульОтчета = Модуль;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
МодульОтчета = МодульФормирования(ПараметрыЗапуска.reportFormat);
|
||||
|
||||
Если МодульОтчета = Неопределено Тогда
|
||||
|
||||
ВызватьИсключение СтрШаблон("Отчет в формате %1 не поддерживается", ПараметрыЗапуска.reportFormat);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИмяФайлаОтчета = ИмяФайлаОтчета(Модуль, ПараметрыЗапуска);
|
||||
ДанныеОтчета = Модуль.ДанныеОтчета(РезультатВыполнения);
|
||||
ПараметрыФормирования = Новый Структура("РезультатВыполнения, ПараметрыЗапуска, Обработчик", РезультатВыполнения, ПараметрыЗапуска, Обработчик);
|
||||
ПараметрыФормирования.Вставить("МодульОтчета", МодульОтчета);
|
||||
|
||||
Если ДанныеОтчета = Неопределено Тогда
|
||||
|
||||
ВызватьИсключение "Не удалось получить данные отчета";
|
||||
|
||||
ИначеЕсли НЕ ЗначениеЗаполнено(ИмяФайлаОтчета) Тогда
|
||||
|
||||
ВызватьИсключение "Не удалось сформировать имя файла отчета";
|
||||
|
||||
Иначе
|
||||
|
||||
ДанныеОтчета.Записать(ИмяФайлаОтчета);
|
||||
|
||||
КонецЕсли;
|
||||
ОбработчикПолученияИмениФайла = Новый ОписаниеОповещения("ПослеФормированияИмениФайла", ЭтотОбъект, ПараметрыФормирования);
|
||||
ИмяФайлаОтчета(ПараметрыФормирования, ОбработчикПолученияИмениФайла);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ИмяФайлаОтчета(Модуль, ПараметрыЗапуска)
|
||||
Процедура ИмяФайлаОтчета(ПараметрыФормирования, Обработчик)
|
||||
|
||||
ИмяФайла = Неопределено;
|
||||
ПараметрыПроверки = Новый Структура("ПараметрыФормирования, Обработчик", ПараметрыФормирования, Обработчик);
|
||||
|
||||
ПутьКОтчету = ПараметрыЗапуска.reportPath;
|
||||
ОбработчикПроверки = Новый ОписаниеОповещения("ПослеПроверкиКаталога", ЭтотОбъект, ПараметрыПроверки);
|
||||
ЮТФайлы.ЭтоКаталог(ПараметрыФормирования.ПараметрыЗапуска.reportPath, ОбработчикПроверки);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ПутьКОтчету) Тогда
|
||||
ВызватьИсключение "Не указан путь сохранения отчета";
|
||||
КонецПроцедуры
|
||||
|
||||
Функция МодульФормирования(Формат)
|
||||
|
||||
Модули = ЮТРасширения.ГенераторыОтчетов();
|
||||
МодульОтчета = Неопределено;
|
||||
|
||||
Для Каждого Модуль Из Модули Цикл
|
||||
|
||||
Если Модуль.РеализуетФормат(Формат) Тогда
|
||||
МодульОтчета = Модуль;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МодульОтчета;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПослеФормированияИмениФайла(ИмяФайлаОтчета, Параметры) Экспорт
|
||||
|
||||
ДанныеОтчета = Параметры.МодульОтчета.ДанныеОтчета(Параметры.РезультатВыполнения);
|
||||
|
||||
Если ДанныеОтчета = Неопределено Тогда
|
||||
ВызватьИсключение "Не удалось получить данные отчета";
|
||||
Иначе
|
||||
ДанныеОтчета.Записать(ИмяФайлаОтчета);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЮТОбщий.ЭтоКаталог(ПутьКОтчету) Тогда
|
||||
ИмяФайла = ЮТОбщий.ОбъединитьПути(ПутьКОтчету, Модуль.ИмяФайлаПоУмолчанию());
|
||||
ЮТИсполнительКлиент.ВызватьОбработчик(Параметры.Обработчик);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеПроверкиКаталога(ЭтоКаталог, Параметры) Экспорт
|
||||
|
||||
ПутьКОтчету = Параметры.ПараметрыФормирования.ПараметрыЗапуска.reportPath;
|
||||
Если ЭтоКаталог Тогда
|
||||
ИмяФайла = ЮТОбщий.ОбъединитьПути(ПутьКОтчету, Параметры.ПараметрыФормирования.МодульОтчета.ИмяФайлаПоУмолчанию());
|
||||
Иначе
|
||||
ИмяФайла = ПутьКОтчету;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИмяФайла;
|
||||
ЮТИсполнительКлиент.ВызватьОбработчик(Параметры.Обработчик, ИмяФайла);
|
||||
|
||||
КонецФункции
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -16,24 +16,21 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// ПараметрыЗапуска
|
||||
// Возвращает загруженные параметры запуска тестирования
|
||||
// Параметры:
|
||||
// ПараметрыЗапускаСтрокой - Строка - Параметры запуска приложения
|
||||
// Обработчик - ОписаниеОповещения
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// см. ЮТФабрика.ПараметрыЗапуска
|
||||
Функция ПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой) Экспорт
|
||||
Функция ПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой, Обработчик) Экспорт
|
||||
|
||||
Попытка
|
||||
|
||||
Параметры = ПрочитатьПараметрыЗапуска(ПараметрыЗапускаСтрокой);
|
||||
Параметры = ПрочитатьПараметрыЗапуска(ПараметрыЗапускаСтрокой, Обработчик);
|
||||
|
||||
Исключение
|
||||
|
||||
@ -54,55 +51,25 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ЗначениеНастройкиТеста(ИмяНастройки, ОписаниеТеста, ОписаниеТестовогоНабора, ЗначениеПоУмолчанию) Экспорт
|
||||
|
||||
Значение = ЗначениеПоУмолчанию;
|
||||
|
||||
Если ОписаниеТеста.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ОписаниеТеста.НастройкиВыполнения[ИмяНастройки];
|
||||
ИначеЕсли ОписаниеТестовогоНабора.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ОписаниеТестовогоНабора.НастройкиВыполнения[ИмяНастройки];
|
||||
Иначе
|
||||
|
||||
ГлобальныеНастройки = ЮТКонтекст.ГлобальныеНастройкиВыполнения();
|
||||
Если ГлобальныеНастройки.Свойство(ИмяНастройки) Тогда
|
||||
Значение = ГлобальныеНастройки[ИмяНастройки];
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// ПрочитатьПараметрыЗапуска
|
||||
// Читает параметры из строки запуска
|
||||
// Параметры:
|
||||
// ПараметрыЗапускаСтрокой - Строка - Строка с параметрами запуска.
|
||||
// Содержит ключ запуска и строку с конфигурационным файлом.
|
||||
// Формат строки "RunUnitTests=/путь/к/конфигурационному/файлу", где ключ указывается обязательно, а путь - по желанию
|
||||
// Содержит ключ запуска и строку с конфигурационным файлом.
|
||||
// Формат строки "RunUnitTests=/путь/к/конфигурационному/файлу",
|
||||
// где ключ указывается обязательно, а путь - по желанию
|
||||
// Обработчик - ОписаниеОповещения
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// см. ЮТФабрика.ПараметрыЗапуска
|
||||
Функция ПрочитатьПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой)
|
||||
Функция ПрочитатьПараметрыЗапуска(Знач ПараметрыЗапускаСтрокой, Обработчик)
|
||||
|
||||
Параметры = ЮТФабрика.ПараметрыЗапуска();
|
||||
|
||||
Если Не ЗначениеЗаполнено(ПараметрыЗапускаСтрокой) Тогда
|
||||
ЮТИсполнительКлиент.ВызватьОбработчик(Обработчик, Параметры);
|
||||
Возврат Параметры;
|
||||
КонецЕсли;
|
||||
|
||||
@ -139,11 +106,12 @@
|
||||
Если ЗначениеЗаполнено(КонфигурационныйФайл) Тогда
|
||||
|
||||
ПараметрыИзФайла = ПрочитатьКонфигурационныйФайл(КонфигурационныйФайл);
|
||||
|
||||
ДополнитьПараметрыПрочитанными(Параметры, ПараметрыИзФайла);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ЮТИсполнительКлиент.ВызватьОбработчик(Обработчик, Параметры);
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
@ -1,12 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a0e947cd-ee15-4ae9-bf95-21ed64042227">
|
||||
<name>ЮТПараметры</name>
|
||||
<name>ЮТПараметрыЗапуска</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Параметры</value>
|
||||
</synonym>
|
||||
<comment>Используется для обработки и дополнения параметров запуска тестов</comment>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -186,7 +186,7 @@
|
||||
|
||||
// Обработка события "ПослеФормированияИсполняемыхНаборовТестов"
|
||||
// Параметры:
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТИсполнитель.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТФабрика.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
Процедура ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов) Экспорт
|
||||
|
||||
Параметры = ЮТОбщий.ЗначениеВМассиве(КоллекцияКатегорийНаборов);
|
||||
@ -271,7 +271,7 @@
|
||||
|
||||
ИмяПараметра = ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции;
|
||||
|
||||
Возврат ЮТПараметры.ЗначениеНастройкиТеста(ИмяПараметра, ОписаниеСобытия.Тест, ОписаниеСобытия.Набор, Ложь);
|
||||
Возврат ЮТНастройкиВыполнения.ЗначениеНастройкиТеста(ИмяПараметра, ОписаниеСобытия.Тест, ОписаниеСобытия.Набор, Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -369,7 +369,30 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Удаляет переданные объекта
|
||||
//
|
||||
// Параметры:
|
||||
// Ссылки - Массив из ЛюбаяСсылка
|
||||
Процедура Удалить(Ссылки) Экспорт
|
||||
|
||||
ЮТТестовыеДанныеВызовСервера.Удалить(Ссылки);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Если Сервер Тогда
|
||||
// Возвращает мок для HTTPСервисЗапрос.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция HTTPСервисЗапрос() Экспорт
|
||||
|
||||
Возврат Обработки.ЮТHTTPСервисЗапрос.Создать();
|
||||
|
||||
КонецФункции
|
||||
#КонецЕсли
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -143,6 +143,20 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура Удалить(Знач Ссылки) Экспорт
|
||||
|
||||
Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда
|
||||
Ссылки = ЮТОбщий.ЗначениеВМассиве(Ссылки);
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Ссылка Из Ссылки Цикл
|
||||
|
||||
Ссылка.ПолучитьОбъект().Удалить();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
|
@ -82,7 +82,14 @@
|
||||
// СтатусыИсполненияТеста
|
||||
// Возвращает перечисление возможных статусов выполнения теста, жизненный цикл теста
|
||||
// Возвращаемое значение:
|
||||
// ФиксированнаяСтруктура - Статусы исполнения теста
|
||||
// ФиксированнаяСтруктура - Статусы исполнения теста:
|
||||
// * Ожидание- Строка - Тест не выполнялся
|
||||
// * Исполнение- Строка - Тест выполняется в данный момент
|
||||
// * Успешно- Строка - Тест успешно пройден
|
||||
// * Ошибка- Строка - Тест упал с ошибкой выполнения
|
||||
// * Сломан- Строка - Тест упал на проверках утверждений
|
||||
// * Пропущен- Строка - Тест пропущен по каким либо причинам
|
||||
// * НеРеализован- Строка - Тест не реализован
|
||||
Функция СтатусыИсполненияТеста() Экспорт
|
||||
|
||||
Статусы = Новый Структура();
|
||||
@ -102,7 +109,7 @@
|
||||
// Типы ошибок.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ФиксированнаяСтруктура
|
||||
// ФиксированнаяСтруктура - Типы возможных ошибок:
|
||||
// * ТестНеРеализован - Строка
|
||||
// * ОшибкаСравнения - Строка
|
||||
// * ОшибкаОбработкиСобытия - Строка
|
||||
@ -121,6 +128,7 @@
|
||||
Типы.Вставить(ТипОшибки.Ключ, ТипОшибки.Ключ);
|
||||
КонецЦикла;
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат Новый ФиксированнаяСтруктура(Типы);
|
||||
|
||||
КонецФункции
|
||||
@ -131,20 +139,23 @@
|
||||
ЮТПовторногоИспользования.ПараметрыТиповОшибок();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЮТТестовыеДанные.СтруктураMarkDown("Ключ",
|
||||
"| Ключ | Представление | Статус |
|
||||
||--------------------------------|----------------------------------|--------------|
|
||||
|| ТестНеРеализован | Не реализован | НеРеализован |
|
||||
|| ОшибкаСравнения | Ошибка сравнения | Ошибка |
|
||||
|| ОшибкаОбработкиСобытия | Ошибка обработки события | Сломан |
|
||||
|| Утверждений | Ошибка утверждений | Ошибка |
|
||||
|| Исполнения | Ошибка исполнения | Сломан |
|
||||
|| ЧтенияТестов | Загрузки тестов | Сломан |
|
||||
|| МалоПараметров | Мало фактических параметров | Сломан |
|
||||
|| МногоПараметров | Много фактических параметров | Сломан |
|
||||
|| НекорректныйКонтекстИсполнения | Некорректный контекст исполнения | Пропущен |
|
||||
|| Пропущен | Пропущен | Пропущен |
|
||||
|");
|
||||
Статусы = СтатусыИсполненияТеста();
|
||||
Реквизиты = "Ключ, Представление, Статус";
|
||||
|
||||
ТипыОшибок = Новый Массив();
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ТестНеРеализован", "Не реализован", Статусы.НеРеализован));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ТестНеРеализован", "Не реализован", Статусы.НеРеализован));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ОшибкаСравнения", "Ошибка сравнения", Статусы.Ошибка));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ОшибкаОбработкиСобытия", "Ошибка обработки события", Статусы.Сломан));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Утверждений", "Ошибка утверждений", Статусы.Ошибка));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Исполнения", "Ошибка исполнения", Статусы.Сломан));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "ЧтенияТестов", "Загрузки тестов", Статусы.Сломан));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "МалоПараметров", "Мало фактических параметров", Статусы.Сломан));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "МногоПараметров", "Много фактических параметров", Статусы.Сломан));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "НекорректныйКонтекстИсполнения", "Некорректный контекст исполнения", Статусы.Пропущен));
|
||||
ТипыОшибок.Добавить(Новый Структура(Реквизиты, "Пропущен", "Пропущен", Статусы.Пропущен));
|
||||
|
||||
Возврат ЮТОбщий.ВСтруктуру(ТипыОшибок, "Ключ");
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -346,6 +357,8 @@
|
||||
// * reportFormat - Строка - Формат отчета о тестировании.
|
||||
// Модули реализующие различные форматы отчетов собраны в подсистеме ЮТФормированиеОтчета
|
||||
// * logging - см. ПараметрыЛогирования
|
||||
// * showReport - Булево - Признак необходмости отобразить отчет в 1с по окончании тестирования
|
||||
// * exitCode - Строка - Путь к файлу, в который будет записан коды выхода
|
||||
Функция ПараметрыЗапуска() Экспорт
|
||||
|
||||
Параметры = Новый Структура;
|
||||
@ -359,6 +372,7 @@
|
||||
Параметры.Вставить("reportFormat", "jUnit");
|
||||
Параметры.Вставить("showReport", Ложь);
|
||||
Параметры.Вставить("logging", ПараметрыЛогирования());
|
||||
Параметры.Вставить("exitCode", "");
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
@ -489,6 +503,48 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Описание категория набора тестов.
|
||||
//
|
||||
// Параметры:
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание категория набора тестов:
|
||||
// * ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
// * Клиентские - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Серверные - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Пропущенные - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль) Экспорт
|
||||
|
||||
КатегорииНаборов = Новый Структура();
|
||||
КатегорииНаборов.Вставить("ТестовыйМодуль", ТестовыйМодуль);
|
||||
КатегорииНаборов.Вставить("Клиентские", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Серверные", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Пропущенные", Новый Массив());
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат КатегорииНаборов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область КонструкторыКонтекстов
|
||||
|
||||
// Данные контекста исполнения.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные контекста исполнения:
|
||||
// * Уровень - Строка
|
||||
Функция НовыйКонтекстИсполнения() Экспорт
|
||||
|
||||
Контекст = Новый Структура();
|
||||
Контекст.Вставить("Уровень", "");
|
||||
|
||||
Возврат Контекст;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
// КонтекстыМодуля
|
||||
|
75
exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl
Normal file
@ -0,0 +1,75 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Содержит методы по работе с файлами
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Проверяет существование файла
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка
|
||||
// Обработчик - ОписаниеОповещения, Неопределено - Обработчик асинхронного получения свойства файла.
|
||||
// Если обработчик указан, но проверка выполняется асинхронно, иначе - синхронно
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Существует
|
||||
Функция Существует(ПутьКФайлу, Обработчик = Неопределено) Экспорт
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
|
||||
#Если Клиент Тогда
|
||||
Если Обработчик = Неопределено Тогда
|
||||
Возврат Файл.Существует();
|
||||
Иначе
|
||||
Файл.НачатьПроверкуСуществования(Обработчик);
|
||||
КонецЕсли;
|
||||
#Иначе
|
||||
Возврат Файл.Существует();
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет, что по указанному пути находится каталог
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка
|
||||
// Обработчик - ОписаниеОповещения, Неопределено - Обработчик асинхронного получения свойства файла.
|
||||
// Если обработчик указан, но проверка выполняется асинхронно, иначе - синхронно
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Это каталог
|
||||
Функция ЭтоКаталог(ПутьКФайлу, Обработчик = Неопределено) Экспорт
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
|
||||
#Если Клиент Тогда
|
||||
Если Обработчик = Неопределено Тогда
|
||||
Возврат Файл.ЭтоКаталог();
|
||||
Иначе
|
||||
Файл.НачатьПроверкуЭтоКаталог(Обработчик);
|
||||
КонецЕсли;
|
||||
#Иначе
|
||||
Возврат Файл.ЭтоКаталог();
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
11
exts/yaxunit/src/CommonModules/ЮТФайлы/ЮТФайлы.mdo
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2874e686-3785-4050-994a-bf457fa32700">
|
||||
<name>ЮТФайлы</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Файлы</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -73,8 +73,8 @@
|
||||
|
||||
ЮТТесты.ПередЧтениемСценариевМодуля(ОписаниеМодуля);
|
||||
|
||||
ПолноеИмяМетода = ОписаниеМодуля.Имя + ".ИсполняемыеСценарии";
|
||||
Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода, ЮТОбщий.ЗначениеВМассиве(Неопределено));
|
||||
ПолноеИмяМетода = ОписаниеМодуля.Имя + "." + ИмяМетодаСценариев();
|
||||
Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
|
||||
@ -84,12 +84,13 @@
|
||||
Если ТипОшибки = ТипыОшибок.ТестНеРеализован Тогда
|
||||
ЭтоТестовыйМодуль = Ложь;
|
||||
Ошибка = Неопределено;
|
||||
ИначеЕсли ТипОшибки = ТипыОшибок.МногоПараметров Тогда
|
||||
Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода);
|
||||
ИначеЕсли ТипОшибки = ТипыОшибок.МалоПараметров Тогда
|
||||
Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода, ЮТОбщий.ЗначениеВМассиве(Неопределено));
|
||||
ЮТОбщий.СообщитьПользователю("Используется устаревшая сигнатура метода `ИсполняемыеСценарии`, метод не должен принимать параметров.");
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
|
||||
Данные = Новый Массив(); // Фиксируем, чтобы отобразить в отчете
|
||||
|
@ -39,7 +39,8 @@
|
||||
<commonModules>CommonModule.МокитоПроверки</commonModules>
|
||||
<commonModules>CommonModule.МокитоСлужебный</commonModules>
|
||||
<commonModules>CommonModule.ЮТест</commonModules>
|
||||
<commonModules>CommonModule.ЮТИсполнитель</commonModules>
|
||||
<commonModules>CommonModule.ЮТИсполнительКлиент</commonModules>
|
||||
<commonModules>CommonModule.ЮТИсполнительКлиентСервер</commonModules>
|
||||
<commonModules>CommonModule.ЮТИсполнительСервер</commonModules>
|
||||
<commonModules>CommonModule.ЮТКонструкторВариантов</commonModules>
|
||||
<commonModules>CommonModule.ЮТКонструкторТестовыхДанных</commonModules>
|
||||
@ -52,12 +53,13 @@
|
||||
<commonModules>CommonModule.ЮТМетаданные</commonModules>
|
||||
<commonModules>CommonModule.ЮТМетаданныеПовтИсп</commonModules>
|
||||
<commonModules>CommonModule.ЮТМетаданныеСервер</commonModules>
|
||||
<commonModules>CommonModule.ЮТНастройкиВыполнения</commonModules>
|
||||
<commonModules>CommonModule.ЮТОбщий</commonModules>
|
||||
<commonModules>CommonModule.ЮТОбщийВызовСервера</commonModules>
|
||||
<commonModules>CommonModule.ЮТОтчет</commonModules>
|
||||
<commonModules>CommonModule.ЮТОтчетJSON</commonModules>
|
||||
<commonModules>CommonModule.ЮТОтчетJUnit</commonModules>
|
||||
<commonModules>CommonModule.ЮТПараметры</commonModules>
|
||||
<commonModules>CommonModule.ЮТПараметрыЗапуска</commonModules>
|
||||
<commonModules>CommonModule.ЮТПовторногоИспользования</commonModules>
|
||||
<commonModules>CommonModule.ЮТРасширения</commonModules>
|
||||
<commonModules>CommonModule.ЮТРегистрацияОшибок</commonModules>
|
||||
@ -68,8 +70,10 @@
|
||||
<commonModules>CommonModule.ЮТТесты</commonModules>
|
||||
<commonModules>CommonModule.ЮТУтверждения</commonModules>
|
||||
<commonModules>CommonModule.ЮТФабрика</commonModules>
|
||||
<commonModules>CommonModule.ЮТФайлы</commonModules>
|
||||
<commonModules>CommonModule.ЮТФильтрация</commonModules>
|
||||
<commonModules>CommonModule.ЮТЧитатель</commonModules>
|
||||
<commonModules>CommonModule.ЮТЧитательСервер</commonModules>
|
||||
<dataProcessors>DataProcessor.ЮТHTTPСервисЗапрос</dataProcessors>
|
||||
<dataProcessors>DataProcessor.ЮТЮнитТесты</dataProcessors>
|
||||
</mdclass:Configuration>
|
||||
|
@ -35,7 +35,7 @@
|
||||
&После("ПриНачалеРаботыСистемы")
|
||||
Процедура ЮТПриНачалеРаботыСистемы()
|
||||
|
||||
ЮТИсполнитель.ВыполнитьМодульноеТестирование();
|
||||
ЮТИсполнительКлиент.ВыполнитьМодульноеТестирование();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -35,7 +35,7 @@
|
||||
&После("ПриНачалеРаботыСистемы")
|
||||
Процедура ЮТПриНачалеРаботыСистемы()
|
||||
|
||||
ЮТИсполнитель.ВыполнитьМодульноеТестирование();
|
||||
ЮТИсполнительКлиентСервер.ВыполнитьМодульноеТестирование();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -0,0 +1,252 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
#Если Сервер Тогда
|
||||
|
||||
#Область ОписаниеПеременных
|
||||
|
||||
//@skip-check object-module-export-variable
|
||||
Перем HTTPМетод Экспорт;
|
||||
//@skip-check object-module-export-variable
|
||||
Перем БазовыйURL Экспорт;
|
||||
//@skip-check object-module-export-variable
|
||||
Перем Заголовки Экспорт;
|
||||
//@skip-check object-module-export-variable
|
||||
Перем ОтносительныйURL Экспорт;
|
||||
//@skip-check object-module-export-variable
|
||||
Перем ПараметрыURL Экспорт;
|
||||
//@skip-check object-module-export-variable
|
||||
Перем ПараметрыЗапроса Экспорт;
|
||||
|
||||
Перем Тело;
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Возвращает тело как двоичные данные.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ДвоичныеДанные - Тело
|
||||
Функция ПолучитьТелоКакДвоичныеДанные() Экспорт
|
||||
|
||||
ТипТела = ТипЗнч(Тело);
|
||||
|
||||
Если Тело = Неопределено Тогда
|
||||
Возврат ПолучитьДвоичныеДанныеИзBase64Строки("");
|
||||
ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда
|
||||
Возврат Тело;
|
||||
ИначеЕсли ТипТела = Тип("Строка") Тогда
|
||||
Возврат ПолучитьДвоичныеДанныеИзСтроки(Тело);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает тело как поток.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Поток - Тело
|
||||
Функция ПолучитьТелоКакПоток() Экспорт
|
||||
|
||||
Возврат ПолучитьТелоКакДвоичныеДанные().ОткрытьПотокДляЧтения();
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает тело как строку.
|
||||
//
|
||||
// Параметры:
|
||||
// Кодировка - КодировкаТекста, Строка - Кодировка
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Тело
|
||||
Функция ПолучитьТелоКакСтроку(Кодировка = Неопределено) Экспорт
|
||||
|
||||
ТипТела = ТипЗнч(Тело);
|
||||
|
||||
Если Тело = Неопределено Тогда
|
||||
Возврат "";
|
||||
ИначеЕсли ТипТела = Тип("ДвоичныеДанные") Тогда
|
||||
Возврат ПолучитьСтрокуИзДвоичныхДанных(Тело, Кодировка);
|
||||
ИначеЕсли ТипТела = Тип("Строка") Тогда
|
||||
Возврат Тело;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает тело как двоичные данные.
|
||||
// При получении тела в другом формате происходит конвертация
|
||||
//
|
||||
// Параметры:
|
||||
// Данные - ДвоичныеДанные
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция УстановитьТелоКакДвоичныеДанные(Данные) Экспорт
|
||||
|
||||
Тело = Данные;
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает тело как строку.
|
||||
// При получении тела в другом формате происходит конвертация
|
||||
//
|
||||
// Параметры:
|
||||
// Строка - Строка
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция УстановитьТелоКакСтроку(Строка) Экспорт
|
||||
|
||||
Тело = Строка;
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает тело как строку JSON.
|
||||
// Сериализует переданный объект в строку JSON и сохраняет в тело
|
||||
// При получении тела в другом формате происходит конвертация
|
||||
//
|
||||
// Параметры:
|
||||
// Данные - Произвольный
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция УстановитьТелоКакСтрокуJSON(Данные) Экспорт
|
||||
|
||||
ЗаписьJSON = Новый ЗаписьJSON();
|
||||
ЗаписьJSON.УстановитьСтроку();
|
||||
ЗаписатьJSON(ЗаписьJSON, Данные);
|
||||
|
||||
Тело = ЗаписьJSON.Закрыть();
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавляет заголовок.
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяЗаголовка - Строка
|
||||
// Значение - Строка
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция ДобавитьЗаголовок(ИмяЗаголовка, Значение) Экспорт
|
||||
|
||||
Заголовки.Вставить(ИмяЗаголовка, Значение);
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавляет параметр запроса.
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяПараметра - Строка
|
||||
// Значение - Строка
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция ДобавитьПараметрЗапроса(ИмяПараметра, Значение) Экспорт
|
||||
|
||||
ПараметрыЗапроса.Вставить(ИмяПараметра, Значение);
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавляет параметр URL.
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяПараметра - Строка
|
||||
// Значение - Строка
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция ДобавитьПараметрURL(ИмяПараметра, Значение) Экспорт
|
||||
|
||||
ПараметрыURL.Вставить(ИмяПараметра, Значение);
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает HTTP метод
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Строка - Имя http метода
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция Метод(Значение) Экспорт
|
||||
|
||||
HTTPМетод = Значение;
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает базовый URL.
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Строка - базовый URL
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция БазовыйURL(Значение) Экспорт
|
||||
|
||||
БазовыйURL = Значение;
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Устанавливает относительный URL.
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Строка - относительный URL
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.ЮТHTTPСервисЗапрос - Мок
|
||||
Функция ОтносительныйURL(Значение) Экспорт
|
||||
|
||||
ОтносительныйURL = Значение;
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура Инициализировать()
|
||||
|
||||
HTTPМетод = "GET";
|
||||
БазовыйURL = "";
|
||||
Заголовки = Новый Соответствие();
|
||||
ОтносительныйURL = "";
|
||||
ПараметрыURL = Новый Соответствие();
|
||||
ПараметрыЗапроса = Новый Соответствие();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Инициализация
|
||||
|
||||
Инициализировать();
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецЕсли
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="81c2b3c4-8e40-4811-aab0-e7a1371d0c51">
|
||||
<producedTypes>
|
||||
<objectType typeId="5b53c341-183f-4aa0-b3ec-1f355d0f74f5" valueTypeId="26dcab52-beab-4c30-aa64-02887735d56e"/>
|
||||
<managerType typeId="d0cecbc4-c89f-4ef2-ab8d-10bcfd8c514c" valueTypeId="50afe94b-4ccb-4a26-9a80-01121c6fef66"/>
|
||||
</producedTypes>
|
||||
<name>ЮТHTTPСервисЗапрос</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Мок для HTTPСервис запрос</value>
|
||||
</synonym>
|
||||
<useStandardCommands>true</useStandardCommands>
|
||||
</mdclass:DataProcessor>
|
@ -457,20 +457,185 @@
|
||||
<showInFooter>true</showInFooter>
|
||||
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
|
||||
</items>
|
||||
<items xsi:type="form:FormField">
|
||||
<name>ВыводЛога</name>
|
||||
<id>66</id>
|
||||
<items xsi:type="form:FormGroup">
|
||||
<name>ГруппаФайлы</name>
|
||||
<id>75</id>
|
||||
<items xsi:type="form:FormField">
|
||||
<name>ИмяФайлаОтчета</name>
|
||||
<id>81</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<dataPath xsi:type="form:DataPath">
|
||||
<segments>ИмяФайлаОтчета</segments>
|
||||
</dataPath>
|
||||
<extendedTooltip>
|
||||
<name>ИмяФайлаОтчетаРасширеннаяПодсказка</name>
|
||||
<id>83</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<type>Label</type>
|
||||
<autoMaxWidth>true</autoMaxWidth>
|
||||
<autoMaxHeight>true</autoMaxHeight>
|
||||
<extInfo xsi:type="form:LabelDecorationExtInfo">
|
||||
<horizontalAlign>Left</horizontalAlign>
|
||||
</extInfo>
|
||||
</extendedTooltip>
|
||||
<contextMenu>
|
||||
<name>ИмяФайлаОтчетаКонтекстноеМеню</name>
|
||||
<id>82</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<autoFill>true</autoFill>
|
||||
</contextMenu>
|
||||
<type>InputField</type>
|
||||
<editMode>Enter</editMode>
|
||||
<showInHeader>true</showInHeader>
|
||||
<headerHorizontalAlign>Left</headerHorizontalAlign>
|
||||
<showInFooter>true</showInFooter>
|
||||
<extInfo xsi:type="form:InputFieldExtInfo">
|
||||
<handlers>
|
||||
<event>StartChoice</event>
|
||||
<name>ИмяФайлаОтчетаНачалоВыбора</name>
|
||||
</handlers>
|
||||
<autoMaxHeight>true</autoMaxHeight>
|
||||
<wrap>true</wrap>
|
||||
<choiceButton>true</choiceButton>
|
||||
<clearButton>true</clearButton>
|
||||
<chooseType>true</chooseType>
|
||||
<typeDomainEnabled>true</typeDomainEnabled>
|
||||
<textEdit>true</textEdit>
|
||||
</extInfo>
|
||||
</items>
|
||||
<items xsi:type="form:FormField">
|
||||
<name>ВыводЛога</name>
|
||||
<id>66</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<dataPath xsi:type="form:DataPath">
|
||||
<segments>ИмяФайлаЛога</segments>
|
||||
</dataPath>
|
||||
<extendedTooltip>
|
||||
<name>ВыводЛогаРасширеннаяПодсказка</name>
|
||||
<id>68</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<type>Label</type>
|
||||
<autoMaxWidth>true</autoMaxWidth>
|
||||
<autoMaxHeight>true</autoMaxHeight>
|
||||
<extInfo xsi:type="form:LabelDecorationExtInfo">
|
||||
<horizontalAlign>Left</horizontalAlign>
|
||||
</extInfo>
|
||||
</extendedTooltip>
|
||||
<contextMenu>
|
||||
<name>ВыводЛогаКонтекстноеМеню</name>
|
||||
<id>67</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<autoFill>true</autoFill>
|
||||
</contextMenu>
|
||||
<type>InputField</type>
|
||||
<editMode>Enter</editMode>
|
||||
<showInHeader>true</showInHeader>
|
||||
<headerHorizontalAlign>Left</headerHorizontalAlign>
|
||||
<showInFooter>true</showInFooter>
|
||||
<extInfo xsi:type="form:InputFieldExtInfo">
|
||||
<handlers>
|
||||
<event>StartChoice</event>
|
||||
<name>ВыводЛогаНачалоВыбора</name>
|
||||
</handlers>
|
||||
<wrap>true</wrap>
|
||||
<choiceButton>true</choiceButton>
|
||||
<clearButton>true</clearButton>
|
||||
<chooseType>true</chooseType>
|
||||
<typeDomainEnabled>true</typeDomainEnabled>
|
||||
<textEdit>true</textEdit>
|
||||
</extInfo>
|
||||
</items>
|
||||
<items xsi:type="form:FormField">
|
||||
<name>ИмяФайлаКодаВозврата</name>
|
||||
<id>72</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<dataPath xsi:type="form:DataPath">
|
||||
<segments>ИмяФайлаКодаВозврата</segments>
|
||||
</dataPath>
|
||||
<extendedTooltip>
|
||||
<name>ИмяФайлаКодаВозвратаРасширеннаяПодсказка</name>
|
||||
<id>74</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<type>Label</type>
|
||||
<autoMaxWidth>true</autoMaxWidth>
|
||||
<autoMaxHeight>true</autoMaxHeight>
|
||||
<extInfo xsi:type="form:LabelDecorationExtInfo">
|
||||
<horizontalAlign>Left</horizontalAlign>
|
||||
</extInfo>
|
||||
</extendedTooltip>
|
||||
<contextMenu>
|
||||
<name>ИмяФайлаКодаВозвратаКонтекстноеМеню</name>
|
||||
<id>73</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<autoFill>true</autoFill>
|
||||
</contextMenu>
|
||||
<type>InputField</type>
|
||||
<editMode>Enter</editMode>
|
||||
<showInHeader>true</showInHeader>
|
||||
<headerHorizontalAlign>Left</headerHorizontalAlign>
|
||||
<showInFooter>true</showInFooter>
|
||||
<extInfo xsi:type="form:InputFieldExtInfo">
|
||||
<handlers>
|
||||
<event>StartChoice</event>
|
||||
<name>ИмяФайлаКодаВозвратаНачалоВыбора</name>
|
||||
</handlers>
|
||||
<autoMaxHeight>true</autoMaxHeight>
|
||||
<wrap>true</wrap>
|
||||
<choiceButton>true</choiceButton>
|
||||
<clearButton>true</clearButton>
|
||||
<chooseType>true</chooseType>
|
||||
<typeDomainEnabled>true</typeDomainEnabled>
|
||||
<textEdit>true</textEdit>
|
||||
</extInfo>
|
||||
</items>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<dataPath xsi:type="form:DataPath">
|
||||
<segments>ИмяФайлаЛога</segments>
|
||||
</dataPath>
|
||||
<title>
|
||||
<key>ru</key>
|
||||
<value>Вывод в файл</value>
|
||||
</title>
|
||||
<extendedTooltip>
|
||||
<name>ВыводЛогаРасширеннаяПодсказка</name>
|
||||
<id>68</id>
|
||||
<name>ГруппаФайлыРасширеннаяПодсказка</name>
|
||||
<id>76</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
@ -483,33 +648,15 @@
|
||||
<horizontalAlign>Left</horizontalAlign>
|
||||
</extInfo>
|
||||
</extendedTooltip>
|
||||
<contextMenu>
|
||||
<name>ВыводЛогаКонтекстноеМеню</name>
|
||||
<id>67</id>
|
||||
<visible>true</visible>
|
||||
<enabled>true</enabled>
|
||||
<userVisible>
|
||||
<common>true</common>
|
||||
</userVisible>
|
||||
<autoFill>true</autoFill>
|
||||
</contextMenu>
|
||||
<type>InputField</type>
|
||||
<editMode>Enter</editMode>
|
||||
<showInHeader>true</showInHeader>
|
||||
<headerHorizontalAlign>Left</headerHorizontalAlign>
|
||||
<showInFooter>true</showInFooter>
|
||||
<extInfo xsi:type="form:InputFieldExtInfo">
|
||||
<handlers>
|
||||
<event>StartChoice</event>
|
||||
<name>ВыводЛогаНачалоВыбора</name>
|
||||
</handlers>
|
||||
<wrap>true</wrap>
|
||||
<choiceButton>true</choiceButton>
|
||||
<clearButton>true</clearButton>
|
||||
<openButton>true</openButton>
|
||||
<chooseType>true</chooseType>
|
||||
<typeDomainEnabled>true</typeDomainEnabled>
|
||||
<textEdit>true</textEdit>
|
||||
<type>UsualGroup</type>
|
||||
<extInfo xsi:type="form:UsualGroupExtInfo">
|
||||
<group>Vertical</group>
|
||||
<representation>NormalSeparation</representation>
|
||||
<showLeftMargin>true</showLeftMargin>
|
||||
<united>true</united>
|
||||
<showTitle>true</showTitle>
|
||||
<throughAlign>Auto</throughAlign>
|
||||
<currentRowUse>DontUse</currentRowUse>
|
||||
</extInfo>
|
||||
</items>
|
||||
<items xsi:type="form:FormField">
|
||||
@ -926,7 +1073,7 @@
|
||||
<name>ИмяФайлаЛога</name>
|
||||
<title>
|
||||
<key>ru</key>
|
||||
<value>Вывод отладочных сообщений в файл</value>
|
||||
<value>Отладочные сообщения</value>
|
||||
</title>
|
||||
<id>61</id>
|
||||
<valueType>
|
||||
@ -963,6 +1110,48 @@
|
||||
<segments>ОтобразитьОтчет</segments>
|
||||
</settingsSavedData>
|
||||
</attributes>
|
||||
<attributes>
|
||||
<name>ИмяФайлаКодаВозврата</name>
|
||||
<title>
|
||||
<key>ru</key>
|
||||
<value>Код возврата</value>
|
||||
</title>
|
||||
<id>64</id>
|
||||
<valueType>
|
||||
<types>String</types>
|
||||
<stringQualifiers/>
|
||||
</valueType>
|
||||
<view>
|
||||
<common>true</common>
|
||||
</view>
|
||||
<edit>
|
||||
<common>true</common>
|
||||
</edit>
|
||||
<settingsSavedData xsi:type="form:DataPath">
|
||||
<segments>ИмяФайлаКодаВозврата</segments>
|
||||
</settingsSavedData>
|
||||
</attributes>
|
||||
<attributes>
|
||||
<name>ИмяФайлаОтчета</name>
|
||||
<title>
|
||||
<key>ru</key>
|
||||
<value>Отчет</value>
|
||||
</title>
|
||||
<id>65</id>
|
||||
<valueType>
|
||||
<types>String</types>
|
||||
<stringQualifiers/>
|
||||
</valueType>
|
||||
<view>
|
||||
<common>true</common>
|
||||
</view>
|
||||
<edit>
|
||||
<common>true</common>
|
||||
</edit>
|
||||
<settingsSavedData xsi:type="form:DataPath">
|
||||
<segments>ИмяФайлаОтчета</segments>
|
||||
</settingsSavedData>
|
||||
</attributes>
|
||||
<formCommands>
|
||||
<name>УстановитьФлажки</name>
|
||||
<title>
|
||||
|
@ -64,6 +64,20 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ИмяФайлаКодаВозвратаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||||
|
||||
ВыбратьФайл("All files(*.*)|*.*", ИмяФайлаЛога, Новый ОписаниеОповещения("УстановитьИмяФайлаКодаВозврата", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ИмяФайлаОтчетаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
|
||||
|
||||
ВыбратьФайл("jUnit(*.xml)|*.xml|All files(*.*)|*.*", ИмяФайлаЛога, Новый ОписаниеОповещения("УстановитьИмяФайлаОтчета", ЭтотОбъект));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоТестов
|
||||
@ -290,7 +304,7 @@
|
||||
&НаКлиенте
|
||||
Процедура ОбновитьСтрокуЗапуска()
|
||||
|
||||
ПараметрыЗапускаЮнитТестов = СтрШаблон("%1=%2", ЮТПараметры.КлючЗапуска(), ФайлКонфигурации);
|
||||
ПараметрыЗапускаЮнитТестов = СтрШаблон("%1=%2", ЮТПараметрыЗапуска.КлючЗапуска(), ФайлКонфигурации);
|
||||
|
||||
Если ЗапускИзКонфигуратор Тогда
|
||||
|
||||
@ -359,6 +373,24 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура УстановитьИмяФайлаКодаВозврата(ВыбранныйФайл, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если ВыбранныйФайл <> Неопределено Тогда
|
||||
ИмяФайлаКодаВозврата = ВыбранныйФайл;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура УстановитьИмяФайлаОтчета(ВыбранныйФайл, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если ВыбранныйФайл <> Неопределено Тогда
|
||||
ИмяФайлаОтчета = ВыбранныйФайл;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ВыбратьФайл(Фильтр, ИмяФайла, Оповещение)
|
||||
|
||||
@ -389,13 +421,19 @@
|
||||
ВызватьИсключение "Сохранение конфигурации из веб-клиента не поддерживается";
|
||||
#Иначе
|
||||
Конфигурация = ЮТФабрика.ПараметрыЗапуска();
|
||||
Конфигурация.Удалить("ВыполнятьМодульноеТестирование");
|
||||
|
||||
Конфигурация.showReport = ОтобразитьОтчет;
|
||||
Конфигурация.closeAfterTests = Истина;
|
||||
Конфигурация.reportPath = ЮТОбщий.Каталог(ФайлКонфигурации);
|
||||
Конфигурация.Удалить("ВыполнятьМодульноеТестирование");
|
||||
Конфигурация.reportPath = ИмяФайлаОтчета;
|
||||
|
||||
Конфигурация.logging.enable = ЗначениеЗаполнено(ИмяФайлаЛога);
|
||||
Конфигурация.logging.file = ИмяФайлаЛога;
|
||||
|
||||
Если ЗначениеЗаполнено(ИмяФайлаКодаВозврата) Тогда
|
||||
Конфигурация.exitCode = ИмяФайлаКодаВозврата;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ (УстановленФильтрПоРасширению(Конфигурация) ИЛИ УстановленФильтрПоМодулям(Конфигурация)) Тогда
|
||||
УстановитьФильтрПоТестам(Конфигурация);
|
||||
КонецЕсли;
|
||||
|
@ -11,26 +11,32 @@
|
||||
<content>CommonModule.МокитоПроверки</content>
|
||||
<content>CommonModule.МокитоСлужебный</content>
|
||||
<content>CommonModule.ЮТест</content>
|
||||
<content>CommonModule.ЮТИсполнитель</content>
|
||||
<content>CommonModule.ЮТИсполнительКлиентСервер</content>
|
||||
<content>CommonModule.ЮТИсполнительСервер</content>
|
||||
<content>CommonModule.ЮТКонструкторВариантов</content>
|
||||
<content>CommonModule.ЮТКонструкторТестовыхДанных</content>
|
||||
<content>CommonModule.ЮТКонтекст</content>
|
||||
<content>CommonModule.ЮТКонтекстКлиент</content>
|
||||
<content>CommonModule.ЮТКонтекстСервер</content>
|
||||
<content>CommonModule.ЮТКонтекстТеста</content>
|
||||
<content>CommonModule.ЮТЛогирование</content>
|
||||
<content>CommonModule.ЮТЛогированиеВызовСервера</content>
|
||||
<content>CommonModule.ЮТМетаданные</content>
|
||||
<content>CommonModule.ЮТМетаданныеПовтИсп</content>
|
||||
<content>CommonModule.ЮТМетаданныеСервер</content>
|
||||
<content>CommonModule.ЮТОбщий</content>
|
||||
<content>CommonModule.ЮТОбщийВызовСервера</content>
|
||||
<content>CommonModule.ЮТОтчет</content>
|
||||
<content>CommonModule.ЮТОтчетJSON</content>
|
||||
<content>CommonModule.ЮТОтчетJUnit</content>
|
||||
<content>CommonModule.ЮТПараметры</content>
|
||||
<content>CommonModule.ЮТПараметрыЗапуска</content>
|
||||
<content>CommonModule.ЮТПовторногоИспользования</content>
|
||||
<content>CommonModule.ЮТРасширения</content>
|
||||
<content>CommonModule.ЮТРегистрацияОшибок</content>
|
||||
<content>CommonModule.ЮТСобытия</content>
|
||||
<content>CommonModule.ЮТТестовыеДанные</content>
|
||||
<content>CommonModule.ЮТТестовыеДанныеВызовСервера</content>
|
||||
<content>CommonModule.ЮТТестовыеДанныеСлужебный</content>
|
||||
<content>CommonModule.ЮТТесты</content>
|
||||
<content>CommonModule.ЮТУтверждения</content>
|
||||
<content>CommonModule.ЮТФабрика</content>
|
||||
@ -43,5 +49,7 @@
|
||||
<content>CommonPicture.ЮТУпал</content>
|
||||
<content>CommonPicture.ЮТУспешно</content>
|
||||
<content>CommonPicture.ЮТЭлементыТестов</content>
|
||||
<content>DataProcessor.ЮТHTTPСервисЗапрос</content>
|
||||
<content>DataProcessor.ЮТЮнитТесты</content>
|
||||
<content>CommonTemplate.ЮТОписаниеМетаданных</content>
|
||||
</mdclass:Subsystem>
|
||||
|
15
sonar-project.properties
Normal file
@ -0,0 +1,15 @@
|
||||
# must be unique in a given SonarQube instance
|
||||
sonar.projectKey=yaxunit
|
||||
# this is the name displayed in the SonarQube UI
|
||||
sonar.projectName=YAxUnit
|
||||
|
||||
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
|
||||
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
|
||||
# If not set, SonarQube starts looking for source code from the directory containing
|
||||
# the sonar-project.properties file.
|
||||
sonar.sources=./
|
||||
sonar.inclusions=**/*.bsl, **/*.os
|
||||
|
||||
# Encoding of the source code. Default is default system encoding
|
||||
sonar.sourceEncoding=UTF-8
|
||||
sonar.bsl.languageserver.configurationPath=.bsl-language-server.json
|
@ -31,3 +31,19 @@
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
&Вместо("Методы")
|
||||
Функция Расш1_Методы() Экспорт
|
||||
|
||||
ПараметрыМетода = Новый Массив;
|
||||
|
||||
ПрерватьВыполнение = Ложь;
|
||||
Результат = Мокито.АнализВызова(Интеграция, "Методы", ПараметрыМетода, ПрерватьВыполнение);
|
||||
|
||||
Если НЕ ПрерватьВыполнение Тогда
|
||||
Возврат ПродолжитьВызов();
|
||||
Иначе
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
@ -22,7 +22,9 @@
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("Обучение")
|
||||
.ДобавитьТест("Обучение_ЦепочкаВызовов")
|
||||
.ДобавитьТест("Проверить")
|
||||
.ДобавитьТест("Прогон_НакоплениеСтатистики").СПараметрами(Истина).СПараметрами(Ложь)
|
||||
.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов")
|
||||
;
|
||||
|
||||
@ -62,6 +64,24 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Обучение_ЦепочкаВызовов() Экспорт
|
||||
|
||||
Адрес = "service.com";
|
||||
Мокито.Обучение(Интеграция)
|
||||
.Когда("ВыполнитьЗапрос").Вернуть(0)
|
||||
.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(1)
|
||||
.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(2)
|
||||
.Когда(Интеграция.ВыполнитьЗапрос(Адрес)).Вернуть(3)
|
||||
.Прогон();
|
||||
|
||||
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 1").Равно(1);
|
||||
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 2").Равно(2);
|
||||
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 3").Равно(3);
|
||||
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес), "Вызов 4").Равно(3);
|
||||
ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос("Адрес"), "Вызов 5").Равно(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверить() Экспорт
|
||||
|
||||
ЛюбойПараметр = Мокито.ЛюбойПараметр();
|
||||
@ -87,6 +107,17 @@
|
||||
.КоличествоВызовов(Интеграция.ВыполнитьЗапрос(Мокито.ТипизированныйПараметр(Тип("Строка")), ЛюбойПараметр)).Равно(2)
|
||||
;
|
||||
|
||||
ВызовыМетода = Мокито.Проверить(Интеграция).Вызовы("ВыполнитьЗапрос");
|
||||
ЮТест.ОжидаетЧто(ВызовыМетода, "Вызовы метода ВыполнитьЗапрос")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(3)
|
||||
.КаждыйЭлементСодержитСвойствоСоЗначением("Объект", Интеграция)
|
||||
.КаждыйЭлементСодержитСвойствоСоЗначением("ИмяМетода", "ВыполнитьЗапрос")
|
||||
.КаждыйЭлементСодержитСвойство("Параметры")
|
||||
.Свойство("[0].Параметры[0]").Равно("Адрес")
|
||||
.Свойство("[1].Параметры[0]").Равно(Адрес)
|
||||
.Свойство("[2].Параметры[1]").Равно(2);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Если Сервер Тогда
|
||||
@ -165,6 +196,40 @@
|
||||
КонецПроцедуры
|
||||
#КонецЕсли
|
||||
|
||||
Процедура Прогон_НакоплениеСтатистики(НакоплениеСтатистики) Экспорт
|
||||
|
||||
Описание = ?(НакоплениеСтатистики, "Накопление статистики", "Сброс статистки");
|
||||
Адрес = "service.com";
|
||||
|
||||
Мокито.Обучение(Интеграция)
|
||||
.Когда("ВыполнитьЗапрос").Вернуть(1)
|
||||
.Наблюдать("Методы")
|
||||
.Прогон();
|
||||
|
||||
Интеграция.ВыполнитьЗапрос(Адрес);
|
||||
Интеграция.Методы();
|
||||
|
||||
Мокито.Проверить(Интеграция)
|
||||
.КоличествоВызовов("ВыполнитьЗапрос").Равно(1)
|
||||
.КоличествоВызовов("Методы").Равно(1);
|
||||
|
||||
Мокито.Прогон(НЕ НакоплениеСтатистики);
|
||||
|
||||
Интеграция.ВыполнитьЗапрос(Адрес);
|
||||
Интеграция.Методы();
|
||||
|
||||
Если НакоплениеСтатистики Тогда
|
||||
Мокито.Проверить(Интеграция)
|
||||
.КоличествоВызовов("ВыполнитьЗапрос").Равно(2)
|
||||
.КоличествоВызовов("Методы").Равно(2);
|
||||
Иначе
|
||||
Мокито.Проверить(Интеграция)
|
||||
.КоличествоВызовов("ВыполнитьЗапрос").Равно(1)
|
||||
.КоличествоВызовов("Методы").Равно(1);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
@ -16,13 +16,9 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ТестыAPI
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("ВыброситьИсключение")
|
||||
@ -30,10 +26,6 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура ВыброситьИсключение() Экспорт
|
||||
|
||||
Адрес = "service.com";
|
||||
@ -54,7 +46,3 @@
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -16,10 +16,6 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
@ -28,6 +24,7 @@
|
||||
.ДобавитьТест("ДобавитьСтроку")
|
||||
.ДобавитьТест("ОбъединитьВСтруктуру")
|
||||
.ДобавитьТест("СформироватьСтрокуСимволов")
|
||||
.ДобавитьТест("ДанныеСовпадают")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -146,4 +143,35 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДанныеСовпадают() Экспорт
|
||||
|
||||
Массив = ЮТОбщий.ЗначениеВМассиве(1, 2, "3");
|
||||
Структура = Новый Структура("Строка, Число, Массив", "1", 1, Массив);
|
||||
Соответствие = Новый Соответствие();
|
||||
Соответствие.Вставить("Строка", "1");
|
||||
Соответствие.Вставить(2, "Число");
|
||||
Соответствие.Вставить("Массив", Массив);
|
||||
|
||||
Варианты = ЮТест.Варианты("Значение")
|
||||
.Добавить(Массив)
|
||||
.Добавить(Структура)
|
||||
.Добавить(Соответствие)
|
||||
.Добавить(Новый ФиксированныйМассив(Массив))
|
||||
.Добавить(Новый ФиксированнаяСтруктура(Структура))
|
||||
.Добавить(Новый ФиксированноеСоответствие(Соответствие))
|
||||
.СписокВариантов();
|
||||
|
||||
Для Каждого Вариант Из Варианты Цикл
|
||||
|
||||
Описание = Строка(ТипЗнч(Вариант.Значение));
|
||||
|
||||
ЮТест.ОжидаетЧто(
|
||||
ЮТОбщий.ДанныеСовпадают(Вариант.Значение, Вариант.Значение),
|
||||
Описание)
|
||||
.ЭтоИстина();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -16,53 +16,30 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Набор тестов для общего модуля СтроковыеФункцииКлиентСервер
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Набор стандартных методов тестового модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область ТестыAPI
|
||||
|
||||
// ИсполняемыеСценарии
|
||||
// Сервисный метод для получения списка тестовых методов
|
||||
// Параметры:
|
||||
// ДополнительныеПараметры - Структура - Дополнительные параметры, используемые при формировании списка тестов
|
||||
// Возвращаемое значение:
|
||||
// Массив - Имена методов тестов
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
Возврат; // TODO Реанимировать после реализации проброса доп параметров
|
||||
// Добавление теста в тестовый набор по умолчанию с указанием представления теста
|
||||
ЮТТесты.ДобавитьТест("ТестовыйМетод3", "Тестовый метод 3");
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
ЮТТесты.ТестКлиент("ТестовыйМетод4");
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
ЮТТесты.ТестСервер("ТестовыйМетод4");
|
||||
|
||||
ЮТТесты.ТестовыйНабор("ТестовыйНабор")
|
||||
.ДобавитьТест("ТестовыйМетод")
|
||||
.ДобавитьТест("ТестовыйМетод2")
|
||||
.ДобавитьТест("ТестовыйМетод5", , "Тег1");
|
||||
|
||||
// Создание тестового набора со списком тегов
|
||||
ЮТТесты.ТестовыйНабор("Тестовый набор 2", "Тег1, Тег2")
|
||||
|
||||
// Добавление теста в созданный тестовый набор с указанием тегов, которые будут объединены с тегами набора
|
||||
.ДобавитьТест("ТестовыйМетод6", , "Тег5, Тег6");
|
||||
ЮТТесты
|
||||
// Добавление теста в тестовый набор по умолчанию с указанием представления теста
|
||||
.ДобавитьТест("ТестовыйМетод3", "Тестовый метод 3")
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
.ДобавитьКлиентскийТест("ТестовыйМетод4")
|
||||
// Добавление теста для клиента в тестовый набор по умолчанию
|
||||
.ДобавитьСерверныйТест("ТестовыйМетод4")
|
||||
|
||||
.ДобавитьТестовыйНабор("ТестовыйНабор")
|
||||
.ДобавитьТест("ТестовыйМетод")
|
||||
.ДобавитьТест("ТестовыйМетод2")
|
||||
.ДобавитьТест("ТестовыйМетод5", , "Тег1")
|
||||
// Создание тестового набора со списком тегов
|
||||
.ДобавитьТестовыйНабор("Тестовый набор 2", "Тег1, Тег2")
|
||||
// Добавление теста в созданный тестовый набор с указанием тегов, которые будут объединены с тегами набора
|
||||
.ДобавитьТест("ТестовыйМетод6", , "Тег5, Тег6");
|
||||
|
||||
ВызватьИсключение "Ошибка загрузки сценариев";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Реализация тестов
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область Тесты
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -16,10 +16,6 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
@ -33,10 +29,10 @@
|
||||
|
||||
Процедура ЗаполнитьСправочник() Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Справочники.Товары);
|
||||
#Иначе
|
||||
#Если Клиент Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары");
|
||||
#Иначе
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Справочники.Товары);
|
||||
#КонецЕсли
|
||||
|
||||
Конструктор
|
||||
@ -53,7 +49,7 @@
|
||||
.Свойство("Вид").Заполнено();
|
||||
|
||||
Ссылка = Конструктор.Записать();
|
||||
#Если Сервер Тогда
|
||||
#Если НЕ Клиент Тогда
|
||||
ЮТест.ОжидаетЧто(Ссылка, "Созданный объект")
|
||||
.Заполнено()
|
||||
.ИмеетТип("СправочникСсылка.Товары")
|
||||
@ -67,10 +63,10 @@
|
||||
|
||||
Процедура ЗаполнитьДокумент() Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
|
||||
#Иначе
|
||||
#Если Клиент Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
|
||||
#Иначе
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
|
||||
#КонецЕсли
|
||||
|
||||
Ссылка = Конструктор
|
||||
@ -91,7 +87,7 @@
|
||||
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
|
||||
.Провести();
|
||||
|
||||
#Если Сервер Тогда
|
||||
#Если НЕ Клиент Тогда
|
||||
ЮТест.ОжидаетЧто(Ссылка, "Созданный объект")
|
||||
.Заполнено()
|
||||
.ИмеетТип("ДокументСсылка.ПриходТовара")
|
||||
@ -114,7 +110,3 @@
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
59
ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
Normal file
@ -0,0 +1,59 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("Удалить");
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Удалить() Экспорт
|
||||
|
||||
Ссылки = Новый Массив;
|
||||
Ссылки.Добавить(ЮТест.Данные().СоздатьЭлемент("Справочники.Банки"));
|
||||
Ссылки.Добавить(ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара"));
|
||||
Ссылки.Добавить(
|
||||
ЮТест.Данные()
|
||||
.КонструкторОбъекта("Документы.ПриходТовара")
|
||||
.Провести()
|
||||
);
|
||||
|
||||
Для Каждого Ссылка Из Ссылки Цикл
|
||||
|
||||
СсылкаСуществует = ПомощникТестированияВызовСервера.СсылкаСуществует(Ссылка);
|
||||
ЮТест.ОжидаетЧто(СсылкаСуществует, "Ссылка на несуществующий объект").ЭтоИстина();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТТестовыеДанные.Удалить(Ссылки);
|
||||
|
||||
Для Каждого Ссылка Из Ссылки Цикл
|
||||
|
||||
СсылкаСуществует = ПомощникТестированияВызовСервера.СсылкаСуществует(Ссылка);
|
||||
ЮТест.ОжидаетЧто(СсылкаСуществует, "Объект не удален по ссылке").ЭтоЛожь();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="87209e33-355d-4495-9c74-f774c7572055">
|
||||
<name>ОМ_ЮТТестовыеДанные</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>О м тестовые данные</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -16,10 +16,6 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
@ -40,7 +36,7 @@
|
||||
.СПараметрами(Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыХарактеристик, СправочникСсылка.Банки, ПеречислениеСсылка.СостоянияЗаказов"))
|
||||
.СПараметрами(Новый ОписаниеТипов("ВидДвиженияНакопления"))
|
||||
;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Фикция(ОписаниеТипа) Экспорт
|
||||
@ -55,6 +51,3 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -16,13 +16,9 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("СПараметрами")
|
||||
|
@ -16,15 +16,8 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Область ТестыAPI
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
@ -77,10 +70,6 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура Что() Экспорт
|
||||
|
||||
ЮТУтверждения.Что(1, "Проверяемый контекст");
|
||||
@ -270,7 +259,7 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Метод() Экспорт
|
||||
Процедура Метод() Экспорт
|
||||
|
||||
ЮТУтверждения.Что(ОМ_ЮТУтверждения, "Контекст метода")
|
||||
.Метод("МетодБезИсключение");
|
||||
@ -2020,8 +2009,6 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ПроверитьОшибкуУтверждения(ИнформацияОбОшибке, ОжидаемоеОписание)
|
||||
|
@ -16,26 +16,18 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ТестыAPI
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("ЭтоПодходящееРасширение")
|
||||
.ДобавитьТест("ЭтоПодходящийМодуль")
|
||||
.ДобавитьТест("ОтфильтроватьТестовыеНаборы")
|
||||
;
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Тесты
|
||||
|
||||
Процедура ЭтоПодходящееРасширение() Экспорт
|
||||
|
||||
Варианты = Новый Массив();
|
||||
@ -228,6 +220,3 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("ИсполняемыеСценарииМодуля")
|
||||
@ -93,7 +93,7 @@
|
||||
|
||||
Наборы = ЮТЧитатель.ЗагрузитьТесты(ПараметрыЗапуска);
|
||||
ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests")
|
||||
.ИмеетДлину(11);
|
||||
.ИмеетДлину(13);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -117,7 +117,7 @@
|
||||
.Элемент(1).ИмеетТип("Структура")
|
||||
.Элемент(2).ИмеетТип("Структура")
|
||||
;
|
||||
|
||||
|
||||
НаборПоУмолчанию = Сценарии[0];
|
||||
НаборЭтоТестовыйМодуль = Сценарии[1];
|
||||
НаборЗагрузкаТестов = Сценарии[2];
|
||||
@ -157,7 +157,3 @@
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -16,13 +16,9 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("Пропустить")
|
||||
@ -97,6 +93,3 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -0,0 +1,87 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("Конструктор")
|
||||
.ДобавитьТест("УстановитьТело")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Конструктор() Экспорт
|
||||
|
||||
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
|
||||
.ДобавитьЗаголовок("Заголовок", "Заголовок")
|
||||
.ДобавитьПараметрЗапроса("Параметр1", 1)
|
||||
.ДобавитьПараметрURL("Параметр2", 2)
|
||||
.Метод("GET");
|
||||
|
||||
ЮТест.ОжидаетЧто(Запрос)
|
||||
.Свойство("HTTPМетод").Равно("GET")
|
||||
.Свойство("Заголовки.Заголовок").Равно("Заголовок")
|
||||
.Свойство("ПараметрыЗапроса.Параметр1").Равно(1)
|
||||
.Свойство("ПараметрыURL.Параметр2").Равно(2);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьТело() Экспорт
|
||||
|
||||
Описание = "Тело не установлено";
|
||||
|
||||
Запрос = ЮТест.Данные().HTTPСервисЗапрос();
|
||||
ЮТест.ОжидаетЧто(Запрос, Описание)
|
||||
.Метод("ПолучитьТелоКакДвоичныеДанные").НеВыбрасываетИсключение()
|
||||
.Метод("ПолучитьТелоКакПоток").НеВыбрасываетИсключение()
|
||||
.Метод("ПолучитьТелоКакСтроку").НеВыбрасываетИсключение()
|
||||
.Метод("ПолучитьТелоКакСтроку", ЮТОбщий.ЗначениеВМассиве(КодировкаТекста.UTF8)).НеВыбрасываетИсключение();
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку()).Равно("");
|
||||
|
||||
Тело = "Тело";
|
||||
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Тело);
|
||||
|
||||
Описание = "Тело установлено из двоичных данных";
|
||||
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
|
||||
.УстановитьТелоКакДвоичныеДанные(ДвоичныеДанные);
|
||||
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакДвоичныеДанные(), Описание + ". Получение двоичных данных").Равно(ДвоичныеДанные);
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно(Тело);
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку("UTF-8"), Описание + ". Получение строки UTF-8").Равно(Тело);
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакПоток(), Описание + ". Получение потока").ИмеетТип("Поток");
|
||||
|
||||
Описание = "Тело установлено из строки";
|
||||
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
|
||||
.УстановитьТелоКакСтроку(Тело);
|
||||
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакДвоичныеДанные(), Описание + ". Получение двоичных данных").Равно(ДвоичныеДанные);
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно(Тело);
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку("UTF-8"), Описание + ". Получение строки UTF-8").Равно(Тело);
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакПоток(), Описание + ". Получение потока").ИмеетТип("Поток");
|
||||
|
||||
Описание = "Тело установлено из JSON";
|
||||
Запрос = ЮТест.Данные().HTTPСервисЗапрос()
|
||||
.УстановитьТелоКакСтрокуJSON(Новый Массив());
|
||||
ЮТест.ОжидаетЧто(Запрос.ПолучитьТелоКакСтроку(), Описание + ". Получение строки").Равно("[]");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2d597d20-67f3-47c7-96e0-c0e0241f0e9b">
|
||||
<name>Обр_ЮТHTTPСервисЗапрос</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Обр HTTPСервис запрос</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
</mdclass:CommonModule>
|
@ -0,0 +1,37 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// ПрограммныйИнтерфейс
|
||||
// Экспортные процедуры и функции для прикладного использования
|
||||
///////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция СсылкаСуществует(Знач Ссылка) Экспорт
|
||||
|
||||
ИмяТаблицы = Ссылка.Метаданные().ПолноеИмя();
|
||||
|
||||
ТекстЗапроса = СтрШаблон("ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ %1 ГДЕ Ссылка = &Ссылка", ИмяТаблицы);
|
||||
Запрос = Новый Запрос(ТекстЗапроса);
|
||||
Запрос.УстановитьПараметр("Ссылка", Ссылка);
|
||||
|
||||
Возврат НЕ Запрос.Выполнить().Пустой();
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="88f72d9b-2cef-4ea0-882b-50bc299dfa4e">
|
||||
<name>ПомощникТестированияВызовСервера</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Помощник тестирования вызов сервера</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<serverCall>true</serverCall>
|
||||
</mdclass:CommonModule>
|
@ -24,17 +24,20 @@
|
||||
<languageCode>ru</languageCode>
|
||||
</languages>
|
||||
<commonModules>CommonModule.Интеграция</commonModules>
|
||||
<commonModules>CommonModule.Обр_ЮТHTTPСервисЗапрос</commonModules>
|
||||
<commonModules>CommonModule.ОМ_Мокито</commonModules>
|
||||
<commonModules>CommonModule.ОМ_МокитоОбучение</commonModules>
|
||||
<commonModules>CommonModule.ОМ_Общий</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ОшибкаЗагрузкиСценариев</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТест</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТКонструкторТестовыхДанных</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТестовыеДанные</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТестовыеДанныеСлужебный</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТесты</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТУтверждения</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТФильтрация</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТЧитатель</commonModules>
|
||||
<commonModules>CommonModule.ПомощникТестированияВызовСервера</commonModules>
|
||||
<catalogs>Catalog.Встречи</catalogs>
|
||||
<catalogs>Catalog.Товары</catalogs>
|
||||
<documents>Document.ПриходТовара</documents>
|
||||
|