JMeter中动态创建的属性值为null问题求助
JMeter问题:SetUp线程组设置的全局属性在主线程组中读取为null
我在SetUp线程组中读取CSV文件,并根据文件记录数创建对应数量的全局属性,代码如下:
import org.apache.commons.csv.CSVParser import org.apache.commons.csv.CSVFormat def csvFilePath = "csv.csv"; def reader = new FileReader(csvFilePath); def csvParser = CSVParser.parse(reader, CSVFormat.DEFAULT.withHeader()); def counter = 1; csvParser.records.each { record -> def propertyName = "csvDataProp_${counter++}"; def concatenatedLine = record.values().join(','); props.put(propertyName, concatenatedLine); }
在主线程组中,我通过JSR223前置处理器尝试获取属性值(以第一个请求为例),代码如下:
log.info("Before accessing property - CSV Data: ${props.get("csvDataProp_1")}"); def csvData = props.get("csvDataProp_1"); log.info("CSV Data: ${csvData}"); if (csvData != null) { def values = csvData.split(','); def testNameColumn = values[0]; def testName = "Test:" + testNameColumn; vars.put("testName", testName); vars.put("endpointPath", values[2]); vars.put("encryptedValue", values[3]); vars.put("expStatusCode", values[4]); } else { log.error("CSV Data is null"); }
查看日志时发现输出:
Before accessing property - CSV Data: null. CSV Data: null.
我已经在SetUp线程组和主线程组中添加调试后置处理器,能看到所有属性及其对应值,但通过代码获取时却返回null。
解决方法
检查属性名匹配度
确认主线程组中调用的属性名csvDataProp_1和SetUp线程组中创建的属性名完全一致,包括大小写、下划线等符号,避免因拼写错误导致读取失败。改用上下文对象获取全局属性
在主线程组的JSR223代码中,尝试用ctx.getProperties().get("csvDataProp_1")替代props.get(),直接通过JMeter上下文对象获取全局属性,避免作用域问题:def csvData = ctx.getProperties().get("csvDataProp_1");确认SetUp线程组执行顺序
检查测试计划中SetUp线程组是否排在主线程组之前,虽然SetUp线程组默认优先执行,但如果测试计划有特殊配置(如线程组依赖),可能导致SetUp未提前执行,导致主线程组读取时属性未初始化。替换为CSV Data Set Config元件
放弃手动写代码处理CSV,改用JMeter自带的CSV Data Set Config元件:- 在SetUp或主线程组中添加该元件,配置CSV文件路径、编码、分隔符
- 设置变量名(如
testName,col1,endpointPath,encryptedValue,expStatusCode) - 主线程组中直接通过
${testName}、${endpointPath}等变量引用数据,无需手动拆分字符串,稳定性更高。
内容的提问来源于stack exchange,提问作者Anastasiia Stelmakhova
相关产品推荐
相关产品推荐

