Freigeben über


Testen von Regelsätzen mithilfe des Microsoft Rules Composer

Gilt für: Azure Logic Apps (Standard)

In diesem Handbuch wird gezeigt, wie Sie Regelets mithilfe von Microsoft Rules Composer testen und Ausgabebeispiele für Regeltests enthalten.

Warum Regelsätze inkrementell testen?

Wenn Sie ein Regelsatz erstellen, um Geschäftslogik in Ihre Standardlogik-App-Workflows zu integrieren, testen Sie Das Regelset inkrementell oder zumindest bevor Sie die Regeln in Ihrer Anwendung verwenden. Auf diese Weise können Sie bestätigen, dass jede Regel wie erwartet funktioniert, oder Probleme schneller finden und beheben, wenn Ihre Regeln weniger komplex und einfacher zu behandeln sind.

Wenn Sie warten, alle Regeln gleichzeitig zu testen, insbesondere wenn Ihre Regeln lang oder komplex sind, kann dies zu mehr Fehlern führen als erwartet. Das macht die Behebung zeitaufwendiger und das Debuggen schwieriger.

Voraussetzungen

  • Laden Sie Microsoft Rules Composer herunter, und installieren Sie das Programm.

  • Die XML-Datei mit dem Regelsatz, an dem Sie arbeiten möchten, und die Fakten, die Sie testen möchten.

    Um Fakten hinzuzufügen, geben Sie deren Werte in den XML-Dateien an, auf die Sie im Fenster Fakten auswählen verweisen, das geöffnet wird, nachdem Sie in den folgenden Schritten Regelsatz testen auswählen. Möglicherweise sollten Sie auch einen Faktenersteller erstellen, um .NET-Fakten hinzuzufügen. Weitere Informationen finden Sie unter Faktenersteller und -abfrager erstellen.

Eine Version des Regelsatzes testen

  1. Öffnen Sie Microsoft Rules Composer. Wählen Sie im Fenster Regelsatz-Explorer die Regelsatzversion aus, die Sie testen möchten. Damit wird das Versionsinformationsfenster geöffnet.

  2. Wählen Sie im Kontextmenü der Regelsatzversion die Option Regelsatz testen aus.

    Im daraufhin angezeigten Feld Fakten auswählen werden im oberen Fenster die Faktentypen angezeigt, auf die durch die Regeln im Regelsatz verwiesen wird.

  3. Wenn Sie eine Fakteninstanz hinzufügen möchten, wählen Sie unter XML-Dokumente oder .NET-Klassen einen entsprechenden Faktentyp und dann Instanz hinzufügen aus.

    Hinweis

    Wenn Sie in einer Regel eine abgeleitete Klasse deklarieren, aber die Regeln direkt für die Basisklassenmitglieder geschrieben werden, wird stattdessen eine Basisklasseninstanz deklariert, und die Bedingungen werden für die Basisklasseninstanz ausgewertet.

  4. Um eine Fakteninstanz zu entfernen, wählen Sie den entsprechenden Faktentyp und dann Instanz entfernen aus.

  5. Um einen von Ihnen erstellten Faktenersteller hinzuzufügen, wählen Sie im Fenster Faktenersteller die Option Hinzufügen aus.

  6. Wählen Sie bei Bereitschaft Test aus.

    Im Ausgabefenster wird die Ausgabe der Ablaufverfolgung für den Regelsatztest angezeigt.

  7. Öffnen Sie das Kontextmenü für das Testausgabefenster, und wählen Sie eine Option zum Speichern, Löschen, Auswählen oder Kopieren des Ausgabetexts aus, damit Sie die Ergebnisse überprüfen können.

    In der folgenden Tabelle werden die Befehle im Ausgabefenster beschrieben, die Sie für die Arbeit mit dem Ausgabetext verwenden können:

    Aufgabe Kurzbefehl
    Löscht den gesamten Text im Ausgabefenster Alles löschen
    Kopieren Sie den ausgewählten Text im Ausgabefenster in die Zwischenablage. Kopieren
    Markieren Sie den gesamten Text im Ausgabefenster. Alles markieren
    Speichert den Text im Ausgabefenster in einer angegebenen Datei In Datei speichern

Ablaufverfolgungsausgabe des Regelsatztests

In diesem Abschnitt werden die Trackinginformationen und -aktivitäten beschrieben, die in der Ablaufverfolgung enthalten sind, wenn Sie einen Regelsatz mit Microsoft Rules Composer testen. Die Nachverfolgungsausgabe kann die folgenden Ausdrücktypen enthalten:

  • Aktivität zur Faktenüberprüfung
  • Bedingungsauswertung
  • Agendaaktualisierung
  • Regel ausgelöst

Faktenaktivität

Diese Aktivität gibt Änderungen an den Fakten im Arbeitsspeicher der Engine an. Das folgende Beispiel zeigt einen Beispieleintrag für eine Faktenaktivität:

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

In der folgenden Tabelle werden die Informationen in diesem Eintrag beschrieben:

Artikel Beschreibung
Regel-Engine-Instanz-Identifikator Eindeutiger Bezeichner für die RuleEngine-Instanz, von der die Ausführungsumgebung für die ausgelöste Regel zur Verfügung gestellt wird
Regelsatzname Der Name des Regelsatzes
Vorgang Die folgenden Vorgangstypen können in einer Faktenaktivität vorkommen:

- Assert: Ein Fakt wird dem Arbeitsspeicher hinzugefügt. Hinweis: Wenn der Typ für einen angegebenen Fakt keinem der Typen entspricht, die im Regelsatz verwendet werden, zeigt die Assert-Funktion den Fehler „Assert – Fact Unrecognized“ an.

- Update: Eine Regel aktualisiert einen Fakt, der dann basierend auf den neuen Daten und dem Zustand für die erneute Auswertung erneut in die Engine aufgenommen werden muss.

- Retract: Eine Tatsache wurde aus dem Arbeitsgedächtnis entfernt.
Objekttyp Der Faktentyp für eine bestimmte Aktivität: - TypedXmlDocument

Assertionen treten sowohl für übergeordnete als auch untergeordnete TypedXmlDocument-Instanzen auf.
Objektinstanzbezeichner Die eindeutige Instanz-ID für den Faktenverweis.

Bedingungsauswertung

Diese Aktivität gibt das Ergebnis der Auswertung einzelner Prädikate an. Das folgende Beispiel zeigt einen Beispieleintrag für die Bedingungsauswertung:

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

In der folgenden Tabelle werden die Informationen in diesem Eintrag beschrieben:

Artikel Beschreibung
Testausdruck Ein einfacher unärer oder binärer Ausdruck innerhalb einer Regel.
Wert des linken Operanden Der Wert des Terms auf der linken Seite eines Ausdrucks.
Wert des rechten Operanden Der Wert des Terms auf der rechten Seite eines Ausdrucks.
Testergebnis Das Ergebnis der Auswertung, das entweder True oder False lautet.

Agendaaktualisierung

Diese Aktivität gibt Regeln an, die der Regel-Engine-Agenda zur nachfolgenden Ausführung hinzugefügt werden. Das folgende Beispiel zeigt einen Beispieleintrag für die Agendaaktualisierung:

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

In der folgenden Tabelle werden die Informationen in diesem Eintrag beschrieben:

Artikel Beschreibung
Vorgang Der Vorgang zum Hinzufügen oder Entfernen von Regeln in der Agenda.
Regelname Der Name für die Regel, die der Agenda hinzugefügt oder daraus entfernt wird.
Konfliktlösungskriterien Die Priorität einer Regel, die die relative Reihenfolge bestimmt, in der Aktionen ausgeführt werden, wobei Aktionen mit höherer Priorität zuerst ausgeführt werden.

Regel ausgelöst

Diese Aktivität weist auf die Ausführung einer Regelaktion hin. Das nachstehende Beispiel zeigt einen Eintrag einer ausgelösten Regel:

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

Funktion „Update“

Dieses Beispiel zeigt die Beispielregel „InventoryCheck“ und die Regel „Ship“ in einem Beispielregelsatz mit dem Namen „Order“. Bei der ersten Überprüfung der Regel wird die Bedingung, die der Regel „Ship“ zugeordnet ist, als False ausgewertet. Wenn die Regel „InventoryCheck“ jedoch ausgelöst wird, ändert sich das Feld InventoryAvailable in Order, und in der Engine wird ein Update-Befehl für das Order-Objekt ausgeführt, der eine erneute Auswertung der Regel „Ship“ verursacht. Dieses Mal wird die Bedingung als True ausgewertet, und die Regel „Ship“ wird ausgelöst.

Hinweis

Wenn Ihre Regeln fehlerhaft geschrieben wurden, kann eine Vorwärtsverkettung mit der Update-Funktion zu einer Endlosschleife führen. Wenn Sie den Regelsatz in Microsoft Rules Composer testen, erhalten Sie eine Fehlermeldung mit dem Text Die Regel-Engine hat eine Ausführungsschleife erkannt angezeigt.

Regel „InventoryCheck“

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

Schiffregel

IF Order.InventoryAvailable == True
THEN Shipment.ShipOrder

Ausgabe

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

Beispiele für Ausgaben der Regelsatztest-Ablaufverfolgung

Dieser Abschnitt enthält Beispiele für die Ausgabe von Regelsatztests für verschiedene Typen von Fakten.

Faktentyp: .NET-Klasse

In diesem Beispiel gibt es eine Beispielregel namens „TestRule1“ in einem Regelsatz mit dem Namen „LoanProcessing“:

IF test.get_ID > 0
THEN <do something>

Ausgabe

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

Faktentyp: TypedXmlDocument

Dieses Beispiel zeigt die Assertion einer TypedXmlDocument-Entität mit dem Dokumenttyp Microsoft.Samples.BizTalk.LoansProcessor.Case in der Regel-Engine. Gemäß dem in der Regel definierten Wert für den XPath-Selektor erzeugt und bestätigt die Engine eine untergeordnete TypedXmlDocument-Entität des Typs Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType, die auf dem Dokumenttyp und der Selektorzeichenfolge basiert. Die untergeordnete TypedXmlDocument-Entität wurde in der Bedingung als True ausgewertet, wodurch eine Agenda aktualisiert und eine Regel ausgelöst wurde. Die über- und untergeordneten TypedXmlDocument-Entitäten werden dann zurückgezogen.

In diesem Beispiel wird die Beispielregel „TestRule1“ in einem Regelsatz mit dem Namen „LoanProcessing“ gezeigt:

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

Ausgabe

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