Flag / Goto action
Quote from ljunggren on September 29, 2020, 7:14 pmIntroduction
We added a "flag" to any action which allows to run a "fast-forward" to a particular action.
Using the function
$util.gotoFlag("flag_name");
the test execution automatically skip all actions until the flag is found using the Javascript function.
Make sure to click the checkbox "Run on IDE" in the Javascript dialog.
The flag setting can be found in the "Description" tag and directly in the action list.
Switch using multiple Ifs
Before, we would combine if-conditions to create switch-like statements. Consider the conditional plug-test case below, where groups are used to drive the conditional logic.
Here we use groups and the exit condition "Break Group" to emulate the Javascript statement
if ($parameter.product == beer && ...){ // Call Add Prduct with format } if ($parameter.product == coffee && ...){ // Call Add Coffee } if ($parameter.product == merchandise && ...){ // Call Add Prduct without format }Groups can be very powerful to drive this kind of logic and is often a very good choice for basic tests.
The Switch statement
As you can see, it's not quite as short as the Javascript switch statement
switch($parameter.product) { case "merchandise": // Call Add product without Format break; case "coffee": // Call Add coffee break; default: // Call Add product with format }If we study this expression in more detail, it's actually more like a classical goto-statement, where instead of going to any code row, you skip forward until a condition is met. This keeps dangerous side-effects of Goto-like functionality low, as you are only moving forward in the code. We therefore decided to implement this in Boozang.
Flag / Goto action
Consider the same example as below, when we need to Plug different test cases based on the value of a variable.
We can now use flag and the goto-function to implement the same logic, but shorter. Start by removing all the groups and instead adding "flags" to all the Plug-test cases accordingly
We can now create a single Javascript expression to handle the logic
switch ($parameter.product.toLowerCase()){ case "coffee": $util.gotoFlag("add_coffee"); break; case "merchandise": case "other": $util.gotoFlag("add_product_without_format"); break; default: $util.gotoFlag("add_product_with_format"); }Note Remember to select the checkbox "Execute on IDE" to make this work.
Using the flag in condition
We also added the flag as an "Exit condition." Note: It will only work when setting "Continue to next action".
Now we have recreated the logic with much less code.
Remember, as you don't want to execute plug-test cases below a list of plugs, it's important that you break out of the test using exit conditions.
Summary
A word of caution: Using "goto flag" can be very powerful, but might make some tests harder to read. Make sure to use with caution, and try and maintain good test structure. Goto flag is not meant to replace good code modularity and code grouping.
Introduction
We added a "flag" to any action which allows to run a "fast-forward" to a particular action.
Using the function
$util.gotoFlag("flag_name");
the test execution automatically skip all actions until the flag is found using the Javascript function.
Make sure to click the checkbox "Run on IDE" in the Javascript dialog.
The flag setting can be found in the "Description" tag and directly in the action list.
Switch using multiple Ifs
Before, we would combine if-conditions to create switch-like statements. Consider the conditional plug-test case below, where groups are used to drive the conditional logic.
Here we use groups and the exit condition "Break Group" to emulate the Javascript statement
if ($parameter.product == beer && ...){ // Call Add Prduct with format } if ($parameter.product == coffee && ...){ // Call Add Coffee } if ($parameter.product == merchandise && ...){ // Call Add Prduct without format }
Groups can be very powerful to drive this kind of logic and is often a very good choice for basic tests.
The Switch statement
As you can see, it's not quite as short as the Javascript switch statement
switch($parameter.product) { case "merchandise": // Call Add product without Format break; case "coffee": // Call Add coffee break; default: // Call Add product with format }
If we study this expression in more detail, it's actually more like a classical goto-statement, where instead of going to any code row, you skip forward until a condition is met. This keeps dangerous side-effects of Goto-like functionality low, as you are only moving forward in the code. We therefore decided to implement this in Boozang.
Flag / Goto action
Consider the same example as below, when we need to Plug different test cases based on the value of a variable.
We can now use flag and the goto-function to implement the same logic, but shorter. Start by removing all the groups and instead adding "flags" to all the Plug-test cases accordingly
We can now create a single Javascript expression to handle the logic
switch ($parameter.product.toLowerCase()){ case "coffee": $util.gotoFlag("add_coffee"); break; case "merchandise": case "other": $util.gotoFlag("add_product_without_format"); break; default: $util.gotoFlag("add_product_with_format"); }
Note Remember to select the checkbox "Execute on IDE" to make this work.
Using the flag in condition
We also added the flag as an "Exit condition." Note: It will only work when setting "Continue to next action".
Now we have recreated the logic with much less code.
Remember, as you don't want to execute plug-test cases below a list of plugs, it's important that you break out of the test using exit conditions.
Summary
A word of caution: Using "goto flag" can be very powerful, but might make some tests harder to read. Make sure to use with caution, and try and maintain good test structure. Goto flag is not meant to replace good code modularity and code grouping.
Quote from Gianni on September 30, 2020, 7:00 pmNice article and feature Mats!
Maybe you can add a screenshot of where the "Execute on IDE" checkbox is and more details on what it does?
Nice article and feature Mats!
Maybe you can add a screenshot of where the "Execute on IDE" checkbox is and more details on what it does?
Quote from ljunggren on September 30, 2020, 7:55 pmI will write a separate entry on it. The main idea is
- Default: Execute Javascript in the application window
- Execute on IDE: Execute the function in the IDE Javascript window
Sometimes, this is not crucial, but in some cases it makes a big difference. I will make a longer forum post on this topic.
I will write a separate entry on it. The main idea is
- Default: Execute Javascript in the application window
- Execute on IDE: Execute the function in the IDE Javascript window
Sometimes, this is not crucial, but in some cases it makes a big difference. I will make a longer forum post on this topic.