Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Overview

In specific scenarios, the system allows the user to define what parameter values can never be tested together or , on in the other hand, scenarios where parameter values can only be tested together. 
For that, the user can apply constraints to support these cases.

...

So that the model can understand the requirements, you can have the option to define invalid constraints (values that can never be tested together), and/or bound constraints (values that can only be tested together) to train the model.

...

In this example, let's assume Internet Explorer (IE) is not supported on Apple computers , so it would be impossible for a tester to execute a test case that instructed them to launch IE from a Mac running on its native operating system. Accordingly, we do not want any tests generated to include combinations such as “OS X” and “IE8” in the same test case.

...

On the Rules ->Constraints screen, you will need to click on two red XsX’s. Hover over the first Value of the Invalid Pair and click on the red X that appears

...

As you enter your Constraints, you will see them listed to the left:



After entering you enter these two Invalid Pairs, clicking on the “Scenarios” button will create a completely new set of test cases that excludes those two pairs of Values (and only those two pairs of Values). Each test with ‘OS X’ as the operating system will have a browser other than IE.

...

Tip

Do you need to add a lot of Invalid Constraints?

  • Imagine you had an application that asked, “Would you like to add a hotel to your travel reservation?” Any scenarios with “Do Not Add a hotel” would require many, many different Invalid Constraints between things like “Do Not Add a Hotel” and “Hotel Chain Preference = XX”. For situations like those, the Bound Constraint feature will help you accomplish your constraint handling much faster.
  • If you have more than 10 or so Invalid Constraints (or Bound Constraints) in your plan, you might find that it is faster to export your plan into Excel and document your paired values in Excel. If so, make sure to both (1) add multiple paired values in Xray Test Case Designer before you export into Excel (so you can copy and paste the Xray Test Case Designer formatting for Invalid Constraints and/or Bound Constraints), and (2) ensure that you use the exact spelling of Values (e.g., ‘cutting and pasting’ Values will usually be safer than typing)

Watch out for “Not Applicable” Values.

  • Do you need to add some of them to your plan? Do you need to invalidate the combination of “Not Applicable” combination with other specific Values?
  • Especially watch out for situations where you have multiple related “Not Applicable” values in a plan. Would it make sense to create a “Bound Constraint” between ‘Hotel Chain Preference = Not Applicable’ and ‘Type of Room’ = Not Applicable’?


...

Even though the test calls for not adding the hotel, the data row specifies proceeds to specify the preference and type of room, which is clearly incorrect.

...

This is because something will need to appear in test cases that include the value “Do Not Add a HotelHotel”.

We will want “Not Applicable” to appear for both “Hotel Chain Preference” and “Type of Room” in every scenario that includes the value “Do Not Add a Hotel”.

Info

The exact syntax of the conditional value and its position in the list doesndon't matter, it could have been "N/A" as the last value.


Next, you’ll want to ensure make sure that “Do Not Add a Hotel” only gets paired with the “Not Applicable” Values. You have two options under the “Constraints” tab. One is quick, the other is slow. Let’s see the slow option, first:

Namely, it’s adding a lot of “Invalid Constraints,” Constraints” as described in the previous article in this section.

...

UI Steps
sizesmall
UI Step

Click on the green arrow icon to the right from the first value name (it appears on hover)

UI Step

Click on the green arrow icon to the right from the second value name (it appears on hover)

UI Step

Confirm how you’d like to have the bound constraint operate:

Most of the time , when you have “Not Applicable” as an option, you will use “mutually bound constraints,” constraints” as in this case. Here, we want “Do Not Add a Hotel” to be bound with the Type of Room as “Not Applicable,” Applicable” AND we want to have the Type of Room of “Not Applicable” to be bound with “Do Not Add a Hotel” so we mark this one as a Mutually Bound Constraint.

...

  • You can use the Invalid Constraint Feature to accomplish anything that the Bound Constraint feature can do.
  • The Invalid Constraint feature is frequently less confusing for new users . Don’t hesitate to use the Invalid feature instead of the Bound Constraint feature.
  • If you have more than 10 or so Bound Constraints or Invalid Constraints in a plan, you might find that it is easier and faster to document your paired values in Excel. If so, we would recommend (a) adding multiple paired values before you export into Excel, and (b) ensuring that you use the exact spelling of Values (e.g., ‘cutting and pasting pasting’ is usually safer than typing)
  • Especially watch out for situations where you have MULTIPLE related “Not Applicable” values in a plan. Would it make sense to create a “Bound Constraint” between, say, ‘Hotel Chain Preference = Not Applicable’ and ‘Type of Room’ = Not Applicable’? In the example above, it WOULD make sense to include that Bound Constraint. Every time ‘Hotel Chain Preference’ = ‘Not Applicable,’ Applicable’ we would want ‘Type of Room’ to also be ‘Not ApplicableApplicable’ also. Similarly, every time ‘Type of Room’ = Not Applicable, we would want ‘Hotel Chain Preference’ to also be ‘Not ApplicableApplicable’. This is an example of a type of constraint that the human brain would handle effortlessly without even consciously applying logical rules.

...



As a reminder, to apply a bound constraint, you need to hover over value 1, click the green arrow icon to the right from the value name, then do the same for value 2, and select the appropriate option from the three 3 provided ones.

One-way Bound Pair

The underlying relationship type: is many-to-one, represented by WHEN-THEN statements in the left column.

...

Note
You may argue that the statement at the bottom still looks correct in this direction; , however , you need to consider how the algorithm interprets keep in mind how the word "must" is interpreted by the algorithm. Since the evaluation is done at the "pair of values" level, "must have Breed of Animal as Siamese" = "must NOT have Breed as Persian, Shiba Inu, Golden Retriever, Arabian" - of which "Persian" is incorrectly excluded, therefore this direction wouldn't work for this example. We could use such direction if we had multiple types that can be with only 1 breed.

...

The underlying relationship type: is one-to-one, represented by ALWAYS-ALWAYS statements in the left column.

With Mutually Bound Constraints, the values are exclusive to each other. In this example, there is only one horse breed is in the second parameter. So, with 1 constraint, we can specify that "Horse" should not be paired with "Siamese, Persian, Shiba Inu, Golden Retriever" AND "Arabian" should not be paired with "Cat, Dog" - i.e., "Horse" and "Arabian" must only be tested together.

...

The final set of rules for this model (in the verbal form) would look like this:

...

In essence, Bound Constraints and Invalid Constraints perform similar tasks: they ensure that certain values only or never appear together - making all generated scenarios valid within the model scope. From a different point of view, Bound Constraints and Mutually Bound Constraints actually invalidate many values , and Invalid Constraints bind many values, behind the scenes.


"Skip" constraints

"Skip" constraints are only available under the Advanced Mode , which is enabled per request (toggle in the top left of the Constraints screen).

"Skip" constraints allow for certain parameters to be excluded from test cases when it is not appropriate for them to appear. It is a faster alternative to the "Not applicable" + Bound Pairs approach. However, as the feature is in the beta stage, please note that there are a couple of open defects, specifically around the interaction of "Skip" constraints with the regular ones. So if you encounter any issues, feel free to reach out to Support or avoid skips for the time being.

...

In this model, only customers who are in First Class get in-flight dining. Coach and Business class customers do not get in-flight dining. Therefore, test cases with Coach and Business class customers should have no value for “Food ChoiceChoice”.


First, navigate to Rules→ Constraints. Next, click the toggle to change to Advanced Mode – that is the only way to implement "Skip" constraints:

...

You can also skip multiple parameters that are listed next to each other in the Parameters screen. For example, let’s say that Coach customers now get no food, drink, or checked bag. Thus, they should have blanks for each of those parameters. Since we have those three 3 sequentially in the table of parameters (refer to the model screenshot at the start of this article), we can use the following syntax:

...

The boundaries are inclusive; , therefore, for our example, that looks like this:

Now, when we generate our test suite by navigating to Scenarios, any rows with “Coach” for “Ticket Type” have no value for “Food Choice”, “Drink Choice”, or “Checked Bag”:

...

The final component of "Skip" constraints is the skip ‘skip to end end’ capability. In this case, we can tell Xray Test Case Designer that for some parameter parameters values, skip all parameters listed later (below) on the “Parameters” page.

So, for our example, we could return to our Parameters page and reorder the elements so that “Food ChoiceChoice”, “Drink ChoiceChoice”, and “Checked Bag” are the last three parameters:



Then, we use the syntax below to skip to the end:

          Parameter[Parameter Value] >> First Parameter to be skipped::!!

...

Lastly, you can do a quick review of available options & syntax by clicking the “Usage” button in the top-right section of the Advanced Mode:

...

To edit a constraint, you need to change the view to "bulk" . " Then you can edit the constrain type by selecting the corresponding operator. 


It is not possible to edit a constraint constrain at the Standard View. In the Standard View , you can are only allowed to delete and create a new constraintconstrain.

Delete a Constraint

To delete a constraint, hover the constraint and select the delete option:

...