lr11怎么从json中取数据
在接口测试或性能测试中,LR11(LoadRunner 11)经常需要处理JSON格式的响应数据,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于现代API,本文将详细介绍如何在LR11中从JSON数据中提取所需信息,包括使用web_reg_save_param、json_decode(结合C语言JSON库)等方法。
理解JSON数据结构
JSON数据通常以键值对(key-value)形式存储,
{
"name": "John",
"age": 30,
"city": "New York",
"hobbies": ["reading", "traveling"]
}
在LR11中,我们可以通过以下方式提取这些数据。
使用web_reg_save_param提取JSON数据
LR11的web_reg_save_param主要用于提取HTML或XML数据,但也可以结合正则表达式提取JSON值。
示例:提取单个键值
假设JSON响应为:
{"status": "success", "user_id": 12345}
我们可以使用以下LR11代码提取user_id:
web_reg_save_param(
"user_id", // 参数名
"LB=\"user_id\": ", // 左边界
"RB=\"", // 右边界
"Search=Body", // 在响应体中查找
LAST);
之后,可以使用lr_eval_string("{user_id}")获取值。
局限性
- 如果JSON结构复杂(如嵌套对象或数组),正则表达式可能难以处理。
- 对于动态JSON(如键名变化),这种方法可能不够灵活。
使用json_decode(结合C语言JSON库)
LR11本身不直接支持JSON解析,但我们可以通过C语言的JSON库(如cJSON)进行解析。
步骤1:集成cJSON库
- 下载cJSON源码。
- 将
cJSON.c和cJSON.h添加到LR11的工程中。
步骤2:编写LR11脚本解析JSON
#include "cJSON.h"
Action()
{
const char *json_response = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
cJSON *root = cJSON_Parse(json_response);
if (root == NULL) {
lr_error_message("Failed to parse JSON");
return -1;
}
// 提取name
cJSON *name = cJSON_GetObjectItem(root, "name");
if (cJSON_IsString(name)) {
lr_output_message("Name: %s", name->valuestring);
}
// 提取age
cJSON *age = cJSON_GetObjectItem(root, "age");
if (cJSON_IsNumber(age)) {
lr_output_message("Age: %d", age->valueint);
}
cJSON_Delete(root); // 释放内存
return 0;
}
优点
- 支持嵌套JSON和数组解析。
- 更灵活,适用于复杂JSON结构。
缺点
- 需要额外集成CJSON库。
- 代码量较大,适合高级用户。
使用LR11的web_custom_request + 正则表达式
如果JSON数据较简单,可以直接使用web_custom_request获取响应,再用正则表达式提取数据。
示例
web_custom_request(
"get_json_data",
"URL=http://example.com/api",
"Method=GET",
LAST);
// 提取JSON中的token
web_reg_save_param(
"token",
"LB=\"token\": \"",
"RB=\"",
"Search=Body",
LAST);
lr_output_message("Token: %s", lr_eval_string("{token}"));
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
web_reg_save_param |
简单JSON | 无需额外库 | 不支持复杂JSON |
json_decode(CJSON) |
复杂JSON | 支持嵌套、数组 | 需要集成C库 |
web_custom_request + 正则 |
简单JSON | 灵活 | 依赖正则表达式 |
推荐方案
- 简单JSON →
web_reg_save_param - 复杂JSON →
json_decode(CJSON)
希望本文能帮助你在LR11中高效处理JSON数据!如果有任何问题,欢迎留言讨论。



还没有评论,来说两句吧...