使用JMeter能否向现有CSV文件的指定列追加数据?
JMeter操作CSV指定列追加数据说明
JMeter原生没有提供直接修改现有CSV指定列的可视化组件,但可以通过JSR223组件结合Groovy脚本实现该需求,操作方法如下:
实现步骤
- 首先确认你的CSV列分隔符(默认英文逗号
,)和目标列对应的索引:列索引从0开始计数,A列对应0、B列对应1、C列对应2、E列对应4 - 在需要执行写入操作的位置添加JSR223 后置处理程序(如果是请求前写就加预处理程序),脚本语言选择
groovy - 复制下方脚本到JSR223的脚本输入框,按注释修改对应参数即可:
// 1. 配置参数,按你的实际情况修改 def csvPath = "你的CSV文件绝对路径,比如C:/test/data.csv" def delimiter = "," // 你的CSV列分隔符 // 要写入C列、E列的值,如果用的是JMeter变量,就用vars.get("变量名")获取 def cColValue = vars.get("c_data") // 要写入C列的内容 def eColValue = vars.get("e_data") // 要写入E列的内容 // 2. 读写文件逻辑 def originalFile = new File(csvPath) def tempFile = new File(csvPath + ".tmp") tempFile.withWriter("UTF-8") { writer -> originalFile.eachLine { line, lineNum -> // 拆分当前行的列,加-1避免空列被忽略 def cols = line.split(delimiter, -1) // 给C列(索引2)、E列(索引4)赋值,先判断列数避免下标越界 if(cols.size() >= 5) { cols[2] = cColValue cols[4] = eColValue } // 写入修改后的行到临时文件 writer.writeLine(cols.join(delimiter)) } } // 3. 用临时文件覆盖原文件 originalFile.delete() tempFile.renameTo(originalFile)
注意事项
- 操作前建议备份原CSV文件,避免脚本错误导致数据丢失
- 如果是多线程并发场景下操作同一个CSV文件,需要给整个脚本加文件锁避免数据错乱,只需在脚本最外层套一层同步代码即可:
synchronized(new File(csvPath)) { // 把上面的所有逻辑放到这里面 }
内容的提问来源于stack exchange,提问作者Bhavya Dutta
相关产品推荐
相关产品推荐

