# Business Process Orchestration beta
We have introduced a new functionality in Virtuoso that allows users to create orchestrations, enabling the sequencing of tests and sharing context data between them. With orchestrations, you can execute a series of tests in a specific order, while maintaining consistent configurations across runs.
The Business Process Orchestration module displays all orchestrations associated with your project, allowing you to edit their configurations and manage their executions. You can access orchestrations for your project by clicking on the orchestration icon in the sidebar.
# Orchestration management
The orchestration list shows all the orchestrations belonging to the selected project. Clicking the menu icon next to any of the entries will give you access to the following action:
- Trigger the orchestration
- Edit the orchestration
- Archive the orchestration
Restoring the orchestration
It is not possible to restore an orchestration. After it has been archived, the orchestration remains accessible only for historical reference, and it will no longer be possible to edit or trigger it.
It is also possible to select multiple orchestrations and trigger or archive them in a single action.
By clicking the name of any orchestration, you’ll be redirected to its Orchestration editor page, which provides detailed information on the orchestration stages, execution results, settings, and allows for editing the orchestration.
# Creating an orchestration
Click on the New orchestration
button to open the orchestration editor. This will let you configure all the properties needed to define an orchestration - most properties are optional, but every orchestration needs a name.
# Orchestration name
There are no restrictions to the name. We recommend providing one that makes the orchestration easily identifiable.
# Description (optional)
An orchestration can be given a description to identify its purpose, so when other team members view the orchestration they can easily understand what it does.
# Device configuration (optional)
A new orchestration will come pre-configured to run on Virtuoso's default Chrome browser. You can, however, change this configuration and add custom devices.
Device limitations
- At least one device is required - by default it'll be Virtuoso Chrome browser
- A maximum of 10 additional devices can be added
- Virtuoso Chrome browser may be disabled, if at least one another device is added
The journeys associated with the orchestration will run for each device configuration, and the corresponding execution will be shown as its own journey execution on the results section. Each device configuration may be selected from a combination of properties that include operating system, browser, device make, model, version, and orientation.
# Environment (optional)
By default, the orchestration will be executed using the default environment for each goal. If a goal does not have a default environment assigned to it, the project's default environment will be used instead. Selecting a different environment for the orchestration will override both these settings, for the whole orchestration.
If the environment has an associated bridge, it will also be used by the orchestration when executing journeys. The associated bridge for each environment option will be displayed in the dropdown list.
# Data sharing (optional)
Each journey can receive input data and it will also output data, resulting from the variables used and created during the execution.
By turning on the Enable data sharing
option, we ensure that data produced by journeys at the end of a stage is passed as initial data to all the journeys of the stage that comes immediately after.
Limitations on data sharing
At the moment, it is not possible to set the order of journeys inside a stage. When multiple journeys are present, there's no guarantee as to which journeys will start or finish first.
All journeys inside a stage get the same initial data, passed from the stage that came before. However, each of these journeys can then modify / add to that context during its own execution. If multiple journeys add or modify a variable with the same name, the data that will be passed to the stage that comes after will carry the value that was last set for said variable - typically, the value set by the last journey that executed.
If complete control over the value passed to the next stage is a requirement, we recommend isolating the journey that produces it in its own stage.
No sensitive data sharing
Variables marked as "sensitive", such as those that can be configured in environments, are not shared between stages.
This ensures that sensitive data is not inadvertently passed as initial data and shared with journeys that should not have access to it.
# Editing orchestrations
Once in the editor page for an orchestration, there are two types of changes that can be made to it - global settings and stage configurations.
To change the global settings of an orchestration, click on the cog icon . This will bring up the same panel described for the orchestration creation, where the name and description of an orchestration can be changed, as well as settings that affect the execution of all stages.
# Editing the orchestration flow
To make changes to the flow of the orchestration, click the edit icon instead. This allows you to modify the orchestration flow and manage the stages with ease.
The orchestration flow editor allows you to create, move, and delete stages from the orchestration. It begins as an empty canvas with only a START node.
START node
The orchestration flow is directional - stages will execute in sequence, depending on how the connections between them are defined. The START node signals what nodes will execute first, right after the orchestration triggers.
Single sequential connections
At this time, no parallel stages are supported. The flow can only be defined as a sequence of individual stages.
The controls at the bottom the canvas allow for the following actions:
- (Delete) - deletes a stage or a connection, depending on which is selected.
- (Duplicate stage) - creates a copy of the selected stage - connected to the selected one - carrying all the configurations already defined. This is an easy way to create variations of a stage.
- (Add/Insert/Append new stage) - adds a new, empty stage to the flow. Where it is added depends on what is selected before the button is clicked:
- A stage is selected - the new stage is added with a connection to the selected stage.
- A connection is selected - the new stage is added in between the two stages on the ends of that connection, already connected to both of them. This provides an easy way to add a stage that was missing from the flow, without having to break and create new connections.
- Nothing is selected - the new stage is added in the center of the canvas, unconnected from all others.
- (Zoom in) - increases the level of zoom on the nodes of the flow.
- (Zoom out) - decreases the level of zoom on the nodes of the flow.
- (Zoom to fit) - adjusts the level of zoom and position of the flow so that all nodes are visible.
- (Show/Hide stage details) - toggles the visibility of a panel, for each node, containing information on that node.
# Connecting stages
There are several cases where the connection between two stages is created automatically, such as when a stage is duplicated or when a new stage is added in between two existing ones.
If you wish to connect two that are unconnected, click the right-side arrow handle on the first stage and drag it to the left-side arrow handle of the second stage. The connection between the two will be created, provided it is valid.
# Targeting journeys with stages
By clicking on a stage, or when a new stage is added to the flow, a side-panel with the stage configuration will open.
Through these configurations, a set of journeys may be targeted, which will be executed when an orchestration execution reaches the corresponding stage in the flow. Stages can be of one of two main types - static or dynamic.
Static stages contain a fixed set of predefined journeys that remain unchanged. No filters are applied, and the journeys in this stage will not update automatically if new journeys are added to, or existing ones are removed from, a goal.
Dynamic stages are based on filters, allowing its journey set to update automatically. For example, you can include all journeys from a goal, and any future additions or deletions within that goal will be reflected in the stage. Similarly, using a tag filter ensures the stage dynamically adjusts as journeys gain or lose that tag.
# Tag-based stages (Dynamic)
When using tags, you start by selecting a goal (or all goals), ensuring the Tags
option is selected, and then choosing a set of tags to use as filters.
Multiple tags can be selected for a single stage. This results in an AND
operation between all the selected tags, i.e., journeys will only be considered for the stage if they match ALL selected tags.
This method dynamically updates to reflect changes in the journeys: journeys that lose required tags will be excluded, while new journeys that gain the required tags will be added on the next execution. This evaluation occurs at execution-time; the list of journeys shown in the panel is the result of applying the filters at that moment.
# Journey-based stages
To define a stage using direct journey selection, start by selecting a specific goal and then clicking the Journeys
option to make the journey selection field available.
From here, you can proceed in one of the following ways:
- Use all journeys - All current and newly added goal journeys will be included in the stage. (Dynamic)
- Manually select journeys - Only selected journeys will be included, and newly added ones will not. (Static)
Journey-based stages can be edited after creation. If a goal is archived, or journeys are deleted, they'll be removed from the stage.
Draft journeys
Draft journeys are not included in the executions. Even if a draft journey appears selected for a stage, it will not be executed until it gets published.
Stage indicators
There are stage indicators while editing or viewing the stages. These indicate the properties of a stage. They can show, at a glance, if the stage is Dynamic
or Static
, if it uses All Goals
or a specific one, if it targets All Journeys
or a specific number of them, tags, etc.
These indicators can also be shown next to the stages in the flow by using the Show stage details
toggle.
# Data-driving journeys
Journeys with an associated data table can be executed multiple times, once for each row in the table. You can mark the stage as data-driven if you would want the journeys to use their associated data tables for execution.
By clicking the icon next to a journey name, you'll bring up the data-row selector, which you can use to customize the rows that will be executed for the corresponding table in that stage.
Row selection per table
The customization of data-rows is made per table. This means that if two journeys have the same associated table, the custom selection of rows will apply to both.
# Orchestration history
The lower part of the orchestration editor page showcases the history of that orchestration.
In a single timeline, it displays both the updates to the execution and the execution results in descending order, the most recent event being at the top. This section helps you track everything related to the orchestration over time.
The history can be filtered, to quickly show you the portion of events you're interested in. Filters include:
- Status - select between all the possible statuses for an execution, and include or remove orchestration updates.
- Trigger - which user made the update or triggered the execution of the orchestration.
- Date - select a specific date range for the events you want to see.
- Orchestration number - type a specific execution's number here to go directly to it (all other filters are ignored).
# Drill down of execution details
Each orchestration execution has information divided into three levels:
# First level - Orchestration
This level displays the selected orchestration execution number
and status
, along with who triggered
the execution, trigger date
, and duration
(ongoing or final).
If the orchestration execution is selected, the second level will be expanded and the flow on the upper part of the page will change to a view-only version of the orchestration as it was at the time it was triggered. That flow cannot be altered but interacting with its stages will reveal how they were configured during the execution.
# Second level - Stage
The middle level of information is presented as a list of stage executions, each showing the name
and status
of the stage, as well as trigger date
and duration
(ongoing or final).
Hovering over a stage execution will highlight the corresponding stage on the flow section; clicking it will reveal the last level of information.
# Third level - Journey
The third and final level of information focuses on the individual journey executions.
Each item on the table includes status
, goal
name, journey
number and name, device
information, data table
, environment
, and duration
(ongoing or final). All of these resources will have links to them, if available.
It is important to note that the same journey may be executed multiple times if data tables and/or devices are used in the stage. For that reason, and to facilitate searching for specific executions, all results are sorted according to the column order - starting with goal
, then journey
, and so on.
Searching for journey executions
The table is paginated when many journey executions are present so you can search for a specific one by sequentially looking at the columns while progressing through the pages:
- Increase the page number until the goal you're looking for appears in the
goal
column. - Then, continue increasing the page number until the journey you're looking for appears in the
journey
column. - Repeat the process for the following columns, in order, until you find the "combination" of factors you're looking for.
Only interested in failures?
If you only care about the failing journeys executions, use the Show only failed journeys
toggle at the bottom of the table.