Gatling参数值输出格式异常 显示some(value)而非预期纯值
问题原因
Scala集合的Map.get()方法返回值是Option[T]类型,当对应key存在值时返回Some(实际值)实例,不存在时返回None实例。你代码里直接对这个返回结果调用toString,本质是把Option容器对象本身转成字符串——Some(123456).toString的输出就是some(123456),自然写进文件的内容带了多余的包裹格式,没有拿到容器内部存的真实参数值。
另外你直接操作session.attributes底层Map的写法不符合Gatling官方API规范,后续容易触发类型转换、空指针类问题。
修复方案
- 替换取值逻辑,不要直接对Option结果调用toString,优先用Gatling封装的Session API取值:
把原来写文件的核心逻辑替换成下面的代码即可:
.exec { session => val writer1 = new PrintWriter(new FileOutputStream(outputFilePath, true)) // 直接通过Gatling Session API取user_id的值转成字符串,as[String]会自动拿到真实值 val userId = session("user_id").as[String] writer1.write(userId + "\n") writer1.close() session }
- 如果你担心jdbc查询结果可能缺失user_id字段,避免取值报错,可以用安全的Optional取值方式,给默认值兜底:
// 找不到user_id时返回空字符串,不会抛异常 val userId = session("user_id").asOption[String].getOrElse("")
补充提示:你当前每次执行都新建、关闭文件输出流的写法,在并发压测场景下会出现文件锁冲突、内容写入错乱的问题,如果后续要提高并发,建议统一用专门的文件写入组件批量处理,不要在每个虚拟用户的exec块里单独操作文件流。
内容的提问来源于stack exchange,提问作者Perf2017
相关产品推荐
相关产品推荐

