УПП + ТестЦентр (Нагрузочное тестирование Базы данных)
Показывать по
10
20
40
сообщений
- 1
- 2
02.12.2008
13:01
#1
Собственно говоря, никакого нагрузочного тестирования не получилось потому здесь и пишу.
Дано:
1С 8.1(8.1.12.101) База УПП 1.2 (1.2.19.1) Клиент серверный вариант.
Сервер: Win2003 Server, SQL 2000 SP4.
Железо: Процессоры 2 Xeon 5130 Память 8Gb.
Все стоит на одной машине, народу не много одновременно не более 10 человек. Выбор УПП был связан с тем, что у нас не просто предприятие, а группа компаний 5 организаций, нужно видеть всех сразу и получать отчет по всей группе компаний одновременно.
Вообще все это тестирование было затеяно с целью понять, как будет работать 1С при увеличении количества пользователей в базе, ну скажем до 30 человек, и соответственно аргументировать руководству покупку второго сервера.
Что сделали:
1. Нашли и прогнали тест производительности TPC-1C-GILV () получили в среднем 28 балов.
2. Установили 1С Тест Центр 1.0.5.1 и на этом все закончилось.
При попытке воспользоваться Сценарием для 1С Тест Центра Эмуляция работы пользователей по вводу документов с сайта (), выполняя внешнюю обработку, Генерация сценария, как указано в инструкции (), получаем ответ: Не удалось получить список документов {ВнешняяОбработка.ГенерацияСценария (489)}: Значение не является значением объектного типа (имя) В выбранном интервале нет добавленных и проведенных документов. Хотя перед этим мы документы специально проводили и журнал у нас включен, как в инструкции написано.
Со вторым тестом Создание документов "Реализация товаров и услуг" для УПП все еще хуже при попытке импортировать сценарий Создание РТУ.xml в базу через Тест Центр / Конструктор сценариев 1С отвечает Ошибка при записи Объекта Инициализация Сценария {ОбщаяФорма.ТЦИмпортСценария(75)}: Ошибка при вызове метода контекста (Запись): Код не уникален! Импорт не выполнен.
Вопрос: С чем связаны данные ошибки. Возможно, кто-нибудь знает, что я сделал не так. Что стоит почитать. Где можно поискать другие тестовые обработки для 1С:Тест Цента. Существуют ли какие-нибудь другие варианты провести тестирование 1С на предмет скорости работы при увеличении количества пользователей.
Дано:
1С 8.1(8.1.12.101) База УПП 1.2 (1.2.19.1) Клиент серверный вариант.
Сервер: Win2003 Server, SQL 2000 SP4.
Железо: Процессоры 2 Xeon 5130 Память 8Gb.
Все стоит на одной машине, народу не много одновременно не более 10 человек. Выбор УПП был связан с тем, что у нас не просто предприятие, а группа компаний 5 организаций, нужно видеть всех сразу и получать отчет по всей группе компаний одновременно.
Вообще все это тестирование было затеяно с целью понять, как будет работать 1С при увеличении количества пользователей в базе, ну скажем до 30 человек, и соответственно аргументировать руководству покупку второго сервера.
Что сделали:
1. Нашли и прогнали тест производительности TPC-1C-GILV () получили в среднем 28 балов.
2. Установили 1С Тест Центр 1.0.5.1 и на этом все закончилось.
При попытке воспользоваться Сценарием для 1С Тест Центра Эмуляция работы пользователей по вводу документов с сайта (), выполняя внешнюю обработку, Генерация сценария, как указано в инструкции (), получаем ответ: Не удалось получить список документов {ВнешняяОбработка.ГенерацияСценария (489)}: Значение не является значением объектного типа (имя) В выбранном интервале нет добавленных и проведенных документов. Хотя перед этим мы документы специально проводили и журнал у нас включен, как в инструкции написано.
Со вторым тестом Создание документов "Реализация товаров и услуг" для УПП все еще хуже при попытке импортировать сценарий Создание РТУ.xml в базу через Тест Центр / Конструктор сценариев 1С отвечает Ошибка при записи Объекта Инициализация Сценария {ОбщаяФорма.ТЦИмпортСценария(75)}: Ошибка при вызове метода контекста (Запись): Код не уникален! Импорт не выполнен.
Вопрос: С чем связаны данные ошибки. Возможно, кто-нибудь знает, что я сделал не так. Что стоит почитать. Где можно поискать другие тестовые обработки для 1С:Тест Цента. Существуют ли какие-нибудь другие варианты провести тестирование 1С на предмет скорости работы при увеличении количества пользователей.
02.12.2008
21:44
#2
Сожелею ! Но на форуме технических специалистов-таковых наверно нет.
А тему , ты, затронул ОЧЕНЬ ИНТЕРЕСНУЮ.Копай дальше.Может и раскрутищь.
А тему , ты, затронул ОЧЕНЬ ИНТЕРЕСНУЮ.Копай дальше.Может и раскрутищь.
03.12.2008
08:50
#3
По первой ошибке - так у вас есть в "выбранном интервале" документы или нет? Или вы их попроводили и потом удалили?
По второй ошибке - посмотрите в отладчике, что там за элемент справочника создается?
По второй ошибке - посмотрите в отладчике, что там за элемент справочника создается?
03.12.2008
13:19
#4
"1. Да проведенные документы в базе есть. Специально перед выполнением теста проводим порядка 10-20 документов. Стирать их никто не будет т.к. база специально создана для тестирования (копия рабочей).
2. Вот что видно в отладчике.
// Запись указанного объекта в базу данных
//
// Параметры:
// Объект - СправочникОбъект, за6писываемый объект
//
// Возвращаемое значение:
// Булево - Истина, если запись прошла успешно
//
Функция ЗаписатьОбъект(Объект)
ТипОбъекта = ТипЗнч(Объект);
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦТестоваяОбработка") Тогда
ЭтоСценарий = ТипЗнч(Объект) = Тип("СправочникОбъект.ТЦСценарий");
Если Не ЭтоСуществующийОбъект(?(ЭтоСценарий, Объект.Родитель, Объект.Владелец)) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если ЭтоСуществующийОбъект(Объект) Тогда
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦПоказательПроизводительности") Тогда
Объект.УстановитьНовыйКод();
КонецЕсли;
Если Не мПерезаписыватьВсе Тогда
Результат = ВопросОПерезаписиОбъекта(Объект.Наименование);
Если Результат = 0 Тогда
Возврат Истина;
ИначеЕсли Результат = 2 Тогда
мПерезаписыватьВсе = Истина;
КонецЕсли
КонецЕсли;
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Ошибка = ОписаниеОшибки();
ОтменитьТранзакцию();
Сообщение = "Ошибка при записи объекта " + Объект.Наименование + Символы.ПС + Ошибка + Символы.ПС + "Импорт не выполнен";
Предупреждение(Сообщение);
-> Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции // ЗаписатьОбъект()
Ссылка на Print Scrn экрана
;"
2. Вот что видно в отладчике.
// Запись указанного объекта в базу данных
//
// Параметры:
// Объект - СправочникОбъект, за6писываемый объект
//
// Возвращаемое значение:
// Булево - Истина, если запись прошла успешно
//
Функция ЗаписатьОбъект(Объект)
ТипОбъекта = ТипЗнч(Объект);
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦТестоваяОбработка") Тогда
ЭтоСценарий = ТипЗнч(Объект) = Тип("СправочникОбъект.ТЦСценарий");
Если Не ЭтоСуществующийОбъект(?(ЭтоСценарий, Объект.Родитель, Объект.Владелец)) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если ЭтоСуществующийОбъект(Объект) Тогда
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦПоказательПроизводительности") Тогда
Объект.УстановитьНовыйКод();
КонецЕсли;
Если Не мПерезаписыватьВсе Тогда
Результат = ВопросОПерезаписиОбъекта(Объект.Наименование);
Если Результат = 0 Тогда
Возврат Истина;
ИначеЕсли Результат = 2 Тогда
мПерезаписыватьВсе = Истина;
КонецЕсли
КонецЕсли;
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Ошибка = ОписаниеОшибки();
ОтменитьТранзакцию();
Сообщение = "Ошибка при записи объекта " + Объект.Наименование + Символы.ПС + Ошибка + Символы.ПС + "Импорт не выполнен";
Предупреждение(Сообщение);
-> Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции // ЗаписатьОбъект()
Ссылка на Print Scrn экрана
;"
04.12.2008
12:56
#6
"Это все что мне пишет отладчик. Я так понимаю ("Объект - СправочникОбъект, за6писываемый объект") он пытаеться записать именно это?
Перем мФормаВопроса; // Форма ТЦВопрос
Перем мПерезаписыватьВсе; // Признак перезаписи всех объектов
// Выбрать XML файл сценария
Процедура ВыборФайла(Элемент, СтандартнаяОбработка)
ВводИмениФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВводИмениФайла.Фильтр = "Файл XML(*.xml)|*.xml";
Если ВводИмениФайла.Выбрать() Тогда
ФайлСценария = ВводИмениФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
// Вопрос пользователю по поводу
//
// Параметры:
// Наименование - Строка, наименование перезаписываемого объекта
//
// Возвращаемое значение:
// Перечислени.ТЦОтветНаВопрос - результат ответа на вопрос
Функция ВопросОПерезаписиОбъекта(Наименование)
Если мФормаВопроса = Неопределено Тогда
мФормаВопроса = ПолучитьОбщуюФорму("ТЦВопрос");
КонецЕсли;
мФормаВопроса.Заголовок = "Тест-центр";
мФормаВопроса.Сообщение = "Импортируемый объект """""
+ Наименование
+ """"" уже существует в базе. Перезаписать его?";
Возврат мФормаВопроса.ОткрытьМодально();
КонецФункции
// Запись указанного объекта в базу данных
//
// Параметры:
// Объект - СправочникОбъект, за6писываемый объект
//
// Возвращаемое значение:
// Булево - Истина, если запись прошла успешно
//
Функция ЗаписатьОбъект(Объект)
ТипОбъекта = ТипЗнч(Объект);
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦТестоваяОбработка") Тогда
ЭтоСценарий = ТипЗнч(Объект) = Тип("СправочникОбъект.ТЦСценарий");
Если Не ЭтоСуществующийОбъект(?(ЭтоСценарий, Объект.Родитель, Объект.Владелец)) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если ЭтоСуществующийОбъект(Объект) Тогда
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦПоказательПроизводительности") Тогда
Объект.УстановитьНовыйКод();
КонецЕсли;
Если Не мПерезаписыватьВсе Тогда
Результат = ВопросОПерезаписиОбъекта(Объект.Наименование);
Если Результат = 0 Тогда
Возврат Истина;
ИначеЕсли Результат = 2 Тогда
мПерезаписыватьВсе = Истина;
КонецЕсли
КонецЕсли;
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Ошибка = ОписаниеОшибки();
ОтменитьТранзакцию();
Сообщение = "Ошибка при записи объекта " + Объект.Наименование + Символы.ПС + Ошибка + Символы.ПС + "Импорт не выполнен";
Предупреждение(Сообщение);
!!!-> Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции // ЗаписатьОбъект()
// Проверка существования объекта в базе данных
//
// Параметры:
// Ссылка - СправочникСсылка, ссылка на проверяемый объект
//
// Возвращаемое значение:
// Булево - Истина, если объект с таким уникальным идентификатором существует в базе данных
//
Функция ЭтоСуществующийОбъект(Объект)
Если Объект = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос;
Справочник = Объект.Метаданные().Имя;
Запрос.Текст = "ВЫБРАТЬ
| Таблица.Ссылка
|ИЗ
| Справочник." + Справочник + " КАК Таблица
|ГДЕ
| Таблица.Ссылка = &Объект";
Запрос.УстановитьПараметр("Объект", Объект.Ссылка);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
// Импортировать сценарий
Процедура ИмпортСценария(Элемент)
// Открыть XML файл сценария
Чтение = Новый ЧтениеXML();
Попытка
Чтение.ОткрытьФайл(ФайлСценария);
Исключение
Ошибка = ОписаниеОшибки();
Сообщение = "Не могу открыть файл" + Символы.ПС + ФайлСценария + Символы.ПС + Ошибка;
Предупреждение(Сообщение);
Возврат;
КонецПопытки;
// Прочитать количество объектов
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЭлементыФормы.Индикатор.МаксимальноеЗначение = Чтение.ПолучитьАтрибут("Количество");
КоличествоОбъектовНаПервомУровне = Число(Чтение.ПолучитьАтрибут("КоличествоНаПервомУровне"));
Индикатор = 0;
Прервать;
КонецЕсли;
КонецЦикла;
// Если при ответе на вопрос о перезаписывании существующих объектов выбрать "Да для явсех",
// тогда эта переменная будет иметь значение Истина
мПерезаписыватьВсе = Ложь;
// Признак того, что при экспорте были экспортированны все объекты. Это важно потому, что
// в этом случае родителей придется назначать нескольким элементам, а именно тем, у кого
// родителем является корневой элемент справочника ТЦСценарий.
ИмпортКорня = Ложь;
// Чтение и запись объектов из файла-хранилища
Если Чтение.Прочитать() Тогда
НачатьТранзакцию();
// Чтение остальных объектов их файла-хранилища
Пока ВозможностьЧтенияXML(Чтение) Цикл
Попытка
Объект = ПрочитатьXML(Чтение);
Исключение
Предупреждение("Файл сценария содержит ошибки: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Если Объект = Неопределено Тогда
Предупреждение("Файл сценария поврежден: Невозможно прочитать объект");
Возврат;
КонецЕсли;
Если КоличествоОбъектовНаПервомУровне > 0 Тогда
Объект.Родитель = Сценарий;
КоличествоОбъектовНаПервомУровне = КоличествоОбъектовНаПервомУровне - 1;
КонецЕсли;;
Если Не ЗаписатьОбъект(Объект) Тогда
Возврат;
КонецЕсли;
Индикатор = Индикатор + 1;
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецЕсли;
Чтение.Закрыть();
Предупреждение("Сценарий успешно импортирован", 3);
КонецПроцедуры
"
Перем мФормаВопроса; // Форма ТЦВопрос
Перем мПерезаписыватьВсе; // Признак перезаписи всех объектов
// Выбрать XML файл сценария
Процедура ВыборФайла(Элемент, СтандартнаяОбработка)
ВводИмениФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВводИмениФайла.Фильтр = "Файл XML(*.xml)|*.xml";
Если ВводИмениФайла.Выбрать() Тогда
ФайлСценария = ВводИмениФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
// Вопрос пользователю по поводу
//
// Параметры:
// Наименование - Строка, наименование перезаписываемого объекта
//
// Возвращаемое значение:
// Перечислени.ТЦОтветНаВопрос - результат ответа на вопрос
Функция ВопросОПерезаписиОбъекта(Наименование)
Если мФормаВопроса = Неопределено Тогда
мФормаВопроса = ПолучитьОбщуюФорму("ТЦВопрос");
КонецЕсли;
мФормаВопроса.Заголовок = "Тест-центр";
мФормаВопроса.Сообщение = "Импортируемый объект """""
+ Наименование
+ """"" уже существует в базе. Перезаписать его?";
Возврат мФормаВопроса.ОткрытьМодально();
КонецФункции
// Запись указанного объекта в базу данных
//
// Параметры:
// Объект - СправочникОбъект, за6писываемый объект
//
// Возвращаемое значение:
// Булево - Истина, если запись прошла успешно
//
Функция ЗаписатьОбъект(Объект)
ТипОбъекта = ТипЗнч(Объект);
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦТестоваяОбработка") Тогда
ЭтоСценарий = ТипЗнч(Объект) = Тип("СправочникОбъект.ТЦСценарий");
Если Не ЭтоСуществующийОбъект(?(ЭтоСценарий, Объект.Родитель, Объект.Владелец)) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если ЭтоСуществующийОбъект(Объект) Тогда
Если ТипОбъекта <> Тип("СправочникОбъект.ТЦПоказательПроизводительности") Тогда
Объект.УстановитьНовыйКод();
КонецЕсли;
Если Не мПерезаписыватьВсе Тогда
Результат = ВопросОПерезаписиОбъекта(Объект.Наименование);
Если Результат = 0 Тогда
Возврат Истина;
ИначеЕсли Результат = 2 Тогда
мПерезаписыватьВсе = Истина;
КонецЕсли
КонецЕсли;
КонецЕсли;
Попытка
Объект.Записать();
Исключение
Ошибка = ОписаниеОшибки();
ОтменитьТранзакцию();
Сообщение = "Ошибка при записи объекта " + Объект.Наименование + Символы.ПС + Ошибка + Символы.ПС + "Импорт не выполнен";
Предупреждение(Сообщение);
!!!-> Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции // ЗаписатьОбъект()
// Проверка существования объекта в базе данных
//
// Параметры:
// Ссылка - СправочникСсылка, ссылка на проверяемый объект
//
// Возвращаемое значение:
// Булево - Истина, если объект с таким уникальным идентификатором существует в базе данных
//
Функция ЭтоСуществующийОбъект(Объект)
Если Объект = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос;
Справочник = Объект.Метаданные().Имя;
Запрос.Текст = "ВЫБРАТЬ
| Таблица.Ссылка
|ИЗ
| Справочник." + Справочник + " КАК Таблица
|ГДЕ
| Таблица.Ссылка = &Объект";
Запрос.УстановитьПараметр("Объект", Объект.Ссылка);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
// Импортировать сценарий
Процедура ИмпортСценария(Элемент)
// Открыть XML файл сценария
Чтение = Новый ЧтениеXML();
Попытка
Чтение.ОткрытьФайл(ФайлСценария);
Исключение
Ошибка = ОписаниеОшибки();
Сообщение = "Не могу открыть файл" + Символы.ПС + ФайлСценария + Символы.ПС + Ошибка;
Предупреждение(Сообщение);
Возврат;
КонецПопытки;
// Прочитать количество объектов
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЭлементыФормы.Индикатор.МаксимальноеЗначение = Чтение.ПолучитьАтрибут("Количество");
КоличествоОбъектовНаПервомУровне = Число(Чтение.ПолучитьАтрибут("КоличествоНаПервомУровне"));
Индикатор = 0;
Прервать;
КонецЕсли;
КонецЦикла;
// Если при ответе на вопрос о перезаписывании существующих объектов выбрать "Да для явсех",
// тогда эта переменная будет иметь значение Истина
мПерезаписыватьВсе = Ложь;
// Признак того, что при экспорте были экспортированны все объекты. Это важно потому, что
// в этом случае родителей придется назначать нескольким элементам, а именно тем, у кого
// родителем является корневой элемент справочника ТЦСценарий.
ИмпортКорня = Ложь;
// Чтение и запись объектов из файла-хранилища
Если Чтение.Прочитать() Тогда
НачатьТранзакцию();
// Чтение остальных объектов их файла-хранилища
Пока ВозможностьЧтенияXML(Чтение) Цикл
Попытка
Объект = ПрочитатьXML(Чтение);
Исключение
Предупреждение("Файл сценария содержит ошибки: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Если Объект = Неопределено Тогда
Предупреждение("Файл сценария поврежден: Невозможно прочитать объект");
Возврат;
КонецЕсли;
Если КоличествоОбъектовНаПервомУровне > 0 Тогда
Объект.Родитель = Сценарий;
КоличествоОбъектовНаПервомУровне = КоличествоОбъектовНаПервомУровне - 1;
КонецЕсли;;
Если Не ЗаписатьОбъект(Объект) Тогда
Возврат;
КонецЕсли;
Индикатор = Индикатор + 1;
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецЕсли;
Чтение.Закрыть();
Предупреждение("Сценарий успешно импортирован", 3);
КонецПроцедуры
"
04.12.2008
12:59
#7
"В отладчике вычислите выражение "Объект" и напишите нам что это!
Что то Ваши знания по работе с отладчиком не очень! ;) Может быть лучше пригласить специалиста? Без обид!"
Что то Ваши знания по работе с отладчиком не очень! ;) Может быть лучше пригласить специалиста? Без обид!"
04.12.2008
16:18
#8
По поводу моих знаний, абсолютно согласен, я вообще отладчик впервые запустил, после того как вы мне сказали в нем посмотреть.
По поводу пригласить кого-нибудь тоже не против, но хотелось бы, чтобы человек, который придет, понимал, что он должен сделать, а не просто сидел свое время (была у нас пара таких случаев). Если сможете подсказать, кто может с моей проблемой справиться, буду благодарен.
По поводу пригласить кого-нибудь тоже не против, но хотелось бы, чтобы человек, который придет, понимал, что он должен сделать, а не просто сидел свое время (была у нас пара таких случаев). Если сможете подсказать, кто может с моей проблемой справиться, буду благодарен.
- 1
- 2
Читают тему
(гостей: 1)