我在使用 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