You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Locust如何提取响应值并应用于后续请求的JSON payload

Locust 响应JSON值提取及独立文件Payload复用操作指南

Locust没有内置类似Gatling的saveAs方法,但其单用户实例自带属性存储能力,和Gatling的session机制效果完全一致,可实现跨请求的变量共享,具体操作步骤如下:

步骤1:从响应提取JSON值存入用户上下文

发送请求拿到响应后,直接调用.json()方法解析JSON结构,将需要复用的值绑定到当前用户实例self上即可,后续所有该用户发起的请求都可以直接读取这些值:

# 示例:登录接口响应提取token和user_id
login_resp = self.client.post("/api/login", json={"username": "test", "password": "123456"})
login_json = login_resp.json()
# 绑定到self,等价于Gatling的saveAs存入session
self.token = login_json["data"]["access_token"]
self.user_id = login_json["data"]["user_info"]["id"]

步骤2:处理独立文件存储的JSON Payload

对于存放在独立文件中的请求体,推荐提前预加载为基础字典模板,使用时复制模板再替换动态字段,避免JSON格式错误,操作如下:

2.1 准备独立Payload文件

示例目录结构:

locustfile.py
payloads/
  └── create_order.json

create_order.json内容(固定字段直接写死,动态字段留空即可):

{
  "order_title": "测试订单",
  "amount": 100,
  "create_user_id": "",
  "request_id": ""
}

2.2 预加载Payload模板

在locustfile的全局位置预加载所有Payload文件,避免每次请求重复读磁盘:

import json
# 预加载独立Payload为字典模板
with open("payloads/create_order.json", "r", encoding="utf-8") as f:
    CREATE_ORDER_TPL = json.load(f)

2.3 动态替换字段发起请求

在任务方法中复制模板,替换之前存在用户上下文的动态值后即可发起请求:

@task
def create_order(self):
    # 复制模板,避免修改全局模板影响其他用户
    payload = CREATE_ORDER_TPL.copy()
    # 替换动态字段,支持嵌套字典层级赋值
    payload["create_user_id"] = self.user_id
    payload["request_id"] = self.token
    # 发送请求
    self.client.post(
        "/api/order/create",
        json=payload,
        headers={"Authorization": f"Bearer {self.token}"}
    )

注意事项

  • 如果Payload嵌套层级很深,直接按字典层级赋值即可,例如payload["ext_info"]["operator"] = self.user_id
  • 每次使用模板前必须调用copy(),否则所有用户会共用同一个字典对象,会出现变量串改的问题
  • 若需要更复杂的模板逻辑(循环、条件判断等),可引入jinja2模板引擎处理独立Payload文件,实现更灵活的动态生成

内容的提问来源于stack exchange,提问作者Hoang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 20:45:03