金牛座请求前认证

我在使用金牛座时遇到了问题。有人可以帮我吗?我正在尝试模拟300个用户,但是在向这300个用户发送POST请求之前,我需要生成一个令牌。令牌以这种方式附加到请求:

- url:  http://url?user_token=${auth_token}

现在我有以下情形:

load_api:
    requests:
      - once:
          - url:  https://endpoint/authenticateUser
            method: POST
            headers:
              Content-Type: application/json
            body:
              username: username
              password: pass
              generateToken: true
            extract-jsonpath:
              auth_token:
                jsonpath: $.token
            label: get_token
          - url:  http://url/user_token=${auth_token}
            method: POST
            headers:
              Content-Type: application/json
            body-file: test_data/body.json
            label: sending_300

如您所见,将为每个线程生成一个令牌。我需要在脚本之前生成它,然后将令牌作为参数附加到URL。我曾尝试将这两种情况分开,但那样一来,一个脚本中的变量就不能在另一个脚本中使用。我也在查看全局变量,但似乎只能在执行之前创建这种变量。因此,如果有人可以帮助我,我将不胜感激您所花费的时间。

编辑(非常感谢Dmitri T):

这是一个可行的脚本:

execution:
  concurrency: 300
  scenario: load_test

    scenarios:
      load_test:
        requests:
        - if: ${__groovy(ctx.getThreadNum() == 0 && vars.getIteration() == 1,)}
          then:
          - url:  https://url/authenticateUser
            method: POST
            headers:
              Content-Type: application/json
            body:
              username: username
              password: pass
              generateToken: true
            extract-jsonpath:
              auth_token:
                jsonpath: $.token
            label: get_token
            jsr223: props.put('auth_token',vars.get('auth_token'))
          else:
          - url:  http://endpoint?user_token=${__P(auth_token,)}
            method: POST
            headers:
              Content-Type: application/json
            body-file: test_data/body.json
            label: sending_300_reqs
            think-time: 10s   # waiter for processing auth request
sha00000000 回答:金牛座请求前认证

如果您想一次生成令牌并在300个线程中共享它:

  1. 在第一次迭代期间使用If block为第一个线程生成令牌,并将其转换为JSR223 block中的JMeter属性。 If块的条件为:

    ${__groovy(ctx.getThreadNum() == 0 && vars.getIteration() == 1,)}
    

    以及JSR223块的代码:

    props.put('auth_token',vars.get('auth_token'))
    

    查看Top 8 JMeter Java Classes You Should Be Using with Groovy文章以了解这些ctxpropsvars单词的含义

  2. 在第二个请求中,使用__P() function

    引用属性
    http://url/user_token=${__P(auth_token,)}
    
本文链接:https://www.f2er.com/2354468.html

大家都在问