JMeter使用BeanShell PostProcessor写入CSV出现多余行数如何修复?
JMeter BeanShell PostProcessor写入CSV每次生成3行的修复方案
问题根因
- 最常见原因是BeanShell PostProcessor作用域配置错误,默认会作用于当前层级下的所有取样器,包括主取样器的子结果(比如重定向请求、嵌入式静态资源请求都会触发后置处理器执行)
- 其次可能是线程组配置的线程数/循环次数设置错误导致逻辑重复执行
- 少数情况是BeanShell内直接引用JMeter函数的预编译逻辑导致重复执行
修复步骤
调整后置处理器作用域
将BeanShell PostProcessor直接拖动到你需要绑定的单个目标取样器的子节点下,避免它被其他无关取样器触发执行。新增主取样器判断逻辑
在代码开头增加判断,仅当处理主取样器时才执行写文件逻辑,跳过子结果触发的执行,修改后的代码如下:
// 仅处理非子结果的主取样器 if (prev != null && !prev.isSubResult()) { var name = "name"; var email = "email"; var currtime = "${__time(d-MMM-yyyy hh:mm:ss)}"; f = new FileOutputStream("D:/Temp/Temp.csv", true); p = new PrintStream(f); this.interpreter.setOut(p); print(currtime + "," + name + "," + email); p.close(); f.close(); }
- 额外优化建议
如果后续有高并发测试需求,建议替换BeanShell PostProcessor为JSR223 PostProcessor,选择Groovy作为执行语言,性能比BeanShell高5~10倍,写文件逻辑也可以用更简洁的语法实现。
内容的提问来源于stack exchange,提问作者usersam
相关产品推荐
相关产品推荐

