{
    "config": {
        "name": "demo with complex mechanisms",
        "base_url": "https://postman-echo.com",
        "variables": {
            "a": "${sum(10, 2.3)}",
            "b": 3.45,
            "n": "${sum_ints(1, 2, 2)}",
            "varFoo1": "${gen_random_string($n)}",
            "varFoo2": "${max($a, $b)}"
        }
    },
    "teststeps": [
        {
            "name": "transaction 1 start",
            "transaction": {
                "name": "tran1",
                "type": "start"
            }
        },
        {
            "name": "get with params",
            "request": {
                "method": "GET",
                "url": "/get",
                "params": {
                    "foo1": "$varFoo1",
                    "foo2": "$varFoo2"
                },
                "headers": {
                    "User-Agent": "HttpRunnerPlus"
                }
            },
            "variables": {
                "b": 34.5,
                "n": 3,
                "name": "get with params",
                "varFoo2": "${max($a, $b)}"
            },
            "setup_hooks": [
                "${setup_hook_example($name)}"
            ],
            "teardown_hooks": [
                "${teardown_hook_example($name)}"
            ],
            "extract": {
                "varFoo1": "body.args.foo1"
            },
            "validate": [
                {
                    "check": "status_code",
                    "assert": "equals",
                    "expect": 200,
                    "msg": "check response status code"
                },
                {
                    "check": "headers.\"Content-Type\"",
                    "assert": "startswith",
                    "expect": "application/json"
                },
                {
                    "check": "body.args.foo1",
                    "assert": "length_equals",
                    "expect": 5,
                    "msg": "check args foo1"
                },
                {
                    "check": "$varFoo1",
                    "assert": "length_equals",
                    "expect": 5,
                    "msg": "check args foo1"
                },
                {
                    "check": "body.args.foo2",
                    "assert": "equals",
                    "expect": "34.5",
                    "msg": "check args foo2"
                }
            ]
        },
        {
            "name": "transaction 1 end",
            "transaction": {
                "name": "tran1",
                "type": "end"
            }
        },
        {
            "name": "post json data",
            "request": {
                "method": "POST",
                "url": "/post",
                "body": {
                    "foo1": "$varFoo1",
                    "foo2": "${max($a, $b)}"
                }
            },
            "validate": [
                {
                    "check": "status_code",
                    "assert": "equals",
                    "expect": 200,
                    "msg": "check status code"
                },
                {
                    "check": "body.json.foo1",
                    "assert": "length_equals",
                    "expect": 5,
                    "msg": "check args foo1"
                },
                {
                    "check": "body.json.foo2",
                    "assert": "equals",
                    "expect": 12.3,
                    "msg": "check args foo2"
                }
            ]
        },
        {
            "name": "post form data",
            "request": {
                "method": "POST",
                "url": "/post",
                "headers": {
                    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
                },
                "body": {
                    "foo1": "$varFoo1",
                    "foo2": "${max($a, $b)}",
                    "time": "${get_timestamp()}"
                }
            },
            "extract": {
                "varTime": "body.form.time"
            },
            "validate": [
                {
                    "check": "status_code",
                    "assert": "equals",
                    "expect": 200,
                    "msg": "check status code"
                },
                {
                    "check": "body.form.foo1",
                    "assert": "length_equals",
                    "expect": 5,
                    "msg": "check args foo1"
                },
                {
                    "check": "body.form.foo2",
                    "assert": "equals",
                    "expect": "12.3",
                    "msg": "check args foo2"
                }
            ]
        },
        {
            "name": "get with timestamp",
            "request": {
                "method": "GET",
                "url": "/get",
                "params": {
                    "time": "$varTime"
                }
            },
            "validate": [
                {
                    "check": "body.args.time",
                    "assert": "length_equals",
                    "expect": 13,
                    "msg": "check extracted var timestamp"
                }
            ]
        }
    ]
}
