【jmeter系列】Jmeter将响应数据结果保存到csv文件的两种方式(Bean Shell)13

背景

日常接口测试,需要将接口返回值对应的字段数据保存下来

示例接口:

post请求:

https://dev-xxx-bot.igovee.com/text

{
"text":"I really need some meditative effects."
}

实现方法

方式一(Jmeter BeanShell采样器提取接口)

接口获取response数据:

{"cost_time":0.15606689453125,"emotion_class":{"label":"hope","score":0.2862275540828705},"entity":null,"entity_class":{"label":"plants","score":0.2635917663574219},"keywords":"fruit"}

jmeter线程组-JSR223 Sampler

 代码实例:

//导入json包
import org.json.JSONObject;
import org.json.JSONArray;
import org.apache.jmeter.samplers.SampleResult
SampleResult rsp =ctx.getPreviousResult()        
String response_data = rsp.getResponseDataAsString()  //获取上一个接口返回数据,此处是String类型
log.info("\n" + response_data)
//将String类型的返回值构造成JSONObject对象
JSONObject jsonstring=new JSONObject(response_data);  //放进json对象里
String cost_time=jsonstring.get("cost_time").toString();        //取出cost_time对应的value值
String score=jsonstring.get("emotion_class").get("score").toString();        //取出score对应的value值
vars.put("cost_time",cost_time);
vars.put("score",score);
log.info(cost_time);
log.info(score);
//写入文件
FileWriter fstream=new FileWriter("E:/gongju/jmeter/pc.csv",true);//本地存储文件路径
BufferedWriter out = new BufferedWriter(fstream);
out.write(cost_time);//提取出来的cost_time
out.write(",");//换列
out.write(score);//提取出来的score
out.write(System.getProperty("line.separator"));//换行
out.close();
fstream.close();

写入CSV效果如下: 

方式二(json提取器+BeanShell 取样器)

1、json提取器提取出变量对应的value值

 2、beanshell取样器

 示例代码:

File file=new File("E:\\gongju\\jmeter\\pc1.csv");
FileWriter fw=new FileWriter(file,true);
BufferedWriter out=new BufferedWriter(fw);
		out.write(vars.get("cost_time"));
		out.write(",");//换列
		out.write(vars.get("score"));//提取出来的score
		out.write(System.getProperty("line.separator"));//换行
		out.close();
		fw.close();

结果文件:

备注:

JMeter运行时报Typed variable declaration : Class: JSONObject not found in namespace解决方案

因为${JMETER}\lib\下缺少json.jar包,下载链接如:

https://pan.baidu.com/s/1KFDUIq40BhUXcy2NYo7YkA 密码: c91m

 

<think>好的,用户的问题是关于解决JMeterBeanShell取样器无响应的情况。首先,我需要回忆一下JMeter的常见问题,特别是BeanShell相关的。根据之前用户提供的引用,引用[3]提到了使用BeanShell响应数据保存CSV文件两种方式,可能涉及到脚本编写的问题。而引用[1]提到缺少jar包会导致错误,比如JSONObject类找不到,这可能和类路径有关。所以,BeanShell脚本无法运行是否也是因为缺少某些依赖库呢?首先,BeanShellJMeter中运行时依赖JMeter的lib目录下的jar包。如果脚本中使用了第三方库,比如JSON处理或者其他的工具,可能需要将对应的jar包放到lib/ext目录下,并重启JMeter。例如,如果脚本里用了JSONObject,就需要json.jar,如引用[1]所说。其次,BeanShell脚本本身可能有语法错误或者逻辑问题,导致无响应。这时候需要检查脚本是否正确,比如是否有拼写错误,变量是否正确引用。用户可能需要查看JMeter的日志文件,通常是在bin目录下的jmeter.log,里面会有错误信息提示。另外,BeanShell的性能问题也可能导致无响应,尤其是在处理大量数据时。可以考虑改用更高效的JSR223元件,比如使用Groovy语言,因为JSR223的Groovy有更好的性能,并且支持缓存编译脚本,减少资源消耗。还有可能是JMeter的配置问题,比如内存不足导致脚本执行卡住。需要检查JMeter的内存设置,调整HEAP参数,比如-Xms和-Xmx,确保足够的内存分配。此外,如果BeanShell脚本中使用了JMeter的内置对象,比如vars、props、prev等,是否正确使用这些对象的方法和属性?错误的调用可能导致脚本无法执行,从而无响应。总结下来,可能的解决步骤包括:检查依赖库、查看日志、修正脚本语法、优化脚本性能、调整内存配置,以及改用更高效的JSR223元件。需要一步步排查,先从最简单的日志和依赖开始,再逐步深入。</think>### Bean Shell取样器无响应解决方案 **1. 检查依赖库配置** Bean Shell脚本若引用第三方类库(如JSON处理工具),需将对应jar包放入$\\{JMETER\\}/lib/ext$目录。例如使用`JSONObject`时需添加json.jar[^1]。 **操作步骤**: - 确认脚本中是否包含`import`外部类的语句 - 下载缺失jar包并放入lib/ext目录 - 重启JMeter **2. 查看JMeter日志定位错误** 日志文件$\\{JMETER\\}/bin/jmeter.log$会记录脚本执行错误细节。 **典型错误类型**: - `ClassNotFoundException`:类路径缺失 - `SyntaxError`:脚本语法错误 - `NullPointerException`:变量未初始化 **3. 验证脚本语法规范** Bean Shell支持Java语法但不完全兼容,特别注意: ```java // 错误示例:未声明变量类型 a = 10; // 可能引发隐式类型转换问题 // 正确写法 int a = 10; ``` **4. 优化脚本执行性能** Bean Shell解释执行效率较低,建议: - 复杂逻辑改用JSR223 Sampler+Groovy语言 - 启用`Cache compiled script`选项提升性能 **5. 调整JVM内存配置** 在$\\{JMETER\\}/bin/jmeter.bat$中修改: ```shell set HEAP=-Xms1g -Xmx4g # 根据测试机配置调整堆内存 ``` **6. 关键对象正确用法示例** ```java // 获取响应数据 String response = prev.getResponseDataAsString(); // 存储变量 vars.put("key", "value"); // 使用props跨线程组传值 props.put("globalVar", 123); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值