Taurus 预请求身份验证
Taurus pre-request authentication
我在使用 Taurus 时遇到了问题。有人可以帮我吗?我正在尝试模拟 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
如果您想生成一个令牌一次并在 300 个线程之间共享它:
在第一次迭代期间使用 If block and convert it to JMeter Property in JSR223 block 为第一个线程生成令牌。 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 文章以了解这些 ctx
、props
和 vars
词的含义
在您的第二个请求中,使用 __P() function
引用 属性
http://url/user_token=${__P(auth_token,)}
我在使用 Taurus 时遇到了问题。有人可以帮我吗?我正在尝试模拟 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
如果您想生成一个令牌一次并在 300 个线程之间共享它:
在第一次迭代期间使用 If block and convert it to JMeter Property in JSR223 block 为第一个线程生成令牌。 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 文章以了解这些
ctx
、props
和vars
词的含义在您的第二个请求中,使用 __P() function
引用 属性http://url/user_token=${__P(auth_token,)}