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
