JMeter通过BeanShell如何对CSV文件的指定列追加数据

server/2025/2/11 3:04:22/

在 JMeter 中实现向 CSV 文件的 指定列追加数据,需根据场景选择不同方法。以下是两种典型场景的实现方案:


场景 1:生成新行时填充指定列的数据

若每次请求生成一行新数据,并在特定列填充动态值(如第三列),可以通过拼接变量实现:

步骤:
  1. 定义 CSV 表头:确保 CSV 文件已存在或首行包含列名(如 列1,列2,列3)。
  2. 使用 BeanShell/JSR223 脚本:动态拼接数据并写入 CSV。
java">import java.io.FileOutputStream;
import java.io.OutputStreamWriter;// CSV 文件路径
String csvFilePath = "C:/test/output.csv";// 从 JMeter 变量获取动态值
String column1 = vars.get("column1"); // 第一列数据
String column2 = vars.get("column2"); // 第二列数据
String column3 = "动态值";            // 指定列(第三列)数据// 拼接行数据(逗号分隔)
String rowData = column1 + "," + column2 + "," + column3;// 写入 CSV(UTF-8 编码,追加模式)
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(csvFilePath, true), "UTF-8")) {// 如果是新文件,写入表头if (new File(csvFilePath).length() == 0) {writer.write("列1,列2,列3\n");}writer.write(rowData + "\n");
} catch (Exception e) {e.printStackTrace();
}

场景 2:修改现有 CSV 的指定列(覆盖或追加)

若需修改已有 CSV 文件中某列的值(例如根据条件更新第三列),需读取整个文件、修改数据后重写:

步骤:
  1. 使用 OpenCSV 库:简化 CSV 读写操作。
    • 下载 OpenCSV JAR 并放入 JMeter 的 lib 目录。
  2. 读取 CSV → 修改指定列 → 写回文件
java">import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.List;String csvFilePath = "C:/test/output.csv";
int targetColumnIndex = 2; // 第三列(索引从 0 开始)// 1. 读取 CSV 全部数据
List<String[]> csvData;
try (CSVReader reader = new CSVReader(new FileReader(csvFilePath))) {csvData = reader.readAll();
}// 2. 修改指定列的数据(示例:为每一行的第三列追加 "_new")
for (String[] row : csvData) {if (row.length > targetColumnIndex) {row[targetColumnIndex] = row[targetColumnIndex] + "_new";}
}// 3. 将修改后的数据写回 CSV
try (CSVWriter writer = new CSVWriter(new FileWriter(csvFilePath))) {writer.writeAll(csvData);
}

关键注意事项

  1. 并发写入问题

    • 如果多线程同时操作同一文件,需使用同步锁或避免并发写入。
    • 示例(在 BeanShell 中加锁):
      java">synchronized("fileWriteLock") { // 全局锁// 写入文件的代码
      }
      
  2. 性能优化

    • 频繁读写大文件会降低性能,建议仅在必要时操作 CSV。
    • 可考虑将数据暂存到内存,测试结束后一次性写入。
  3. 动态列管理

    • 若列位置不固定,建议先读取表头确定列索引:
      java">String[] header = csvData.get(0);
      int targetColumnIndex = Arrays.asList(header).indexOf("列名");
      

总结

  • 追加新行:直接拼接数据并写入,适合按请求生成独立记录。
  • 修改现有列:使用 OpenCSV 读取→修改→覆盖,适合批量更新。
  • 根据需求选择方案,优先确保编码(UTF-8)和并发安全。

http://www.ppmy.cn/server/166646.html

相关文章

2025年02月05日Github流行趋势

项目名称&#xff1a;OCRmyPDF 项目地址url&#xff1a;https://github.com/ocrmypdf/OCRmyPDF项目语言&#xff1a;Python历史star数&#xff1a;15872今日star数&#xff1a;157项目维护者&#xff1a;jbarlow83, fritz-hh, apps/dependabot, mawi12345, mara004项目简介&…

网络安全技术架构 网络安全结构体系图

1.基础研究 1.1密码理论 1.2数据加密 1.3消息摘要 1.4数字签名 1.5密钥管理 信息隐藏 2.应用研究 2.1安全技术 2.2防火墙技术 2.3入侵检测 2.4漏洞扫描 2.5防病毒技术 3.管理研究 3.1安全策略 3.2安全标准 3.3安…

鸿蒙音视频播放器:libwlmedia

libwlmedia 跨平台播放器wlmedia现在已经支持了鸿蒙(Harmony)平台了&#xff0c;SDK插件地址&#xff1a;libwlmedia 一、接入SDK 1.1 导入SDK ohpm i ywl5320/libwlmedia1.2 添加权限&#xff08;可选&#xff09; 如果需要播放网络视频&#xff0c;需要添加网络权限 #m…

蓝桥杯 Java 之输入输出

一、输入输出方式&#xff1a;Scanner vs BufferedReader Scanner类 简介&#xff1a;Scanner 是 Java 中一个非常方便的用于读取用户输入的类&#xff0c;它可以从多种输入源&#xff08;如标准输入、文件等&#xff09;读取基本数据类型和字符串。 1. Scanner的细节与使用…

pgBackRest 是专为 PostgreSQL 设计的开源备份与恢复工具,以其高性能、可靠性和灵活性著称

pgBackRest 是专为 PostgreSQL 设计的开源备份与恢复工具&#xff0c;以其高性能、可靠性和灵活性著称。它支持 全量备份、增量备份、并行备份/恢复 和 加密 等特性&#xff0c;适用于大规模数据库和关键业务场景。以下是其核心功能及操作指南&#xff1a; 一、pgBackRest 核心…

清影2.0(AI视频生成)技术浅析(一)

清影2.0是由某科技公司推出的一款先进的AI视频生成平台,旨在通过人工智能技术实现从文本到视频的自动化创作。该平台结合了自然语言处理(NLP)、计算机视觉(CV)、音频处理以及深度学习等多个领域的最新技术,能够根据用户输入的文本描述自动生成高质量的视频内容。 1.平台…

简述MySQL主从复制原理及其工作过程,配置一主两从并验证

主从原理&#xff1a;MySQL主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据进行更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器&#xff0c;并且在从服务器上执行这些日志的操…

Redis基础笔记

一、基础知识 连接方式 CLI (Command Line Interface)API (Application Programming Interface)GUI (Graphical User Interface) 启动 redis-server连接到Redis&#xff08;Redis CLI Client&#xff09; redis redis-cli telnet 127.0.0.1 6379退出 quit/exit查看过期时…