LoadRunner REST API脚本求助:JSON数据参数化问题
参数化LoadRunner中web_custom_request的JSON请求体
我来帮你搞定LoadRunner里REST API脚本的JSON参数化问题,这在接口测试中是很常见的需求,咱们一步步拆解来做:
1. 先明确需要参数化的动态字段
先梳理你原JSON里需要从外部获取的变量:
contextObjectId(和payload里的os_st_id看起来是同一值,可复用参数)LastName、FirstName(用户搜索条件)serviceOpInvocationId(调用ID)sessionId(动态会话ID,通常从前置接口响应中提取)
2. 方式一:用参数文件管理批量测试数据
如果是静态测试数据(比如多组用户搜索条件),可以用LoadRunner的参数文件来管理:
- 创建一个
.dat格式的参数文件,比如api_test_data.dat,内容如下:
contextObjectId,LastName,FirstName,serviceOpInvocationId 36045467715,test,test,1111111 36045467716,smith,john,2222222 36045467717,doe,jane,3333333
- 在LoadRunner脚本中导入参数:点击脚本界面的【Parameters】按钮,添加对应参数,选择文件类型,指向你创建的
.dat文件,设置迭代方式(比如每次迭代取一行数据)。
3. 方式二:关联提取动态值(比如SessionID)
如果sessionId是从前置接口(比如登录接口)的响应中返回的,需要先通过关联提取:
在发送目标请求之前,添加web_reg_save_param函数来捕获SessionID,示例代码:
web_reg_save_param("SessionID", "LB=\"sessionId\":\"", // 左边界,根据实际响应格式调整 "RB=\"", // 右边界,根据实际响应格式调整 "Search=Body", // 在响应体中搜索 LAST);
这个函数会自动把响应中的SessionID值存入{SessionID}参数,后续直接引用即可。
4. 修改web_custom_request的JSON请求体
把原JSON中的固定值替换成LoadRunner参数,重点注意JSON里的转义双引号要保留,避免破坏格式。修改后的示例代码:
web_custom_request("CustomerSearch_API", "URL=https://your-api-domain.com/your-service-path", // 替换成你的实际接口URL "Method=POST", "Body={\"serviceLayerOperationRequest\":{ \"contextObjectId\": \"{contextObjectId}\", \"payload\":\"{\\\"UserSessionSearchCriteria\\\":{\\\"os_st_id\\\":\\\"{contextObjectId}\\\",\\\"LastName\\\":\\\"{LastName}\\\",\\\"FirstName\\\":\\\"{FirstName}\\\"}}\", \"operationLabel\": \"CustomerSearch\", \"serviceOpInvocationId\": \"{serviceOpInvocationId}\", \"sessionId\": \"{SessionID}\" }}", "ContentType=application/json", LAST);
这里要特别注意:payload内部的双引号原本是转义状态(\"),所以参数外层的双引号需要再转一次,变成\\\",否则会导致JSON格式错误。
5. 验证参数化效果
运行脚本后,可以通过两种方式确认参数是否生效:
- 查看【Replay Log】,检查请求体中的参数是否被正确替换为参数文件或关联到的值;
- 在脚本中添加
lr_output_message打印参数值,比如:
lr_output_message("当前使用的SessionID: %s", lr_eval_string("{SessionID}")); lr_output_message("当前搜索用户: %s %s", lr_eval_string("{FirstName}"), lr_eval_string("{LastName}"));
内容的提问来源于stack exchange,提问作者user1227670
相关产品推荐
相关产品推荐

