Тестовые наборы правил с помощью Microsoft Rules Composer

Область применения: Azure Logic Apps (стандартная версия)

В этом руководстве показано, как тестировать наборы правил с помощью Microsoft Rules Composer и содержать выходные примеры для тестирования правил.

Почему наборы правил тестируются постепенно?

При создании набора правил для интеграции бизнес-логики с рабочими процессами приложения логики уровня "Стандартный" проверьте набор правил постепенно или по крайней мере перед использованием правил в приложении. Таким образом, вы можете подтвердить, что каждое правило работает так, как вы ожидаете, или найти и устранить проблемы раньше, когда правила менее сложны и проще устранять неполадки.

Если вы ждете, чтобы протестировать все свои правила сразу, особенно когда они длинные или сложные, вы можете столкнуться с большим количеством ошибок, чем ожидалось, что требует больше времени для их устранения и затрудняет их отладку.

Предварительные требования

  • Скачайте и установите Microsoft Rules Composer.

  • XML-файл, содержащий правила, которыми вы хотите управлять, и факты, которые вы хотите проверить.

    Чтобы добавить факты, укажите их значения в XML-файлах, на которые вы ссылаетесь в окне выбора фактов , которое открывается после выбора набора правил теста в следующих шагах. Может потребоваться создать создателя фактов, чтобы добавить факты .NET. Более подробную информацию см. в разделе Создание и использование механизмов создания и извлечения фактов.

Проверка версии набора правил

  1. Откройте microsoft Rules Composer. В окне обозревателя правил выберите версию набора правил, которую требуется проверить, открыв окно сведений о версии.

  2. В контекстном меню версии набора правил выберите Тестировать набор правил.

    В появившемся поле "Выбор фактов" в верхнем окне отображаются типы фактов, на которые ссылается правила набора правил.

  3. Чтобы добавить экземпляр фактов в разделе XML-документы или классы .NET, выберите соответствующий тип фактов, а затем нажмите кнопку "Добавить экземпляр".

    Примечание.

    Если вы передаете производный класс в правила, но правила записаны непосредственно для членов базового класса, вместо этого передается экземпляр базового класса, и условия оцениваются относительно экземпляра базового класса.

  4. Чтобы удалить экземпляр фактов, выберите соответствующий тип фактов и нажмите кнопку "Удалить экземпляр".

  5. Чтобы добавить создателя фактов, который вы создали, в окне Fact Creators нажмите кнопку "Добавить".

  6. Когда вы будете готовы, нажмите кнопку "Тест".

    В окне вывода показан вывод тестовой трассировки набора правил.

  7. Откройте контекстное меню для окна вывода теста и выберите вариант сохранения, очистки, выбора или копирования выходного текста, чтобы просмотреть результаты.

    В следующей таблице описываются команды окна вывода, которые можно использовать для работы с выходным текстом:

    Задача Команда ярлыка
    Снимите весь текст из окна вывода. Очистить все
    Скопируйте выделенный текст в окне вывода в буфер обмена. Копировать
    Выделите весь текст в окне вывода. Выделить все
    Сохраните текст, содержащийся в окне вывода, в указанный файл. Сохранение в файл

Выходные данные теста отслеживания набора правил

В этом разделе описываются сведения об отслеживании и действия, включенные в трассировку при тестировании набора правил с помощью Microsoft Rules Composer. Выходные данные отслеживания могут включать следующие типы инструкций:

  • Действие фактов
  • Оценивание условия
  • Обновление повестки дня
  • Правило, запущено

Действие фактов

Это действие указывает на изменения фактов в рабочей памяти двигателя. Приведён следующий пример записи фактического действия:

FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872

В следующей таблице описаны сведения в этой записи:

Элемент Описание
Идентификатор экземпляра обработчика правил Уникальный идентификатор экземпляра RuleEngine , который предоставляет среду выполнения для запуска правила.
Имя набора правил Имя набора правил.
Операция Следующие типы операций могут встречаться в действии факта:

- Утверждение: факт добавляется в рабочую память. Примечание. Если тип для утверждения факта не соответствует ни одному из типов, используемых в наборе правил, функция Assert отображает ошибку "Assert – Fact Unrecognized".

- Обновление: правило обновляет факт, который затем необходимо повторно включить в подсистему повторной оценки на основе новых данных и состояния.

- Отзыв: факт удаляется из рабочей памяти.
Тип объекта Тип факта для определенного действия: — TypedXmlDocument

Утверждения отображаются как для родительских, так и для дочерних экземпляров TypedXmlDocument.
Идентификатор экземпляра объекта Уникальный идентификатор экземпляра для ссылки на факт.

Оценивание условия

Это действие указывает результат оценки отдельных предикатов. В следующем примере показана примерная запись оценки условия:

CONDITION EVALUATION TEST (MATCH) 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:Root.EmploymentType/TimeInMonths >= 18
Left Operand Value: 31
Right Operand Value: 18
Test Result: True

В следующей таблице описаны сведения в этой записи:

Элемент Описание
Выражение теста Простое унарное или двоичное выражение в правиле.
Значение левого операнда Значение термина слева от выражения.
Значение правого операнда Значение термина на правой стороне выражения.
Результат теста Результат оценки, который имеет значение True или False.

Обновление повестки дня

Это действие указывает правила, которые добавляются в повестку дня обработчика правил для последующего выполнения. В следующем примере показан пример записи обновления повестки дня:

AGENDA UPDATE 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: Employment Status Rule
Conflict Resolution Criteria: 0

В следующей таблице описаны сведения в этой записи:

Элемент Описание
Операция Операция, которая добавляет или удаляет правила из повестки дня.
Имя правила Имя правила, которое добавляется или удаляется из повестки дня.
Критерии разрешения конфликтов Приоритет правила, который определяет относительный порядок выполнения действий, и где действия с более высоким приоритетом выполняются первыми.

Правило, запущено

Это действие указывает на выполнение действий правила. Следующий пример показывает запись, созданную срабатыванием правила:

RULE FIRED 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Rule Name: Residency Status Rule
Conflict Resolution Criteria: 10

Функция обновления

В этом примере показан пример правила InventoryCheck и правило Ship в примере набора правил с именем Order. При первом проверке правила условие, связанное с правилом Ship, оценивается как False. Однако, когда правило "InventoryCheck" срабатывает, поле InventoryAvailable в заказе изменяется, и команда Update передаётся обработчику объекта "Order", что приводит к повторной оценке правила "Ship". На этот раз условие оценивается как True, и правило Ship срабатывает.

Примечание.

Если правила написаны неправильно, переадресация с функцией Update может привести к бесконечному циклу. В этом случае при тестировании набора правил в Microsoft Rules Composer вы получите сообщение об ошибке с текстом "Обработчик правил обнаружил цикл выполнения".

Правило InventoryCheck

IF Inventory.AllocateInventory == True
THEN Order.InventoryAvailable == True
Update(Order)

Правило доставки

IF Order.InventoryAvailable == True
THEN Shipment.ShipOrder

Выходные данные

RULE ENGINE TRACE for RULESET: Order 3/17/2023 10:31:17 AM
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: null
Right Operand Value: True
Test Result: False
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Inventory
Object Instance Identifier: 446
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Inventory.AllocateInventory == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Update
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: Ship
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: Ship
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Order
Object Instance Identifier: 448
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Inventory
Object Instance Identifier: 446

Примеры выходных данных трассировки набора правил

В этом разделе приведены примеры, показывающие выходные данные набора правил для различных типов фактов.

Тип фактов класса .NET

В этом примере используется пример правила с именем TestRule1 в наборе правил с именем LoanProcessing:

IF test.get_ID > 0
THEN <do something>

Выходные данные

RULE ENGINE TRACE for RULESET: LoanProcessing 3/16/2023 9:50:28 AM
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872
CONDITION EVALUATION TEST (MATCH) 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Test Expression: MyTest.test.get_ID > 0
Left Operand Value: 100
Right Operand Value: 0
Test Result: True
AGENDA UPDATE 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: MyTest.test
Object Instance Identifier: 872

Тип фактов TypedXmlDocument

В этом примере показано, что сущность TypedXmlDocument с типом документа с именем Microsoft.Samples.BizTalk.LoansProcessor.Case утверждается в обработчике правил. На основании заданного в правиле значения XPath-селектора, модуль создает и проверяет дочернюю сущность TypedXmlDocument с типом Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType, основываясь на типе документа и строке селектора. Эта дочерняя сущность TypedXmlDocument оценивается как True в условии, что приводит к обновлению повестки дня и срабатыванию правил. Затем удаляются родительские и дочерние сущности TypedXmlDocument .

В этом примере показан пример правила с именем TestRule1 в наборе правил с именем LoanProcessing:

IF Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
THEN <do something>

Выходные данные

RULE ENGINE TRACE for RULESET: LoanProcessing 3/17/2023 9:23:05 AM
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853
CONDITION EVALUATION TEST (MATCH) 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
Left Operand Value: 6
Right Operand Value: 4
Test Result: True
AGENDA UPDATE 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853