Now we will modify the Vera polices to support new business rules.
Sample Business Rules
We will configure Vera to support the following chart.
Sample Requirement: Manual and automated test case approval is based on Type and Regulation (A = Approver) below.
Type | Regulation | Technical | Business | Data Owner | Product Team Member | Product Lead | Quality |
---|---|---|---|---|---|---|---|
Data Migration | N/A | A | A | A | A* | ||
Configuration | None | A (2) | |||||
Configuration | GxP | A | A* | ||||
System | None | A (2) | |||||
System | GxP | A | A | A* | |||
Acceptance | None | A (2) | |||||
Acceptance | GxP | A | A* | ||||
N/A | SOX | A | A* | ||||
N/A | SOX & GxP | A | A | A* | A* | ||
Other | N/A | A** | A** | A*, ** |
*Approve after other approvals are complete. Quality will approve after Product Lead approval.
**prevent author approval
If field value is not set it should be evaluated as None.
Vera Analysis & Design
Based on the above requirement we will need to make the following modifications:
Update qTest Test Cases fields and field values in qTest Project.
Update Test Case Type field value
Add Regulation custom field and add field values
Update the qTest Test Case Record Type data fields in the Records Management Policy in Tutorial Policy Set
Modify the Approval Policy in the Tutorial Policy Set
Add new Approval Groups
Add and modify Approval Templates
The new business rules apply to the qTest Test Case and Automated Test Case Record Types. We will need to update the Approval Policy with the following Approval Templates:
Approval Template Name | Rank | Record Type | Constraints | Level 1 Approvers | Level 2 Approvers | Level 3 Approvers | Prevent Author Approval |
---|---|---|---|---|---|---|---|
Data Migration Test Case | 10 | qTest Test Case, Automated Test Case | Type = Data Migration | Technical, Business, Data Owner | Quality | N/A | false |
Configuration Test Case | 70 | Test Test Case, Automated Test Case | Type = Configuration, Regulation = None OR IsEmpty | Technical, Technical | N/A | N/A | false |
GxP Configuration Test Case | 20 | Test Test Case, Automated Test Case | Type = Configuration, Regulation = GxP | Technical | Quality | N/A | false |
System Test Case | 80 | Test Test Case, Automated Test Case | Type = System, Regulation = None OR IsEmpty | Product Team Member, Product Team Member | N/A | N/A | false |
GxP System Test Case | 30 | Test Test Case, Automated Test Case | Type = System, Regulation = GxP | Technical, Business | Quality | N/A | false |
Acceptance Test Case | 90 | Test Test Case, Automated Test Case | Type = Acceptance, Regulation = None OR IsEmpty | Business, Business | N/A | N/A | false |
GxP Acceptance Test Case | 40 | Test Test Case, Automated Test Case | Type = Acceptance, Regulation = GxP | Business | Quality | N/A | false |
SOX Test Case | 50 | Test Test Case, Automated Test Case | Type = SOX | Product Team Member | Product Lead | N/A | false |
SOX & GxP Test Case | 60 | Test Test Case, Automated Test Case | Type = SOX & GxP | Technical, Business | Product Lead | Quality | false |
General | 100 | Test Test Case, Automated Test Case | N/A | Technical, Business | Quality | N/A | true |
Rank determines the order Route Templates are evaluated by Vera when a record is routed for approval. Use Rank to ensure Constraints are evaluated in the proper order. General is the lowest rank so it is the last Approval Template evaluated.
qTest Project Configuration
First we will look at qTest project Field Settings for Test Case.
We need to update the Test Case Type Combo box list values by adding:
Data Migration
Configuration
System
Acceptance
We need to add a new Test Case custom field Regulation Combo box and add the following list values:
None
SOX
GxP
SOX & GxP
Vera Configuration
Now that you evaluated the business rules and updated qTest, you can update the Records Management Policy and the Approval Policy.
Records Management Policy updates
We are going to update the Records Management Policy from Add Test Run Records to Records Management Policy . Open VeraRMPTutorial-part2.json in an editor for modification.
Add Type and Regulation to the qTest Test Case Record Type in addition to the existing fields, Status, Description and Precondition. The Automated Test Case Record Type inherits fields from the qTest Test Case Record Type with
"Base Record Type": "qTest Test Case"
element."Fields": [ { "Name": "Status", "Is Data": true }, { "Name": "Description", "Is Data": true }, { "Name": "Precondition", "Is Data": true }, { "Name": "Type", "Is Data": true }, { "Name": "Regulation", "Is Data": true } ] }
Here is the updated qTest Test Case Record Type in the Records Management Policy with above code block:
{ "Records Management Policy": { "Version": "1.0.0.0", "Record Types": [ { "Name": "qTest Test Case", "Definitions": [ { "Systems": ["qTest"], "Item Types": ["test-case"], "Singular Name": "Test Case", "Plural Name": "Test Cases" } ], "Author": { "Source": "Route Owner" }, "Constraints": [ { "Type": "Field Is Not Equal", "Name": "Automation", "Value": "Tosca" } ], "Fields": [ { "Name": "Status", "Is Data": true }, { "Name": "Description", "Is Data": true }, { "Name": "Precondition", "Is Data": true }, { "Name": "Type", "Is Data": true }, { "Name": "Regulation", "Is Data": true } ] }, { "Name": "qTest Test Step", "Definitions": [ { "Systems": ["qTest"], "Item Types": ["test-step"], "Singular Name": "Test Step", "Plural Name": "Test Steps" } ], "Fields": [ { "Name": "Description", "Is Data": true }, { "Name": "Expected Result", "Is Data": true } ] }, { "Name": "Automated Test Case", "Base Record Type": "qTest Test Case", "Definitions": [ { "Systems": ["qTest"], "Item Types": ["test-case"], "Singular Name": "Test Case", "Plural Name": "Test Cases" } ], "Author": { "Source": "Route Owner" }, "Constraints": [ { "Type": "Field Is Equal", "Name": "Automation", "Value": "Tosca" } ] } ] } }
Save the Records Management Policy as VeraRMPTutorial-part3.json
Now we have a Records Management Policy configured for the new Test Case business rules. The completed JSON file with qTest Test Case update can be downloaded:
Approval Policy updates
We are going to update the Approval Policy from Add Approval Template to Approval Policy. Open VeraAPTutorial-part1.json in an editor for modification.
First you will update Approval Roles, then you will add the Approval Templates in Rank order to make it easier to manage and troubleshoot.
Approval Roles
There are new Approval Roles you need to add to the Approval Policy: Data Owner, Product Team Member and Product Lead.
"Approval Groups": [ "Business", "Technical", "Quality", "Data Owner", "Product Team Member", "Product Lead" ]
Approval Templates
Now we can add the new Approval Templates and update the General Approval Template.
Data Migration Test Case
Configuration element | Value | Code Snippet |
---|---|---|
Name | Data Migration Test Case | "Name": "Data Migration Test Case" |
Rank | 10 | "Rank": "10" |
Record Type | qTest Test Case, Automated Test Case | "Record Types": [ "qTest Test Case", "Automated Test Case" ] |
Constraints | Type = Data Migration | The Field Is Equal or Field Is One Of constraint can be used for this business rule. "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "Data Migration" } ] |
Level 1 Approvers | Technical, Business, Data Owner | "Levels": [ { "Name": "Level 1", "Approvers": [ "Technical", "Business", "Data Owner" ] } ] |
Level 2 Approvers | Quality | "Levels": [ { "Name": "Level 2", "Approvers": ["Quality"] } ] |
Prevent Author Approval | FALSE | "Prevent Author Approval": false |
The completed Route Template for Data Migration Test case is below:
{ "Route Templates": [ { "Name": "Data Migration Test Case", "Rank": "10", "Prevent Author Approval": false, "Record Types": [ "qTest Test Case", "Automated Test Case" ], "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Values": ["Data Migration"] } ], "Levels": [ { "Name": "Level 1", "Approvers": ["Technical","Business","Data Owner"] }, { "Name": "Level 2", "Approvers": ["Quality"] } ] } ] }
GxP Configuration Test Case
Configuration element | Value | Code Snippet |
---|---|---|
Name | GxP Configuration Test Case | "Name": "GxP Configuration Test Case" |
Rank | 20 | "Rank": "20" |
Record Type | Test Test Case, Automated Test Case | "Record Types": [ "qTest Test Case", "Automated Test Case" ] |
Constraints | Type = Configuration, Regulation = GxP | The Field Is Equal or Field Is One Of constraint can be used for this business rule. Constraints": [ { "Type": "All", "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "Configuration" }, { "Type": "Field Is One Of", "Name": "Regulation", "Values": ["GxP"] } ] } ] Note: The All Boolean constraint is the default constraint. |
Level 1 Approvers | Technical | "Levels": [ { "Name": "Level 1", "Approvers": ["Technical"] } ] |
Level 2 Approvers | Quality | "Levels": [ { "Name": "Level 2", "Approvers": ["Quality"] } ] |
Prevent Author Approval | FALSE | "Prevent Author Approval": false |
The completed Route Template for GxP Configuration Test case is below:
{ "Route Templates": [ { "Name": "GxP Configuration Test Case", "Rank": "20", "Prevent Author Approval": false, "Record Types": [ "qTest Test Case", "Automated Test Case" ], Constraints": [ { "Type": "All", "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "Configuration" }, { "Type": "Field Is One Of", "Name": "Regulation", "Values": ["GxP"] } ] } ], "Levels": [ { "Name": "Level 1", "Approvers": ["Technical"] }, { "Name": "Level 2", "Approvers": ["Quality"] } ] } ] }
GxP System Test Case
Configuration element | Value | Code Snippet |
---|---|---|
Name | GxP System Test Case | "Name": "GxP System Test Case" |
Rank | 30 | "Rank": "30" |
Record Type | Test Test Case, Automated Test Case | "Record Types": [ "qTest Test Case", "Automated Test Case" ] |
Constraints | Type = System, Regulation = GxP | The Field Is Equal or Field Is One Of constraint can be used for this business rule. "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "System" }, { "Type": "Field Is One Of", "Name": "Regulation", "Values": ["GxP"] } ] Note: The All Boolean constraint is the default constraint. |
Level 1 Approvers | Technical, Business | "Levels": [ { "Name": "Level 1", "Approvers": [ "Technical", "Business" ] } ] |
Level 2 Approvers | Quality | "Levels": [ { "Name": "Level 2", "Approvers": ["Quality"] } ] |
Prevent Author Approval | FALSE | "Prevent Author Approval": false |
The completed Route Template for GxP System Test case is below:
{ "Route Templates": [ { "Name": "GxP System Test Case", "Rank": "30", "Prevent Author Approval": false, "Record Types": [ "qTest Test Case", "Automated Test Case" ], "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "System" }, { "Type": "Field Is One Of", "Name": "Regulation", "Values": ["GxP"] } ], "Levels": [ { "Name": "Level 1", "Approvers": ["Technical", "Business"] }, { "Name": "Level 2", "Approvers": ["Quality"] } ] } ] }
GxP Acceptance Test Case
Configuration element | Value | Code Snippet |
---|---|---|
Name | GxP Acceptance Test Case | "Name": "GxP Acceptance Test Case" |
Rank | 40 | "Rank": "40" |
Record Type | Test Test Case, Automated Test Case | "Record Types": [ "qTest Test Case", "Automated Test Case" ] |
Constraints | Type = Acceptance, Regulation = GxP | The Field Is Equal or Field Is One Of constraint can be used for this business rule. "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "Acceptance" }, { "Type": "Field Is One Of", "Name": "Regulation", "Values": ["GxP"] } ] Note: The All Boolean constraint is the default constraint. |
Level 1 Approvers | Business | "Levels": [ { "Name": "Level 1", "Approvers": [ "Business" ] } ] |
Level 2 Approvers | Quality | "Levels": [ { "Name": "Level 2", "Approvers": ["Quality"] } ] |
Prevent Author Approval | FALSE | "Prevent Author Approval": false |
The completed Route Template for GxP Acceptance Test case is below:
{ "Route Templates": [ { "Name": "GxP Acceptance Test Case", "Rank": "40", "Prevent Author Approval": false, "Record Types": [ "qTest Test Case", "Automated Test Case" ], "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "Acceptance" }, { "Type": "Field Is One Of", "Name": "Regulation", "Values": ["GxP"] } ], "Levels": [ { "Name": "Level 1", "Approvers": ["Business"] }, { "Name": "Level 2", "Approvers": ["Quality"] } ] } ] }
SOX Test Case
Configuration element | Value | Code Snippet |
---|---|---|
Name | SOX Test Case | "Name": "SOX Test Case" |
Rank | 50 | "Rank": "50" |
Record Type | Test Test Case, Automated Test Case | "Record Types": [ "qTest Test Case", "Automated Test Case" ] |
Constraints | Type = SOX | The Field Is Equal or Field Is One Of constraint can be used for this business rule. "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "SOX" } ] Note: The All Boolean constraint is the default constraint. |
Level 1 Approvers | Product Team Member | "Levels": [ { "Name": "Level 1", "Approvers": [ "Product Team Member" ] } ] |
Level 2 Approvers | Product Lead | "Levels": [ { "Name": "Level 2", "Approvers": ["Product Lead"] } ] |
Prevent Author Approval | FALSE | "Prevent Author Approval": false |
The completed Route Template for SOX Test case is below:
{ "Route Templates": [ { "Name": "SOX Test Case", "Rank": "50", "Prevent Author Approval": false, "Record Types": [ "qTest Test Case", "Automated Test Case" ], "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "SOX" } ], "Levels": [ { "Name": "Level 1", "Approvers": ["Product Team Member"] }, { "Name": "Level 2", "Approvers": ["Product Lead"] } ] } ] }
SOX & GxP Test Case
Configuration element | Value | Code Snippet |
---|---|---|
Name | SOX & GxP Test Case | "Name": "SOX & GxP Test Case" |
Rank | 60 | "Rank": "60" |
Record Type | Test Test Case, Automated Test Case | "Record Types": [ "qTest Test Case", "Automated Test Case" ] |
Constraints | Type = SOX & GxP | The Field Is Equal or Field Is One Of constraint can be used for this business rule. "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "SOX & GxP" } ] Note: The All Boolean constraint is the default constraint. |
Level 1 Approvers | Technical, Business | "Levels": [ { "Name": "Level 1", "Approvers": [ "Technical", "Business" ] } ] |
Level 2 Approvers | Product Lead | "Levels": [ { "Name": "Level 2", "Approvers": ["Product Lead"] } ] |
Level 3 Approvers | Quality | "Levels": [ { "Name": "Level 3", "Approvers": ["Quality"] } ] |
Prevent Author Approval | FALSE | "Prevent Author Approval": false |
The completed Route Template for SOX & GxP Test case is below:
{ "Route Templates": [ { "Name": "SOX & GxP Test Case", "Rank": "60", "Prevent Author Approval": false, "Record Types": [ "qTest Test Case", "Automated Test Case" ], "Constraints": [ { "Type": "Field Is Equal", "Name": "Type", "Value": "SOX & GxP" } ], "Levels": [ { "Name": "Level 1", "Approvers": ["Technical", "Business"] }, { "Name": "Level 2", "Approvers": ["Product Lead"] }, { "Name": "Level 3", "Approvers": ["Quality"] } ] } ] }
Configuration Test Case
System Test Case
Acceptance Test Case
General
add a qTest import file to test all route tempaltes!