mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-03-29 21:21:08 +02:00
Запустил тесты в асинхронном режиме
This commit is contained in:
parent
9b89c46fcc
commit
cb5a68f126
@ -1,409 +0,0 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#Если Клиент Тогда
|
||||
|
||||
// ВыполнитьМодульноеТестирование
|
||||
// Метод, по параметрам запуска, запускает выполнение всего процесса тестирования.
|
||||
//
|
||||
// Параметры:
|
||||
// Параметры - См. ЮТФабрика.ПараметрыЗапуска
|
||||
Процедура ВыполнитьМодульноеТестирование(Параметры = Неопределено) Экспорт
|
||||
|
||||
Если Параметры = Неопределено Тогда
|
||||
Параметры = ЮТПараметрыЗапуска.ПараметрыЗапуска(ПараметрЗапуска, Неопределено);
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ Параметры.ВыполнятьМодульноеТестирование Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ЮТКонтекст.ИнициализироватьКонтекст();
|
||||
ЮТКонтекст.УстановитьГлобальныеНастройкиВыполнения(Параметры.settings);
|
||||
ЮТСобытия.Инициализация(Параметры);
|
||||
// Повторно сохраним для передачи на сервер
|
||||
ЮТКонтекст.УстановитьГлобальныеНастройкиВыполнения(ЮТКонтекст.ГлобальныеНастройкиВыполнения());
|
||||
ЮТКонтекст.УстановитьКонтекстИсполнения(ЮТФабрика.НовыйКонтекстИсполнения());
|
||||
|
||||
ЮТСобытия.ПередЧтениеСценариев();
|
||||
ТестовыеМодули = ЮТЧитатель.ЗагрузитьТесты(Параметры);
|
||||
ЮТСобытия.ПослеЧтенияСценариев(ТестовыеМодули);
|
||||
|
||||
РезультатыТестирования = Новый Массив();
|
||||
|
||||
КоллекцияКатегорийНаборов = Новый Массив();
|
||||
Для Каждого ТестовыйМодуль Из ТестовыеМодули Цикл
|
||||
|
||||
КатегорииНаборов = КатегорииНаборовТестовМодуля(ТестовыйМодуль);
|
||||
КоллекцияКатегорийНаборов.Добавить(КатегорииНаборов);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТСобытия.ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов);
|
||||
|
||||
Для Каждого КатегорииНаборов Из КоллекцияКатегорийНаборов Цикл
|
||||
|
||||
Результат = ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Клиентские, КатегорииНаборов.ТестовыйМодуль);
|
||||
ЮТОбщий.ДополнитьМассив(РезультатыТестирования, Результат);
|
||||
|
||||
Результат = ЮТИсполнительСервер.ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Серверные, КатегорииНаборов.ТестовыйМодуль);
|
||||
ЮТЛогирование.ВывестиСерверныеСообщения();
|
||||
|
||||
ЮТОбщий.ДополнитьМассив(РезультатыТестирования, Результат);
|
||||
|
||||
ЮТОбщий.ДополнитьМассив(РезультатыТестирования, КатегорииНаборов.Пропущенные);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТОтчет.СформироватьОтчет(РезультатыТестирования, Параметры);
|
||||
|
||||
ЗаписатьКодВозврата(РезультатыТестирования, Параметры);
|
||||
|
||||
Если Параметры.showReport Тогда
|
||||
ПоказатьОтчет(РезультатыТестирования, Параметры);
|
||||
ИначеЕсли Параметры.CloseAfterTests Тогда
|
||||
ПрекратитьРаботуСистемы(Ложь);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецЕсли
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Выполняет тесты группы наборов, соответствующих одному режиму выполнения (клиент/сервер)
|
||||
// Параметры:
|
||||
// Наборы - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов - Результат прогона наборов тестов с заполненной информацией о выполнении
|
||||
Функция ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль) Экспорт
|
||||
|
||||
Если Наборы.Количество() = 0 Тогда
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПередВсемиТестамиМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки);
|
||||
Возврат Наборы;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из Наборы Цикл
|
||||
|
||||
Результат = ВыполнитьНаборТестов(Набор, ТестовыйМодуль);
|
||||
|
||||
Если Результат <> Неопределено Тогда
|
||||
Набор.Тесты = Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Модуль;
|
||||
|
||||
ЮТСобытия.ПослеВсехТестовМодуля(ТестовыйМодуль);
|
||||
|
||||
Если ЕстьОшибки(ТестовыйМодуль) Тогда
|
||||
СкопироватьОшибкиВ(Наборы, ТестовыйМодуль.Ошибки);
|
||||
КонецЕсли;
|
||||
|
||||
ТестовыйМодуль.Ошибки.Очистить(); // Эти ошибки используются как буфер и уже скопированы в наборы, но ломают последующие наборы
|
||||
|
||||
Возврат Наборы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ВыполнитьНаборТестов(Набор, ТестовыйМодуль)
|
||||
|
||||
Уровни = ЮТФабрика.УровниИсполнения();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
|
||||
Набор.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
ЮТСобытия.ПередТестовымНабором(ТестовыйМодуль, Набор);
|
||||
|
||||
Если ЕстьОшибки(Набор) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Результаты = Новый Массив();
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.Тест;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
Тест.ДатаСтарта = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
|
||||
ЮТСобытия.ПередКаждымТестом(ТестовыйМодуль, Набор, Тест);
|
||||
ВыполнитьТестовыйМетод(Тест);
|
||||
ЮТСобытия.ПослеКаждогоТеста(ТестовыйМодуль, Набор, Тест);
|
||||
|
||||
ОбработатьЗавершениеТеста(Тест);
|
||||
|
||||
Результаты.Добавить(Тест);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЮТКонтекст.КонтекстИсполнения().Уровень = Уровни.НаборТестов;
|
||||
ЮТСобытия.ПослеТестовогоНабора(ТестовыйМодуль, Набор);
|
||||
|
||||
Набор.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Набор.ДатаСтарта;
|
||||
|
||||
Возврат Результаты;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОбработатьЗавершениеТеста(Тест)
|
||||
|
||||
Тест.Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Тест.ДатаСтарта;
|
||||
Тест.Статус = ЮТРегистрацияОшибок.СтатусВыполненияТеста(Тест);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КатегорииНаборовТестовМодуля(ТестовыйМодуль)
|
||||
|
||||
КатегорииНаборов = ОписаниеКатегорияНабораТестов(ТестовыйМодуль);
|
||||
|
||||
ИсполняемыеТестовыеНаборы = Новый Массив;
|
||||
|
||||
Для Каждого ТестовыйНабор Из ТестовыйМодуль.НаборыТестов Цикл
|
||||
|
||||
НаборыКонтекстов = Новый Структура;
|
||||
|
||||
ТестыНабора = ЮТОбщий.ЗначениеСтруктуры(ТестовыйНабор, "Тесты", Новый Массив());
|
||||
|
||||
Для Каждого Тест Из ТестыНабора Цикл
|
||||
|
||||
Для Каждого Контекст Из Тест.КонтекстВызова Цикл
|
||||
|
||||
Если НЕ НаборыКонтекстов.Свойство(Контекст) Тогда
|
||||
ИсполняемыйНабор = ЮТФабрика.ОписаниеИсполняемогоНабораТестов(ТестовыйНабор, ТестовыйМодуль);
|
||||
ИсполняемыйНабор.Режим = Контекст;
|
||||
НаборыКонтекстов.Вставить(Контекст, ИсполняемыйНабор);
|
||||
Иначе
|
||||
ИсполняемыйНабор = НаборыКонтекстов[Контекст];
|
||||
КонецЕсли;
|
||||
|
||||
ИсполняемыйТест = ЮТФабрика.ОписаниеИсполняемогоТеста(Тест, Контекст, ТестовыйМодуль);
|
||||
ИсполняемыйНабор.Тесты.Добавить(ИсполняемыйТест);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если НаборыКонтекстов.Количество() Тогда
|
||||
|
||||
Для Каждого Элемент Из НаборыКонтекстов Цикл
|
||||
ИсполняемыеТестовыеНаборы.Добавить(Элемент.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
// TODO. Корякин А. 2021.11.24 А надо ли добавлять при отсутствии тестов
|
||||
ИсполняемыеТестовыеНаборы.Добавить(ЮТФабрика.ОписаниеИсполняемогоНабораТестов(ТестовыйНабор, ТестовыйМодуль));
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонтекстыПриложения = ЮТФабрика.КонтекстыПриложения();
|
||||
КонтекстыМодуля = ЮТФабрика.КонтекстыМодуля(ТестовыйМодуль.МетаданныеМодуля);
|
||||
КонтекстыИсполнения = ЮТФабрика.КонтекстыИсполнения();
|
||||
|
||||
Для Каждого Набор Из ИсполняемыеТестовыеНаборы Цикл
|
||||
|
||||
КонтекстИсполнения = ЮТФабрика.КонтекстИсполнения(Набор.Режим);
|
||||
|
||||
ОшибкаКонтекста = Неопределено;
|
||||
Если КонтекстыПриложения.Найти(Набор.Режим) = Неопределено Тогда
|
||||
ОшибкаКонтекста = "Неподдерживаемый режим запуска";
|
||||
ИначеЕсли КонтекстыМодуля.Найти(Набор.Режим) = Неопределено Тогда
|
||||
ОшибкаКонтекста = "Модуль не доступен в этом контексте";
|
||||
ИначеЕсли КонтекстИсполнения <> КонтекстыИсполнения.Сервер И КонтекстИсполнения <> КонтекстыИсполнения.Клиент Тогда
|
||||
ОшибкаКонтекста = "Неизвестный контекст/режим исполнения";
|
||||
КонецЕсли;
|
||||
|
||||
Если ОшибкаКонтекста <> Неопределено Тогда
|
||||
Набор.Выполнять = Ложь;
|
||||
ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуРежимаВыполнения(Набор, ОшибкаКонтекста);
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуРежимаВыполнения(Тест, ОшибкаКонтекста);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ Набор.Выполнять Тогда
|
||||
КатегорииНаборов.Пропущенные.Добавить(Набор);
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если КонтекстИсполнения = КонтекстыИсполнения.Сервер Тогда
|
||||
|
||||
КатегорииНаборов.Серверные.Добавить(Набор);
|
||||
|
||||
ИначеЕсли КонтекстИсполнения = КонтекстыИсполнения.Клиент Тогда
|
||||
|
||||
КатегорииНаборов.Клиентские.Добавить(Набор);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат КатегорииНаборов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЕстьОшибки(Объект)
|
||||
|
||||
Возврат ЗначениеЗаполнено(Объект.Ошибки);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ВыполнитьТестовыйМетод(Тест)
|
||||
|
||||
Если ЕстьОшибки(Тест) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
СтатусыИсполненияТеста = ЮТФабрика.СтатусыИсполненияТеста();
|
||||
Тест.Статус = СтатусыИсполненияТеста.Исполнение;
|
||||
|
||||
Ошибка = ЮТОбщий.ВыполнитьМетод(Тест.ПолноеИмяМетода, Тест.Параметры);
|
||||
|
||||
Если Ошибка <> Неопределено Тогда
|
||||
ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуВыполненияТеста(Тест, Ошибка);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СкопироватьОшибкиВ(Объекты, Ошибки)
|
||||
|
||||
Для Каждого Объект Из Объекты Цикл
|
||||
|
||||
ЮТОбщий.ДополнитьМассив(Объект.Ошибки, Ошибки);
|
||||
|
||||
Если Объект.Свойство("Статус") Тогда
|
||||
Объект.Статус = ЮТФабрика.СтатусыИсполненияТеста().Сломан;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Описание категория набора тестов.
|
||||
//
|
||||
// Параметры:
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание категория набора тестов:
|
||||
// * ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
// * Клиентские - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Серверные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Пропущенные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль)
|
||||
|
||||
КатегорииНаборов = Новый Структура();
|
||||
КатегорииНаборов.Вставить("ТестовыйМодуль", ТестовыйМодуль);
|
||||
КатегорииНаборов.Вставить("Клиентские", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Серверные", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Пропущенные", Новый Массив());
|
||||
|
||||
Возврат КатегорииНаборов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Если Клиент Тогда
|
||||
Процедура ПоказатьОтчет(РезультатыТестирования, Параметры)
|
||||
|
||||
Данные = Новый Структура("РезультатыТестирования, ПараметрыЗапуска", РезультатыТестирования, Параметры);
|
||||
АдресДанных = ПоместитьВоВременноеХранилище(Данные);
|
||||
|
||||
ОткрытьФорму("Обработка.ЮТЮнитТесты.Форма.Основная", Новый Структура("АдресХранилища", АдресДанных));
|
||||
|
||||
КонецПроцедуры
|
||||
#КонецЕсли
|
||||
|
||||
// Записать код возврата.
|
||||
//
|
||||
// Параметры:
|
||||
// РезультатыТестирования - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// Параметры - см. ЮТФабрика.ПараметрыЗапуска
|
||||
Процедура ЗаписатьКодВозврата(РезультатыТестирования, Параметры)
|
||||
|
||||
Успешно = Истина;
|
||||
|
||||
Если ПустаяСтрока(Параметры.exitCode) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из РезультатыТестирования Цикл
|
||||
|
||||
Если ЕстьОшибки(Набор) Тогда
|
||||
Успешно = Ложь;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
Если ЕстьОшибки(Тест) Тогда
|
||||
Успешно = Ложь;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если НЕ Успешно Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
#Если ВебКлиент Тогда
|
||||
ЮТОбщий.МетодНеДоступен("ЮТИсполнитель.ЗаписатьКодВозврата");
|
||||
#Иначе
|
||||
Запись = Новый ЗаписьТекста(Параметры.exitCode, КодировкаТекста.UTF8);
|
||||
Запись.ЗаписатьСтроку(?(Успешно, 0, 1));
|
||||
Запись.Закрыть();
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -27,18 +27,38 @@
|
||||
ПараметрыИсполнения = ПараметрыИсполнения();
|
||||
ПараметрыИсполнения.АргументыЗапуска = ПараметрЗапуска;
|
||||
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ОбработчикЗагрузитьПараметры", ЭтотОбъект, ПараметрыИсполнения));
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ОбработчикАнализПараметровЗапуска", ЭтотОбъект, ПараметрыИсполнения));
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ОбработчикЗагрузитьТесты", ЭтотОбъект, ПараметрыИсполнения));
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ОбработчикВыполнитьТестирование", ЭтотОбъект, ПараметрыИсполнения));
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ОбработчикСохранитьОтчет", ЭтотОбъект, ПараметрыИсполнения));
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ОбработчикСохранитьКодВозврата", ЭтотОбъект, ПараметрыИсполнения));
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Новый ОписаниеОповещения("ОбработчикЗавершить", ЭтотОбъект, ПараметрыИсполнения));
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьПараметры");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикАнализПараметровЗапуска");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗагрузитьТесты");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикВыполнитьТестирование");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьОтчет");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикСохранитьКодВозврата");
|
||||
ДобавитьОбработчикЦепочки(ПараметрыИсполнения, "ОбработчикЗавершить");
|
||||
|
||||
ВызватьСледующийОбработчик(ПараметрыИсполнения);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВызватьОбработчик(Обработчик, Результат = Неопределено) Экспорт
|
||||
|
||||
Если Обработчик <> Неопределено Тогда
|
||||
ВыполнитьОбработкуОповещения(Обработчик, Результат);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#Область ОбработчикиЦепочкиДействий
|
||||
|
||||
Процедура ОбработчикОшибки(ИнформацияОбОшибки, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт
|
||||
|
||||
// TODO Подумать надо ли и как реализовать нормально
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикЗагрузитьПараметры(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Обработчик = СледующийОбработчик(ДополнительныеПараметры);
|
||||
@ -94,7 +114,7 @@
|
||||
|
||||
Для Каждого КатегорииНаборов Из КоллекцияКатегорийНаборов Цикл
|
||||
|
||||
Результат = Новый Массив;// ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Клиентские, КатегорииНаборов.ТестовыйМодуль);
|
||||
Результат = ЮТИсполнительКлиентСервер.ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Клиентские, КатегорииНаборов.ТестовыйМодуль);
|
||||
ЮТОбщий.ДополнитьМассив(РезультатыТестирования, Результат);
|
||||
|
||||
Результат = ЮТИсполнительСервер.ВыполнитьГруппуНаборовТестов(КатегорииНаборов.Серверные, КатегорииНаборов.ТестовыйМодуль);
|
||||
@ -113,13 +133,18 @@
|
||||
|
||||
Процедура ОбработчикСохранитьОтчет(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Обработчик = СледующийОбработчик(ДополнительныеПараметры);
|
||||
ЮТОтчет.СформироватьОтчет(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска, Обработчик);
|
||||
Если ЗначениеЗаполнено(ДополнительныеПараметры.ПараметрыЗапуска.reportPath) Тогда
|
||||
Обработчик = СледующийОбработчик(ДополнительныеПараметры);
|
||||
ЮТОтчет.СформироватьОтчет(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска, Обработчик);
|
||||
Иначе
|
||||
ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработчикСохранитьКодВозврата(Результат, ДополнительныеПараметры) Экспорт
|
||||
|
||||
ЗаписатьКодВозврата(ДополнительныеПараметры.РезультатыТестирования, ДополнительныеПараметры.ПараметрыЗапуска);
|
||||
ВызватьСледующийОбработчик(ДополнительныеПараметры);
|
||||
|
||||
КонецПроцедуры
|
||||
@ -136,18 +161,8 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВызватьОбработчик(Обработчик, Результат) Экспорт
|
||||
|
||||
Если Обработчик <> Неопределено Тогда
|
||||
ВыполнитьОбработкуОповещения(Обработчик, Результат);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ВызватьСледующийОбработчик(ПараметрыИсполнения, Результат = Неопределено)
|
||||
|
||||
Обработчик = СледующийОбработчик(ПараметрыИсполнения);
|
||||
@ -162,6 +177,13 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьОбработчикЦепочки(ПараметрыИсполнения, ИмяМетода)
|
||||
|
||||
Обработчик = Новый ОписаниеОповещения(ИмяМетода, ЭтотОбъект, ПараметрыИсполнения, "ОбработчикОшибки", ЭтотОбъект);
|
||||
ПараметрыИсполнения.Цепочка.Добавить(Обработчик);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПараметрыИсполнения()
|
||||
|
||||
Параметры = Новый Структура();
|
||||
@ -171,13 +193,14 @@
|
||||
Параметры.Вставить("ИндексСледующегоОбработчика", -1);
|
||||
Параметры.Вставить("КоллекцияКатегорийНаборов");
|
||||
Параметры.Вставить("РезультатыТестирования");
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КатегорииНаборовТестовМодуля(ТестовыйМодуль)
|
||||
|
||||
КатегорииНаборов = ОписаниеКатегорияНабораТестов(ТестовыйМодуль);
|
||||
КатегорииНаборов = ЮТФабрика.ОписаниеКатегорияНабораТестов(ТестовыйМодуль);
|
||||
|
||||
ИсполняемыеТестовыеНаборы = Новый Массив;
|
||||
|
||||
@ -267,29 +290,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Описание категория набора тестов.
|
||||
//
|
||||
// Параметры:
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание категория набора тестов:
|
||||
// * ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
// * Клиентские - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Серверные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Пропущенные - Массив из ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль)
|
||||
|
||||
КатегорииНаборов = Новый Структура();
|
||||
КатегорииНаборов.Вставить("ТестовыйМодуль", ТестовыйМодуль);
|
||||
КатегорииНаборов.Вставить("Клиентские", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Серверные", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Пропущенные", Новый Массив());
|
||||
|
||||
Возврат КатегорииНаборов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПоказатьОтчет(РезультатыТестирования, Параметры)
|
||||
|
||||
Данные = Новый Структура("РезультатыТестирования, ПараметрыЗапуска", РезультатыТестирования, Параметры);
|
||||
@ -299,4 +299,49 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Записать код возврата.
|
||||
//
|
||||
// Параметры:
|
||||
// РезультатыТестирования - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// Параметры - см. ЮТФабрика.ПараметрыЗапуска
|
||||
Процедура ЗаписатьКодВозврата(РезультатыТестирования, Параметры)
|
||||
|
||||
Успешно = Истина;
|
||||
|
||||
Если ПустаяСтрока(Параметры.exitCode) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Набор Из РезультатыТестирования Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(Набор.Ошибки) Тогда
|
||||
Успешно = Ложь;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Тест Из Набор.Тесты Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(Тест.Ошибки) Тогда
|
||||
Успешно = Ложь;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если НЕ Успешно Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
#Если ВебКлиент Тогда
|
||||
ЮТОбщий.МетодНеДоступен("ЮТИсполнительКлиент.ЗаписатьКодВозврата");
|
||||
#Иначе
|
||||
Запись = Новый ЗаписьТекста(Параметры.exitCode, КодировкаТекста.UTF8);
|
||||
Запись.ЗаписатьСтроку(?(Успешно, 0, 1));
|
||||
Запись.Закрыть();
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -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 @@
|
||||
// Массив - Результат прогона наборов тестов, структура набора см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ВыполнитьГруппуНаборовТестов(Знач Наборы, Знач ТестовыйМодуль) Экспорт
|
||||
|
||||
Возврат ЮТИсполнитель.ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль);
|
||||
Возврат ЮТИсполнительКлиентСервер.ВыполнитьГруппуНаборовТестов(Наборы, ТестовыйМодуль);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
#КонецОбласти
|
||||
|
@ -109,6 +109,7 @@
|
||||
// Неопределено - Если метод вызывается за рамками теста
|
||||
Функция КонтекстТеста() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаТеста());
|
||||
|
||||
КонецФункции
|
||||
@ -127,6 +128,7 @@
|
||||
// Неопределено - Если метод вызывается за рамками тестового набора
|
||||
Функция КонтекстНабора() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаНабораТестов());
|
||||
|
||||
КонецФункции
|
||||
@ -141,6 +143,7 @@
|
||||
// Неопределено - Если метод вызывается за рамками тестового модуля
|
||||
Функция КонтекстМодуля() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаМодуля());
|
||||
|
||||
КонецФункции
|
||||
@ -165,6 +168,7 @@
|
||||
// Неопределено, Структура - Контекст ошибки, см. ЮТРегистрацияОшибок.НовыйКонтекстОшибки
|
||||
Функция КонтекстОшибки() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаОшибки());
|
||||
|
||||
КонецФункции
|
||||
@ -175,6 +179,7 @@
|
||||
// Неопределено, Структура - Контекст проверки
|
||||
Функция КонтекстПроверки() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаУтверждений());
|
||||
|
||||
КонецФункции
|
||||
@ -185,6 +190,7 @@
|
||||
// Неопределено, Структура - Контекст проверки
|
||||
Функция КонтекстЧитателя() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаЧитателя());
|
||||
|
||||
КонецФункции
|
||||
@ -192,9 +198,10 @@
|
||||
// КонтекстЧитателя
|
||||
// Возвращает служебный контекста, данные используемые исполнителем тестов
|
||||
// Возвращаемое значение:
|
||||
// см. ЮТИсполнитель.ДанныеКонтекстаИсполнения
|
||||
// см. ЮТФабрика.НовыйКонтекстИсполнения
|
||||
Функция КонтекстИсполнения() Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЗначениеКонтекста(ИмяКонтекстаИсполнения());
|
||||
|
||||
КонецФункции
|
||||
|
@ -158,7 +158,7 @@
|
||||
|
||||
// Обработка события "ПослеФормированияИсполняемыхНаборовТестов"
|
||||
// Параметры:
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТИсполнитель.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТФабрика.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
Процедура ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов) Экспорт
|
||||
|
||||
Количество = 0;
|
||||
|
@ -727,8 +727,8 @@
|
||||
// Булево - Это каталог
|
||||
Функция ЭтоКаталог(ПутьКФайлу) Экспорт
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
Возврат Файл.Существует() И Файл.ЭтоКаталог();
|
||||
ВызовУстаревшегоМетода("ЮТОбщий.ЭтоКаталог", "ЮТФайлы.ЭтоКаталог");
|
||||
Возврат ЮТФайлы.Существует(ПутьКФайлу) И ЮТФайлы.ЭтоКаталог(ПутьКФайлу);
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
// Экспортные процедуры и функции, предназначенные для использования другими
|
||||
// объектами конфигурации или другими программами
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// СформироватьОтчет
|
||||
// Формирует отчет о результатах тестирования по заданным параметрам
|
||||
@ -30,77 +30,84 @@
|
||||
// Обработчик - ОписаниеОповещения
|
||||
Процедура СформироватьОтчет(РезультатВыполнения, ПараметрыЗапуска, Обработчик) Экспорт
|
||||
|
||||
Модули = ЮТРасширения.ГенераторыОтчетов();
|
||||
МодульОтчета = Неопределено;
|
||||
Если НЕ ЗначениеЗаполнено(ПараметрыЗапуска.reportPath) Тогда
|
||||
ВызватьИсключение "Не указан путь сохранения отчета";
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Модуль Из Модули Цикл
|
||||
|
||||
Если Модуль.РеализуетФормат(ПараметрыЗапуска.reportFormat) Тогда
|
||||
МодульОтчета = Модуль;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
МодульОтчета = МодульФормирования(ПараметрыЗапуска.reportFormat);
|
||||
|
||||
Если МодульОтчета = Неопределено Тогда
|
||||
|
||||
ВызватьИсключение СтрШаблон("Отчет в формате %1 не поддерживается", ПараметрыЗапуска.reportFormat);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИмяФайлаОтчета = ИмяФайлаОтчета(Модуль, ПараметрыЗапуска);
|
||||
ДанныеОтчета = Модуль.ДанныеОтчета(РезультатВыполнения);
|
||||
ПараметрыФормирования = Новый Структура("РезультатВыполнения, ПараметрыЗапуска, Обработчик", РезультатВыполнения, ПараметрыЗапуска, Обработчик);
|
||||
ПараметрыФормирования.Вставить("МодульОтчета", МодульОтчета);
|
||||
|
||||
Если ДанныеОтчета = Неопределено Тогда
|
||||
|
||||
ВызватьИсключение "Не удалось получить данные отчета";
|
||||
|
||||
ИначеЕсли НЕ ЗначениеЗаполнено(ИмяФайлаОтчета) Тогда
|
||||
|
||||
ВызватьИсключение "Не удалось сформировать имя файла отчета";
|
||||
|
||||
Иначе
|
||||
|
||||
ДанныеОтчета.Записать(ИмяФайлаОтчета);
|
||||
|
||||
КонецЕсли;
|
||||
ОбработчикПолученияИмениФайла = Новый ОписаниеОповещения("ПослеФормированияИмениФайла", ЭтотОбъект, ПараметрыФормирования);
|
||||
ИмяФайлаОтчета(ПараметрыФормирования, ОбработчикПолученияИмениФайла);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Экспортные процедуры и функции для служебного использования внутри подсистемы
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// Процедуры и функции, составляющие внутреннюю реализацию модуля
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ИмяФайлаОтчета(Модуль, ПараметрыЗапуска)
|
||||
Процедура ИмяФайлаОтчета(ПараметрыФормирования, Обработчик)
|
||||
|
||||
ИмяФайла = Неопределено;
|
||||
ПараметрыПроверки = Новый Структура("ПараметрыФормирования, Обработчик", ПараметрыФормирования, Обработчик);
|
||||
|
||||
ПутьКОтчету = ПараметрыЗапуска.reportPath;
|
||||
ОбработчикПроверки = Новый ОписаниеОповещения("ПослеПроверкиКаталога", ЭтотОбъект, ПараметрыПроверки);
|
||||
ЮТФайлы.ЭтоКаталог(ПараметрыФормирования.ПараметрыЗапуска.reportPath, ОбработчикПроверки);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ПутьКОтчету) Тогда
|
||||
ВызватьИсключение "Не указан путь сохранения отчета";
|
||||
КонецПроцедуры
|
||||
|
||||
Функция МодульФормирования(Формат)
|
||||
|
||||
Модули = ЮТРасширения.ГенераторыОтчетов();
|
||||
МодульОтчета = Неопределено;
|
||||
|
||||
Для Каждого Модуль Из Модули Цикл
|
||||
|
||||
Если Модуль.РеализуетФормат(Формат) Тогда
|
||||
МодульОтчета = Модуль;
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МодульОтчета;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПослеФормированияИмениФайла(ИмяФайлаОтчета, Параметры) Экспорт
|
||||
|
||||
ДанныеОтчета = Параметры.МодульОтчета.ДанныеОтчета(Параметры.РезультатВыполнения);
|
||||
|
||||
Если ДанныеОтчета = Неопределено Тогда
|
||||
ВызватьИсключение "Не удалось получить данные отчета";
|
||||
Иначе
|
||||
ДанныеОтчета.Записать(ИмяФайлаОтчета);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЮТОбщий.ЭтоКаталог(ПутьКОтчету) Тогда
|
||||
ИмяФайла = ЮТОбщий.ОбъединитьПути(ПутьКОтчету, Модуль.ИмяФайлаПоУмолчанию());
|
||||
ЮТИсполнительКлиент.ВызватьОбработчик(Параметры.Обработчик);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеПроверкиКаталога(ЭтоКаталог, Параметры) Экспорт
|
||||
|
||||
ПутьКОтчету = Параметры.ПараметрыФормирования.ПараметрыЗапуска.reportPath;
|
||||
Если ЭтоКаталог Тогда
|
||||
ИмяФайла = ЮТОбщий.ОбъединитьПути(ПутьКОтчету, Параметры.ПараметрыФормирования.МодульОтчета.ИмяФайлаПоУмолчанию());
|
||||
Иначе
|
||||
ИмяФайла = ПутьКОтчету;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИмяФайла;
|
||||
ЮТИсполнительКлиент.ВызватьОбработчик(Параметры.Обработчик, ИмяФайла);
|
||||
|
||||
КонецФункции
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -186,7 +186,7 @@
|
||||
|
||||
// Обработка события "ПослеФормированияИсполняемыхНаборовТестов"
|
||||
// Параметры:
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТИсполнитель.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
// КоллекцияКатегорийНаборов - Массив из см. ЮТФабрика.ОписаниеКатегорияНабораТестов - Набор исполняемых наборов
|
||||
Процедура ПослеФормированияИсполняемыхНаборовТестов(КоллекцияКатегорийНаборов) Экспорт
|
||||
|
||||
Параметры = ЮТОбщий.ЗначениеВМассиве(КоллекцияКатегорийНаборов);
|
||||
|
@ -503,6 +503,30 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Описание категория набора тестов.
|
||||
//
|
||||
// Параметры:
|
||||
// ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание категория набора тестов:
|
||||
// * ТестовыйМодуль - см. ЮТФабрика.ОписаниеТестовогоМодуля
|
||||
// * Клиентские - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Серверные - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
// * Пропущенные - Массив из см. ЮТФабрика.ОписаниеИсполняемогоНабораТестов
|
||||
Функция ОписаниеКатегорияНабораТестов(ТестовыйМодуль) Экспорт
|
||||
|
||||
КатегорииНаборов = Новый Структура();
|
||||
КатегорииНаборов.Вставить("ТестовыйМодуль", ТестовыйМодуль);
|
||||
КатегорииНаборов.Вставить("Клиентские", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Серверные", Новый Массив());
|
||||
КатегорииНаборов.Вставить("Пропущенные", Новый Массив());
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат КатегорииНаборов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область КонструкторыКонтекстов
|
||||
|
@ -16,10 +16,46 @@
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция Существует(ПутьКФайлу, Обработчик = Неопределено) Экспорт
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
|
||||
#Если Клиент Тогда
|
||||
Если Обработчик = Неопределено Тогда
|
||||
Возврат Файл.Существует();
|
||||
Иначе
|
||||
Файл.НачатьПроверкуСуществования(Обработчик);
|
||||
КонецЕсли;
|
||||
#Иначе
|
||||
Возврат Файл.Существует();
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет, что по указанному пути находится каталог
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка
|
||||
// Обработчик - ОписаниеОповещения
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Это каталог
|
||||
Функция ЭтоКаталог(ПутьКФайлу, Обработчик = Неопределено) Экспорт
|
||||
|
||||
Файл = Новый Файл(ПутьКФайлу);
|
||||
|
||||
#Если Клиент Тогда
|
||||
Если Обработчик = Неопределено Тогда
|
||||
Возврат Файл.ЭтоКаталог();
|
||||
Иначе
|
||||
Файл.НачатьПроверкуЭтоКаталог(Обработчик);
|
||||
КонецЕсли;
|
||||
#Иначе
|
||||
Возврат Файл.ЭтоКаталог();
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -5,5 +5,7 @@
|
||||
<key>ru</key>
|
||||
<value>Файлы</value>
|
||||
</synonym>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
||||
|
@ -39,8 +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>
|
||||
|
@ -35,7 +35,7 @@
|
||||
&После("ПриНачалеРаботыСистемы")
|
||||
Процедура ЮТПриНачалеРаботыСистемы()
|
||||
|
||||
ЮТИсполнитель.ВыполнитьМодульноеТестирование();
|
||||
ЮТИсполнительКлиентСервер.ВыполнитьМодульноеТестирование();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
<content>CommonModule.МокитоПроверки</content>
|
||||
<content>CommonModule.МокитоСлужебный</content>
|
||||
<content>CommonModule.ЮТест</content>
|
||||
<content>CommonModule.ЮТИсполнитель</content>
|
||||
<content>CommonModule.ЮТИсполнительКлиентСервер</content>
|
||||
<content>CommonModule.ЮТИсполнительСервер</content>
|
||||
<content>CommonModule.ЮТКонструкторВариантов</content>
|
||||
<content>CommonModule.ЮТКонструкторТестовыхДанных</content>
|
||||
|
@ -33,10 +33,10 @@
|
||||
|
||||
Процедура ЗаполнитьСправочник() Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Справочники.Товары);
|
||||
#Иначе
|
||||
#Если Клиент Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары");
|
||||
#Иначе
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Справочники.Товары);
|
||||
#КонецЕсли
|
||||
|
||||
Конструктор
|
||||
@ -53,7 +53,7 @@
|
||||
.Свойство("Вид").Заполнено();
|
||||
|
||||
Ссылка = Конструктор.Записать();
|
||||
#Если Сервер Тогда
|
||||
#Если НЕ Клиент Тогда
|
||||
ЮТест.ОжидаетЧто(Ссылка, "Созданный объект")
|
||||
.Заполнено()
|
||||
.ИмеетТип("СправочникСсылка.Товары")
|
||||
@ -67,10 +67,10 @@
|
||||
|
||||
Процедура ЗаполнитьДокумент() Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
|
||||
#Иначе
|
||||
#Если Клиент Тогда
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
|
||||
#Иначе
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
|
||||
#КонецЕсли
|
||||
|
||||
Ссылка = Конструктор
|
||||
@ -91,7 +91,7 @@
|
||||
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
|
||||
.Провести();
|
||||
|
||||
#Если Сервер Тогда
|
||||
#Если НЕ Клиент Тогда
|
||||
ЮТест.ОжидаетЧто(Ссылка, "Созданный объект")
|
||||
.Заполнено()
|
||||
.ИмеетТип("ДокументСсылка.ПриходТовара")
|
||||
|
Loading…
x
Reference in New Issue
Block a user