Skip to content

Parametrization

Stage parametrization allows running a stage multiple times with different values, similar to pytest's @pytest.mark.parametrize.

Individual Parameters

Run a stage with different values for a single parameter:

{
    "stages": [
        {
            "name": "test_users",
            "parametrize": [
                {
                    "individual": {
                        "user_id": [1, 2, 3, 4, 5]
                    }
                }
            ],
            "request": {
                "url": "https://api.example.com/users/{{ user_id }}"
            },
            "response": [
                {"verify": {"status": 200}}
            ]
        }
    ]
}

This creates 5 test runs, one for each user ID.

With Custom IDs

{
    "parametrize": [
        {
            "individual": {
                "status_code": [200, 404, 500]
            },
            "ids": ["success", "not_found", "server_error"]
        }
    ]
}

Combinations

Run a stage with multiple parameter combinations:

{
    "stages": [
        {
            "name": "test_endpoints",
            "parametrize": [
                {
                    "combinations": [
                        {"method": "GET", "endpoint": "/users"},
                        {"method": "GET", "endpoint": "/posts"},
                        {"method": "POST", "endpoint": "/users"},
                        {"method": "DELETE", "endpoint": "/users/1"}
                    ]
                }
            ],
            "request": {
                "url": "https://api.example.com{{ endpoint }}",
                "method": "{{ method }}"
            }
        }
    ]
}

With Custom IDs

{
    "parametrize": [
        {
            "combinations": [
                {"role": "admin", "can_delete": true},
                {"role": "user", "can_delete": false},
                {"role": "guest", "can_delete": false}
            ],
            "ids": ["admin_perms", "user_perms", "guest_perms"]
        }
    ]
}

Multiple Parameter Sets

Chain multiple parameter definitions:

{
    "parametrize": [
        {
            "individual": {
                "env": ["dev", "staging", "prod"]
            }
        },
        {
            "individual": {
                "format": ["json", "xml"]
            }
        }
    ]
}

This creates a cross-product: 3 environments × 2 formats = 6 test runs.

Template Expressions in Parameters

Parameter values can use template expressions:

{
    "substitutions": [
        {
            "vars": {
                "test_users": [
                    {"id": 1, "name": "Alice"},
                    {"id": 2, "name": "Bob"}
                ]
            }
        }
    ],
    "stages": [
        {
            "name": "dynamic_params",
            "parametrize": [
                {
                    "individual": {
                        "user": "{{ test_users }}"
                    }
                }
            ],
            "request": {
                "url": "https://api.example.com/users/{{ user['id'] }}",
                "headers": {
                    "X-User-Name": "{{ user['name'] }}"
                }
            }
        }
    ]
}

Complete Example

{
    "substitutions": [
        {
            "vars": {
                "base_url": "https://api.example.com"
            }
        }
    ],
    "stages": [
        {
            "name": "test_crud_operations",
            "parametrize": [
                {
                    "combinations": [
                        {
                            "method": "GET",
                            "path": "/users",
                            "expected_status": 200,
                            "body": null
                        },
                        {
                            "method": "POST",
                            "path": "/users",
                            "expected_status": 201,
                            "body": {"name": "New User"}
                        },
                        {
                            "method": "GET",
                            "path": "/users/999",
                            "expected_status": 404,
                            "body": null
                        }
                    ],
                    "ids": ["list_users", "create_user", "user_not_found"]
                }
            ],
            "request": {
                "url": "{{ base_url }}{{ path }}",
                "method": "{{ method }}",
                "body": "{{ {'json': body} if body else None }}"
            },
            "response": [
                {
                    "verify": {
                        "status": "{{ expected_status }}"
                    }
                }
            ]
        }
    ]
}