다음을 통해 공유


Microsoft 규칙 작성기를 사용하여 규칙 집합 테스트(미리 보기)

적용 대상: Azure Logic Apps(표준)

Important

이 기능은 미리 보기로 제공되고 Microsoft Azure 미리 보기의 추가 사용 약관이 적용됩니다.

표준 워크플로와 비즈니스 논리를 통합할 수 있도록 규칙 집합을 빌드할 때 증분 방식으로 또는 애플리케이션에서 규칙을 사용하기 전에 규칙 집합을 테스트합니다. 이렇게 하면 규칙이 예상대로 작동하는지 확인하거나 규칙이 덜 복잡하고 문제 해결이 더 쉬울 때 문제를 더 빨리 찾아 해결할 수 있습니다.

규칙을 동시에 테스트하기 위해 기다리거나 모든 작업이 완료될 때 규칙이 길거나 복잡한 경우 생각보다 더 많은 오류 또는 문제가 발생할 수 있으며, 문제를 해결하거나 해결하기가 더 어려울 수 있습니다.

필수 조건

  • Microsoft 규칙 작성기를 다운로드하여 설치합니다.

  • 작업하려는 규칙 집합과 테스트하려는 팩트가 포함된 XML 파일입니다.

    팩트를 추가하려면 다음 단계에서 테스트 규칙 집합을 선택한 후 열리는 팩트 선택 창에서 참조하는 XML 파일에 해당 값을 지정합니다. 팩트 작성자를 빌드하여 .NET 팩트를 추가할 수 있습니다. 자세한 내용은 빌드 팩트 작성자 및 검색기를 참조 하세요.

규칙 집합 버전 테스트

  1. Microsoft 규칙 작성기를 엽니다. RuleSet 탐색기 창에서 테스트할 규칙 집합 버전을 선택하여 버전 정보 창을 엽니다.

  2. 규칙 집합 버전의 바로 가기 메뉴에서 테스트 규칙 집합을 선택합니다.

    표시되는 팩트 선택 상자의 위쪽 창에는 규칙 집합 규칙에서 참조하는 팩트 형식이 표시됩니다.

  3. 팩트 인스턴스를 추가하려면 XML 문서 또는 .NET 클래스에서 해당 팩트 유형을 선택한 다음 인스턴스 추가를 선택합니다.

    참고 항목

    파생 클래스를 규칙에 어설션하지만 규칙이 기본 클래스 멤버에 대해 직접 기록되는 경우 기본 클래스 인스턴스가 대신 어설션되고 조건이 기본 클래스 인스턴스에 대해 평가됩니다.

  4. 팩트 인스턴스를 제거하려면 해당 팩트 유형을 선택한 다음 인스턴스 제거를 선택합니다.

  5. 빌드한 팩트 작성자를 추가하려면 팩트 작성자 창에서 추가를 선택합니다.

  6. 준비가 되면 테스트를 선택합니다.

    출력 창에는 규칙 집합 테스트 추적 출력표시됩니다.

  7. 테스트 출력 창의 바로 가기 메뉴를 열고 결과를 검토할 수 있도록 출력 텍스트를 저장, 지우기, 선택 또는 복사하는 옵션을 선택합니다.

    다음 표에서는 출력 텍스트를 사용하는 데 사용할 수 있는 출력 창 명령에 대해 설명합니다.

    작업 바로 가기 명령
    출력 창에서 모든 텍스트를 지웁다. 모두 지우기
    출력 창에서 선택한 텍스트를 클립보드에 복사합니다. 복사
    출력 창에서 모든 텍스트를 선택합니다. 모두 선택
    출력 창에 포함된 텍스트를 지정된 파일에 저장합니다. 파일에 저장

Ruleset 테스트 추적 출력

이 섹션에서는 Microsoft 규칙 작성기를 사용하여 규칙 집합을 테스트할 때 추적에 포함된 추적 정보 및 활동에 대해 설명합니다. 추적 출력에는 다음 문 유형이 포함될 수 있습니다.

  • 팩트 활동
  • 조건 평가
  • 안건 업데이트
  • 규칙 발생

팩트 활동

이 작업은 엔진의 작업 메모리에 있는 팩트의 변경 내용을 나타냅니다. 다음 예제에서는 샘플 팩트 활동 항목을 보여줍니다.

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 인스턴스 모두에 대한 어설션이 표시됩니다.
개체 인스턴스 식별자 팩트 참조의 고유 인스턴스 ID입니다.

조건 평가

이 활동은 개별 조건자를 평가한 결과를 나타냅니다. 다음 예제에서는 샘플 조건 평가 항목을 보여줍니다.

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

Update 함수

이 예제에서는 "Order"라는 샘플 규칙 집합에서 샘플 "InventoryCheck" 규칙 및 "배송" 규칙을 보여 립니다. 규칙을 처음 선택하면 "Ship" 규칙과 연결된 조건이 False평가됩니다. 그러나 "InventoryCheck" 규칙이 실행되면 OrderInventoryAvailable 필드가 변경되고 업데이트 명령이 엔진에 "Order 개체"로 실행되어 "Ship" 규칙에 대한 재평가가 발생합니다. 이번에는 조건이 True평가되고 "Ship" 규칙이 실행됩니다.

참고 항목

규칙이 잘못 작성된 경우 Update 함수와의 정방향 연결로 인해 무한 루프가 발생할 수 있습니다. 이 이벤트에서 Microsoft 규칙 작성기에서 규칙 집합을 테스트할 때 "규칙 엔진이 실행 루프를 검색했습니다."라는 텍스트 와 함께 오류 메시지가 표시됩니다.

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

Ruleset 테스트 추적 출력 예제

이 섹션에서는 다양한 유형의 팩트의 규칙 집합 테스트 출력을 보여 주는 예제를 제공합니다.

.NET 클래스 팩트 형식

이 예제는 "LoanProcessing"이라는 규칙 집합에서 "TestRule1"이라는 샘플 규칙입니다.

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 팩트 형식

이 예제에서는 Microsoft.Samples.BizTalk.LoansProcessor.Case라는 문서 형식의 TypedXmlDocument 엔터티가 규칙 엔진에 어설션됨을 보여 줍니다. 규칙에 정의된 XPath 선택기 값에 따라 엔진은 문서 형식 및 선택기 문자열에 따라 Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType이라는 형식으로 자식 TypedXmlDocument 엔터티를 만들고 어설션합니다. 이 자식 TypedXmlDocument 엔터티는 조건에서 True평가되어 안건 업데이트 및 규칙이 발생합니다. 그런 다음 부모 및 자식 TypedXmlDocument 엔터티가 취소됩니다.

이 예제에서는 "LoanProcessing"이라는 규칙 집합에서 "TestRule1"이라는 샘플 규칙을 보여 줍니다.

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