Тестирование в режиме многопользовательской работы
Для тестирования прикладных алгоритмов в режиме многопользовательской работы достаточно использовать локальные сессии. Работа одного пользователя с базой данных происходит в рамках одной сессии, которая создается при запуске клиентского приложения. Создание нескольких сессий путем копирования текущей сессии позволяет имитировать работу сразу нескольких пользователей с одной базой данных.
Создание новой сессии путем копирования параметров текущей происходит при помощи функции КОПИРОВАТЬ_ТЕК_СЕССИЮ.
В примере тестирования многопользовательского режима работы создается 5 сессий, в которых происходит работа с базой данных: в каждой сессии происходит добавление 8000 операций в журнал Тест. В цикле параллельно запускается на выполнение алгоритм по добавлению операций. Перед выполнением алгоритма добавления операций создаются объекты аналитики и динамические свойства, ссылки на которые будут выступать в качестве данных проводок журнальных операций.
Пример
ВЫЧИСЛИТЬ
ПЕРЕМ КОНФИГУРАТОР: кф
ЕСЛИ кф.ОТКРЫТЬ ТО
ПЕРЕМ МОДИФ_ПАРАМ: мп
ПЕРЕМ КФ_ОБЪЕКТ: счет
счет.код = "Счет"
счет.название = "Счет"
счет.доступ.ПО_УМОЛЧАНИЮ
кф.ЗАПИСАТЬ_ОБЪЕКТ(счет.код, счет, мп)
ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_счет
дс_счет.доступ = счет.доступ
дс_счет.свойства["контрагент"] = [ тип = ТСВ_ССЫЛКА, значение = ССЫЛКА[] ]
дс_счет.свойства["товар"] = [ тип = ТСВ_ССЫЛКА, значение = ССЫЛКА[] ]
кф.ДИН_ЗАПИСАТЬ(счет.код, дс_счет)
ПЕРЕМ КФ_ОБЪЕКТ: контрагент
контрагент.код = "Контрагент"
контрагент.название = "Контрагент"
контрагент.доступ.ПО_УМОЛЧАНИЮ
кф.ЗАПИСАТЬ_ОБЪЕКТ(контрагент.код, контрагент, мп)
ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_контрагент
дс_контрагент.доступ = контрагент.доступ
дс_контрагент.свойства["название"] = [ тип = ТСВ_СТРОКА, значение = "" ]
дс_контрагент.свойства["договор"] = [ тип = ТСВ_СТРОКА, значение = "" ]
кф.ДИН_ЗАПИСАТЬ(контрагент.код, дс_контрагент)
ПЕРЕМ КФ_ОБЪЕКТ: товар
товар.код = "Товар"
товар.название = "Товар"
товар.доступ.ПО_УМОЛЧАНИЮ
кф.ЗАПИСАТЬ_ОБЪЕКТ(товар.код, товар, мп)
ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_товар
дс_товар.доступ = товар.доступ
дс_товар.свойства["название"] = [ тип = ТСВ_СТРОКА, значение = "" ]
дс_товар.свойства["цена"] = [ тип = ТСВ_ЧИСЛО, значение = 0 ]
кф.ДИН_ЗАПИСАТЬ(товар.код, дс_товар)
ПЕРЕМ КФ_ОБЪЕКТ: валюта
валюта.код = "USD"
валюта.название = "Доллар"
валюта.доступ.ПО_УМОЛЧАНИЮ
кф.ЗАПИСАТЬ_ОБЪЕКТ(валюта.код, валюта, мп)
ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_валюта
дс_валюта.доступ = валюта.доступ
дс_валюта.свойства["курс"] = [ тип = ТСВ_ЧИСЛО, значение = 1 ]
кф.ДИН_ЗАПИСАТЬ(валюта.код, дс_валюта)
кф.ЗАКРЫТЬ(ДА)
КОНЕЦ_ЕСЛИ
КОНСТ КолПараллельныхСессий = 5
ЦИКЛ ДЛЯ (и = 1, КолПараллельныхСессий)
ВЫПОЛНИТЬ(["Добавление ссылок.ibx"](и), НЕТ)
КОНЕЦ_ЦИКЛА
КОНЕЦ
ФУНКЦИЯ ГенОшибку
ПЕРЕМ СТРОКА: сообщ
ПЕРЕМ код = ПОСЛ_ОШИБКА(сообщ)
ЕСЛИ (код = 0) И (сообщ = "") ТО
сообщ = "Неизвестная ошибка"
КОНЕЦ_ЕСЛИ
_ОШИБКА(сообщ)
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучКонтрагент
РЕЗУЛЬТАТ.код = "Контрагент"
РЕЗУЛЬТАТ.свойства["название"] = "Контрагент" + СТР(СЛУЧ_ЧИСЛО(1000))
РЕЗУЛЬТАТ.свойства["договор"] = "Договор" + СТР(СЛУЧ_ЧИСЛО(100))
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучТовар
РЕЗУЛЬТАТ.код = "Товар"
РЕЗУЛЬТАТ.свойства["название"] = "Товар" + СТР(СЛУЧ_ЧИСЛО(1000))
РЕЗУЛЬТАТ.свойства["цена"] = 10.0 + СЛУЧ_ЧИСЛО(1000) / 10.0
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучСчет
РЕЗУЛЬТАТ.код = "Счет"
РЕЗУЛЬТАТ.свойства["контрагент"] = СлучКонтрагент
РЕЗУЛЬТАТ.свойства["товар"] = СлучТовар
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучВалюта
РЕЗУЛЬТАТ.код = "USD"
РЕЗУЛЬТАТ.свойства["курс"] = 50.0 + СЛУЧ_ЧИСЛО(100) / 10.0
КОНЕЦ_ФУНКЦИИ
ВЫЧИСЛИТЬ(ЦЕЛОЕ: номер_сессии)
ПЕРЕМ ид_сессии = КОПИРОВАТЬ_ТЕК_СЕССИЮ
ЕСЛИ ид_сессии = "" ТО
ГенОшибку
КОНЕЦ_ЕСЛИ
ПЕРЕМ ПРАВА_ДОСТУПА: доступ
доступ.ПО_УМОЛЧАНИЮ
ПЕРЕМ ЖУРНАЛ: ж = [ название = "Тест" ]
ЦИКЛ ДЛЯ(и = 1, 8000)
ПЕРЕМ ОПЕРАЦИЯ: оп
оп.номер = 0
оп.идент = ""
оп.дата_время = ДАТА_ВРЕМЯ_ТЕК
оп.комментарий = "Сессия #" + СТР(номер_сессии) + " (" + ид_сессии + "), операция #" + СТР(и)
оп.проводки[1] =
[
дебет = СлучСчет,
кредит = СлучСчет,
единицы = СлучВалюта,
количество = 10.0 + СЛУЧ_ЧИСЛО(1000) / 10.0
]
ПЕРЕМ рез = ж.ДОБАВИТЬ(оп, доступ)
ЕСЛИ НЕ рез ТО
ГенОшибку
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
КОНЕЦ