如何正确捕获Token并在测试场景中传递?测试返回401未授权
负载测试中正确捕获并传递Token解决401未授权问题
你的配置存在两个核心问题,导致Token无法被正确捕获和传递:
1. Capture配置层级错误
原配置中将capture放在了json字段的子节点下,这不符合Artillery的语法规范——capture是请求的顶级配置项,必须与url、json、expect平级。
2. JSON提取路径可能不匹配
需要确认/sessions接口返回的Token结构,确保JSONPath表达式能准确提取到Token值。
修正后的完整配置
config: target: "http://localhost:3333" phases: - name: "Load Test Periodico" arrivalRate: 1 duration: 5 before: flow: - post: url: "/sessions" json: email: "email@email.com" password: "senha123" # 将capture移至与json平级的位置 capture: - json: "$.token.token" # 根据实际返回结构调整路径 as: "token" expect: - statusCode: 200 # 可选:添加日志验证Token是否被正确捕获 - log: "Captured token: {{ token }}" scenarios: - name: "ProcedureController.index" flow: - get: url: "/procedures" headers: Authorization: "Bearer {{ token }}"
额外排查步骤
- 验证接口返回结构:用curl调用
/sessions接口,确认Token的嵌套层级:curl -X POST http://localhost:3333/sessions \ -H "Content-Type: application/json" \ -d '{"email": "email@email.com", "password": "senha123"}'- 如果返回是
{"token": "abc123"},将提取路径改为$.token; - 如果返回是
{"token": {"token": "abc123"}},保留$.token.token即可。
- 如果返回是
- 检查Authorization头格式:确保
Bearer与Token之间有一个空格,避免因格式错误导致401。
内容的提问来源于stack exchange,提问作者Murilo Montino
相关产品推荐
相关产品推荐

