BeanShell实现保存POST请求参数值到本地

背景

隔壁项目组同事找到我,说想要使用JMeter调用接口批量跑一批数据,数据量大概10万,接口的请求体和响应体如下,要求将响应状态码为1000的deviceId保存到本地。这里需要思考的问题是,如何将POST请求中请求体参数值提取出来并保存?在这里记录我当时给出的方案。

请求体:

{
        "deviceId": "12345678901234567890",
        "eventType": 1
}

响应体:

{
    "code": 1000,
    "data": {
        "alarmType": 1,
        "status": 0
    },
    "message": "success"

操作步骤

1.添加一个CSV 数据文件设置元件

将10万个deviceId存储到本地csv文件,接口调用时,从本地读取请求参数值。

CSV文件配置如下:

 

2.添加一个HTTP请求录入接口请求信息 

请求参数值从csv文件读取,配置如下:

3.添加一个JSON提取器,提取响应状态码

JSON提取器配置如下: 

 4.添加一个调试取样器,运行并查看提取结果 

 

5.添加一个BeanShell后置处理程序,编写脚本 

可以使用log.info()将日志打印出来,在控制台查看是否正确

脚本如下:

import java.net.URLDecoder;
import org.json.*;
import java.io.BufferedWriter;
import java.io.FileWriter;

	String statusCode=vars.get("code"); //获取JSON提取器提取到的参数值
	int code= Integer.parseInt(statusCode); //jmeter内部变量都是String类型,需要强转
	log.info("状态码为:"+code); //用于调试,打印日志
	String samplerData = prev.queryString;  // 只取post data 数据
	JSONObject requestBody=new JSONObject(samplerData); //获取请求体
	String subData = requestBody.get("deviceId").toString(); // 获取deviceCode的value值
	String deviceCode = URLDecoder.decode(subData,"utf-8"); //避免中文乱码
	log.info("设备编码为:"+subData); //用于调试,打印日志
	FileWriter fstream =null;
	BufferedWriter out =null;
	if(code==1000){
		try {
			fstream = new FileWriter("F:\\device.csv",true);  //写入csv文件,路径下无文件时自动创建
			out = new BufferedWriter(fstream);
           	out.write(deviceCode+"\n");    //写入的数据
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally{
            try {
            	if(out!=null){
            		out.close(); //关闭资源
            		}
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
            	if(fstream!=null){
            		fstream.close(); //关闭资源
            		}
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
	}

6.执行脚本,查看保存到csv文件的数据 

 

7.在线程组中设置相应的线程数

通过前面1-6步操作调通了脚本,就可以设置线程组批量跑这十万数据啦,线程组设置如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值