# Recipes

A Run Recipe allows you to define a reusable set of filters and value overwrites for test execution.

You can find and manage recipes in **Settings → Run Recipes**. From there, you can create a new recipe, edit an existing one or click the Run button to immediately execute it with the configured filters and values.

When creating a new recipe, start by giving it a title. Then configure the following sections:

## Flow Filters

Control which flows are included in the run:

| Filter Type  | Description                                                 |
| ------------ | ----------------------------------------------------------- |
| Include Tags | The flow must contain **all** of the selected tags.         |
| Exclude Tags | The flow must **not** contain **any** of the selected tags. |

## Test Case Filters

Control which individual test cases are included within the matching flows:

| Filter Type  | Description                                                 |
| ------------ | ----------------------------------------------------------- |
| Include Tags | The test must contain **all** of the selected tags.         |
| Exclude Tags | The test must **not** contain **any** of the selected tags. |

## Value Overwrites

Override default values used during test execution by providing key-value pairs. These values replace any matching values defined in the Value Store.

### **Example**

```json
{
  "BASE_URL": "https://staging.example.com",
  "USERNAME": "testuser123",
  "COUNTRY": "UK",
  "FEATURE_FLAG_CHECKOUT_V2": true
}
```

This is useful for running the same tests across different environments, user accounts, regions, or feature flag configurations — all without modifying the test logic.

## Iterating Over Values

You can configure a recipe to iterate over a list of values, allowing the same set of tests to run multiple times — once for each item in the array.

To do this, provide an array of objects in the Value Overwrites section. Each object represents a separate run with its own values. During execution, the values are injected into the tests just like standard overwrites.

### Setting a PrimaryValue

When iterating over multiple values, it can be helpful to set a `primaryValue` inside each object. This will then be displayed on your test results to highlight which data set was being run.

### Example

```json
[
  {
    "primaryValue": "United Kingdom",
    "COUNTRY": "UK",
    "USERNAME": "user_uk",
    "BASE_URL": "https://uk.example.com",
    "CURRENCY": "GBP"
  },
  {
    "primaryValue": "Germany",
    "COUNTRY": "DE",
    "USERNAME": "user_de",
    "BASE_URL": "https://de.example.com",
    "CURRENCY": "EUR"
  },
  {
    "primaryValue": "France",
    "COUNTRY": "FR",
    "USERNAME": "user_fr",
    "BASE_URL": "https://fr.example.com",
    "CURRENCY": "EUR"
  }
]
```

In this example, the recipe will run the selected flows three times:

1. Once using values for the UK environment
2. Once using values for the German environment
3. Once using values for the French environment
