JMeter中CSV存储长ID及测试前后文件管理问题咨询
JMeter长ID存储与CSV文件管理解决方案
问题1:完整存储并使用长ID
长ID显示不完整是因为JSON Extractor处理超大整数时,会将其转为Java Double类型,导致精度丢失或显示为科学计数法。改用JSR223 PostProcessor直接解析JSON响应可避免该问题,步骤如下:
- 移除原有JSON Extractor,给目标GET请求添加JSR223 PostProcessor
- 使用Groovy的
JsonSlurper解析响应,以字符串形式提取并保存长ID,代码示例:
import groovy.json.JsonSlurper import org.apache.commons.io.FileUtils // 解析原始响应JSON def slurper = new JsonSlurper() def responseJson = slurper.parseText(prev.getResponseDataAsString()) // 按条件筛选并提取id(转为字符串保留完整格式) def petIds = responseJson.depthFirst().findAll { it.name == 'doggie' }.collect { it.id.toString() } // 存储到JMeter变量供后续采样器使用 vars.put("PET_ID_matchNr", petIds.size().toString()) petIds.eachWithIndex { id, index -> vars.put("PET_ID_${index + 1}", id) } // 写入CSV文件(直接用字符串写入,无类型转换问题) def filePath = "C:/Users/M Rakesh/Downloads/JMETER/apache-jmeter-5.6.2/bin/test_csv_files/results.csv" def file = new File(filePath) petIds.each { id -> FileUtils.writeStringToFile(file, id + System.getProperty("line.separator"), true) }
后续采样器直接调用${PET_ID_1}等变量即可,变量为完整字符串格式的长ID,无精度损失。
问题2:测试前后的CSV文件管理
测试前重建CSV(清空或创建新文件)
在测试计划根节点添加JSR223 PreProcessor,执行代码创建空文件(覆盖原有内容):
def filePath = "C:/Users/M Rakesh/Downloads/JMETER/apache-jmeter-5.6.2/bin/test_csv_files/results.csv" def file = new File(filePath) // 自动创建父目录,清空文件内容(不存在则创建空文件) file.parentFile.mkdirs() file.text = ""
测试后清理数据
在测试计划根节点添加JSR223 Listener,勾选"Run after test"选项,执行以下代码二选一:
- 删除整个文件:
def filePath = "C:/Users/M Rakesh/Downloads/JMETER/apache-jmeter-5.6.2/bin/test_csv_files/results.csv" def file = new File(filePath) if (file.exists()) { file.delete() }
- 仅清空内容(保留文件):
def filePath = "C:/Users/M Rakesh/Downloads/JMETER/apache-jmeter-5.6.2/bin/test_csv_files/results.csv" def file = new File(filePath) if (file.exists()) { file.text = "" }
分布式测试需确保文件路径在所有节点可访问,或各节点处理本地文件。
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

