# Creating and Running Workflows

> Open Workflows, manage the Integration tests list, then build flows in the editor with Test details, Test library, and Node types—extract variables, add assertions, and launch.

Source: https://totalshiftleft.ai/help-center/product-documentation/creating-and-running-workflows

## Overview

This guide walks the **Workflows** page and the visual flow editor exactly as they appear in Shift Left Studio: the **Integration Tests** list (search, bulk run/delete, **Add Test**) and the builder (**Test Details**, **Test Library**, **Node Types**, canvas, **Save**, and **Launch Workflow**). Explore the capability at [integration test workflows](/features/test-execution/integration-test-workflows).

For concepts and terminology, see [Understanding Workflows](/help-center/product-documentation/understanding-workflows).

## Before you begin

- Select **Workflows** in the top navigation. The page header reads **Workflows** with the subtitle *"Create and manage end-to-end workflows/Integration tests,"* and the table below is titled **Integration Tests**.
- You need at least one project containing tests — the **Test Library** in the editor lists tests from your projects to drop on the canvas.

## Step 1 — Manage the Integration Tests list

The top-right buttons above the table are:

| Button | What it does |
|--------|--------------|
| **Select All** / **Deselect All** | Toggle selection of every workflow in view. |
| **Run Selected** | Runs the checked workflows (a toast confirms *"Started execution for N workflow(s)"*). |
| **Delete Selected** | Deletes the checked workflows after a **Delete Workflow Tests** confirmation. |
| **Add Test** | Creates a new workflow and opens the flow editor. |

Use the **Search Integration tests…** box to filter by name, description, or status; a *"Showing N of M tests"* count sits beside it. Columns are **Test Name**, **Status** (last run: Passed / Failed / Error / Running / Not Run), **Last Run**, and **Description**, each sortable. Per-row action icons are **Run Test**, **View Test Result**, **Edit Test**, **Copy workflow**, and **Delete Test**.

## Step 2 — Open the editor and set Test Details

Click **Add Test** (or a row's **Edit Test**). The flow editor opens with a left sidebar; the header shows the workflow name (**New Integration Test** for a new one).

Select the **Test Details** tab and fill:

| Field | What it does |
|-------|--------------|
| **Name *** | Required. Placeholder *"Enter integration test name."* Saving is blocked with *"Name is required to save"* until set. |
| **Description** | Placeholder *"Describe what this integration test does…"* |
| **Tags** | Comma-separated labels, placeholder *"e.g. smoke, billing (comma-separated)."* Saved when the field loses focus. |

Use **Collapse Sidebar** / **Expand Sidebar** to reclaim canvas space.

## Step 3 — Add API test nodes from the Test Library

1. Open the **Test Library** tab. It shows a **Search tests…** box and a tree: **Project → Feature → Endpoint → Test**. Endpoints display an HTTP method badge (GET/POST/PUT/DELETE/PATCH); use **🔄 Refresh** to reload.
2. **Drag a test onto the canvas or click to add** it — the tip box reads *"Drag tests onto the canvas or click to add them to your flow."* Each becomes an API test node.
3. A workflow may chain tests from **multiple projects**; the library lists each project separately. If the tree is empty you'll see *"No projects found — Create a project first to see tests here."*

## Step 4 — Add system and logic nodes

1. Open the **Node Types** tab (**System Blocks**). Nodes are grouped under **Variables & State**, **Data Operations**, **Advanced Control Flow**, **Assertions & Validation**, **Execution Control**, **Utilities**, and **Workflow-Level Gates**.
2. Every start point needs a **+ Start** node and every flow needs a **+ Stop** node (both under **Execution Control**). Add logic nodes as needed, e.g. **+ IF/ELSE**, **+ FOR EACH**, **+ Wait/Delay**, **+ Script**, **+ Log/Debug**.
3. Click a node (adds it at the current view center with slight jitter) or drag it onto the canvas.

## Step 5 — Connect nodes

1. Drag from a node's **output handle** to the next node's **input handle**. Nodes expose typed handles — a green **success** path, a blue **data** path, and a red **Fail** path where applicable.
2. Invalid connections are rejected with an **Invalid connection** popup. Adding a test with a missing ID shows **Cannot add test** — *"Test ID is missing. Please select a valid test from the sidebar."*
3. Use the canvas controls to zoom and to **Align all nodes in a straight line** or **Align all nodes to grid**; a minimap helps navigate large flows.

## Step 6 — Extract variables to pass data downstream

1. Double-click an API test node to open its inspector, then find **Variable Outputs**. The help text reads *"Define variables to extract from this test's response. These variables can be used in subsequent tests."*
2. Click **Add Output Variable** and set:

| Field | What it does |
|-------|--------------|
| **Variable Name *** | The name later nodes reference. |
| **Source Type *** | Where to read from: **Response Body**, **Response Header**, **Status Code**, or **Status Text**. |
| **Path *** | The path/key within the source (e.g. a JSON path or header name). |
| **Array Strategy** | For arrays: **First Item**, **Last Item**, **All Items**, or **By Index** (then set **Array Index**). |
| **Transform (Optional)** | An optional value transform. |
| **Required (test fails if extraction fails)** | Fail the step when the value can't be extracted. |

## Step 7 — Add assertions

- For per-step checks, add an **+ Assertion** node (**✓ Assertion**, with `actual`/`expected` inputs and a `result`/`Fail` output) or a **+ Data Compare** node (**⚖ Compare**, with `left`/`right` inputs; *"Returns true/false"*). Operators include equals, not-equals, contains, greater/less than, schema match, exists, and matches.
- For run-wide SLA checks, open **Workflow-Level Gates → Post-Run SLA Gate**. Its description reads *"Evaluates aggregate metrics (throughput, error rate, latency percentiles) across all API calls in the run. Not added to the canvas — it runs after the flow finishes."* This opens the **Workflow Assertions** editor.

### Workflow Assertions editor

Click **Add workflow assertion**, then for each item (**Assertion #N**) choose a **Type** and enter a **Value**:

- **Performance**: Response Time Less Than / Greater Than, Latency Less Than, Throughput Greater Than, Error Rate Less Than, SLA Compliance.
- **Status Code**: Status Code Equals, Not Equals, In Range, One Of.

Latency/response-time types expose a **Percentile** dropdown (**p50**, **p95**, **p99**, **avg**, **max**; default **p95**). Add an optional **Description**. The editor notes: *"A failing assertion downgrades the run status from PASSED to FAILED."* Remove an item with its trash icon.

## Step 8 — Save

Click **Save** in the header (it reads **Save *** when there are unsaved changes, **Saving…** during save, and **Saved** just after). The header also shows an **Unsaved changes** indicator. On save the editor validates the **Start → Stop** structure; if invalid, a validation modal lists the errors. A new workflow gets its saved ID automatically so it can then be launched.

## Step 9 — Launch and view the report

1. Click **Launch Workflow** (it shows **Launching…** while running). If a saved workflow has unsaved edits, an **Unsaved Changes** dialog offers **Cancel**, **Launch Saved Version**, or **Save & Launch** — noting *"If you launch now, the previously saved version will run — your latest edits won't be included."* Save first if you must run your latest changes.
2. You can also run from the list using a row's **Run Test** or **Run Selected**.
3. When the run finishes, a **Workflow Execution Report** modal opens on the high-level view; click through to the detailed, per-node report and back with **Back to High Level Report**.

## Troubleshooting

- **Save is blocked / validation modal appears** — the graph lacks a valid **Start → Stop** path; add or reconnect the missing nodes.
- **"Please save the integration test first"** on launch — a brand-new workflow must be saved once before it can run.
- **My latest edits didn't run** — you chose **Launch Saved Version**; use **Save & Launch** instead.
- **A downstream node has no data** — confirm the upstream node's **Variable Outputs** are defined and the **Variable Name** matches what you reference.
- **The run shows FAILED despite passing steps** — a **Post-Run SLA Gate** (Workflow Assertion) failed on an aggregate metric; open **Workflow Assertions** to review thresholds.

## Related articles

- [Understanding Workflows](/help-center/product-documentation/understanding-workflows)
- [Workflow execution details](/help-center/product-documentation/workflow-execution-details)
- [Local Runner](/help-center/product-documentation/local-runner)
- [Test execution](/help-center/product-documentation/test-execution)

