jmeter-Beashell获取http请求体json

发布于:2025-05-01 ⋅ 阅读:(40) ⋅ 点赞:(0)

在JMeter中,使用BeanShell处理器或BeanShell Sampler来获取HTTP请求体中的JSON数据是很常见的需求。这通常用于在测试计划中处理和修改请求体,或者在响应后进行验证。以下是一些步骤和示例代码,帮助你使用BeanShell来获取HTTP请求体中的JSON数据。

步骤 1: 添加BeanShell处理器或BeanShell Sampler

  1. 添加BeanShell处理器:在你的HTTP请求后面添加一个BeanShell处理器。这可以通过右键点击HTTP请求 -> 添加 -> 后置处理器 -> BeanShell处理器 来实现。

  2. 添加BeanShell Sampler:如果你需要在HTTP请求之前或单独处理JSON数据,可以添加一个BeanShell Sampler。

步骤 2: 编写BeanShell脚本

打开你添加的BeanShell处理器或Sampler,然后编写脚本来解析JSON数据。

示例代码

假设我们有一个HTTP请求,其请求体是一个JSON字符串,如下所示:

{

"name": "John Doe",

"age": 30,

"isStudent": false

}

我们想要获取这个JSON字符串中的nameage字段。

使用BeanShell处理器获取JSON数据
  1. 获取上一个Sampler的响应

    import org.apache.jmeter.samplers.SampleResult;
    
    import org.apache.jorphan.util.JMeterUtils;
    
    import org.apache.jorphan.logging.LoggingManager;
    
    import java.util.logging.Logger;
    
    import org.apache.jmeter.util.JMeterUtils;
    
    import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
    
    import org.apache.jmeter.protocol.http.sampler.HTTPSampleResult;
    
    
    
    SampleResult previousResult = sampler.getLastSampleResult(); // 获取上一个Sampler的结果
    
    if (previousResult != null) {
    
    String responseBody = previousResult.getResponseDataAsString(); // 获取响应体内容
    
    // 使用org.json库解析JSON(确保在lib文件夹中包含org.json库)
    
    import org.json.JSONObject;
    
    JSONObject jsonResponse = new JSONObject(responseBody);
    
    String name = jsonResponse.getString("name");
    
    int age = jsonResponse.getInt("age");
    
    Logger logger = LoggingManager.getLoggerForClass(); // 获取日志记录器
    
    logger.info("Name: " + name + ", Age: " + age); // 记录信息到日志
    
    } else {
    
    Logger logger = LoggingManager.getLoggerForClass(); // 获取日志记录器
    
    logger.warning("No previous sample result found."); // 如果没有结果,记录警告信息到日志
    
    }
    
    
    

  2. 直接从HTTP请求体获取:如果HTTP请求体是动态生成的,你可以直接从请求体中获取JSON数据。首先确保你的HTTP请求使用了“Content-Type: application/json”头,然后你可以在BeanShell中这样获取请求体:

    HTTPSamplerBase sampler = (HTTPSamplerBase) sampler; // 获取HTTP请求采样器对象
    
    String requestBody = sampler.getArguments().getArgument(0).getValue(); // 获取请求体内容(假设只有一个参数)
    
    // 使用org.json库解析JSON(确保在lib文件夹中包含org.json库)
    
    import org.json.JSONObject;
    
    JSONObject jsonRequest = new JSONObject(requestBody);
    
    String name = jsonRequest.getString("name");
    
    int age = jsonRequest.getInt("age");
    
    Logger logger = LoggingManager.getLoggerForClass(); // 获取日志记录器
    
    logger.info("Name from Request: " + name + ", Age from Request: " + age); // 记录信息到日志

步骤 3: 确保包含必要的库

如果你使用的是org.json库来解析JSON,确保在JMeter的lib目录下包含了该库(例如json-20201115.jar)。如果没有,你可以从网上下载该库文件并放到lib目录下。

步骤 4: 运行测试并查看结果

运行你的测试计划,并在JMeter的日志查看器中查看输出结果,确认你的BeanShell脚本是否正确执行并输出了期望的数据。

通过上述步骤,你可以在JMeter中使用BeanShell处理器或Sampler来获取和处理HTTP请求体中的JSON数据。


网站公告

今日签到

点亮在社区的每一天
去签到