JMeter:用 JSR223 Groovy 提取变量并生成 CSV
JMeter:用 JSR223 Groovy 提取变量并生成 CSV
场景:一个线程组内包含多个取样器,只执行一次,将多个提取的变量横向写入 CSV,方便后续线程组或外部程序读取。
一、场景
- 单线程组、仅执行一次(如 Once Only Controller)
- 多个取样器分别提取了不同变量,想把它们横向汇总成一行 CSV
- 生成的 CSV 供「CSV Data Set Config」或其他线程组复用
- 提取的文本不含逗号、换行、双引号等特殊字符
二、demo
在 JMeter 中添加 JSR223 Sampler 或 JSR223 PostProcessor,选择 groovy:
// 1. 填入前面提取出来的变量名(有几个写几个,顺序决定了列的顺序)
def variableNames = ["var1", "var2", "var3"]
// 2. 收集每变量对应值
def rowValues = []
variableNames.each { name ->
def value = vars.get(name)
// 过滤空值,以及正则没匹配到时产生的原始字符串 "${变量名}"
if (value != null && !value.trim().isEmpty() && !value.startsWith('${')) {
rowValues.add(value.trim())
} else {
rowValues.add("") // 变量没提取到,留空,保证列对齐
}
}
// 3. 设置输出路径(txt逗号分隔)
def filePath = "D:/jmeter_results/next_group_input.txt"
def file = new File(filePath)
if (!file.parentFile.exists()) file.parentFile.mkdirs()
// 4. 写入文件:第一行变量名,第二行对应值,逗号分隔
file.withWriter('UTF-8') { writer ->
writer.writeLine(variableNames.join(","))
writer.writeLine(rowValues.join(","))
}
log.info("======= 数据已写入:${filePath} =======")
三、说明
| 步骤 | 作用 |
|---|---|
variableNames |
定义需要汇总的变量名列表,顺序决定 CSV 的列顺序 |
vars.get(name) |
获取 JMeter 变量值,vars 是 JSR223 内置对象 |
| 空值/占位符过滤 | 正则提取失败时,避免 ${var1} 这类字符串污染数据 |
mkdirs() |
路径不存在则创建 |
withWriter('UTF-8') |
覆写,每次执行会替换旧文件 |
log.info(...) |
在 JMeter 日志中打印成功信息 |
四、生成结果示例
假设 var1=apple,var2=banana,var3=(未提取到),生成的 CSV:
var1,var2,var3
apple,banana,
用 Excel 打开即为一个整齐的表格:
| var1 | var2 | var3 |
|---|---|---|
| apple | banana |
五、多线程/追加?
后续每次迭代追加一行可改用:
// 追加模式
file.withWriterAppend('UTF-8') { writer ->
writer.writeLine(rowValues.join(","))
}
但多线程追加存在文件锁问题,考虑 JMeter 原生的 Simple Data Writer 或 Flexible File Writer。

浙公网安备 33010602011771号