Gatling表达式语言访问会话变量时$和#的区别是什么
Gatling EL 中
${}与#{}访问会话变量的区别 二者在运行时的功能完全等价,不存在任何逻辑差异,并存的唯一作用是适配语法冲突规避场景。
- 设计背景:
${}是Gatling EL最早支持的语法,但是Scala原生的字符串插值(s""/f""/raw""等)也使用${}作为占位符标识,如果你在Scala插值字符串中直接写Gatling的${},会被Scala编译器优先识别为原生插值语法,触发「找不到对应变量」的编译错误。#{}是Gatling 3.3版本之后新增的等价语法,专门用来规避这个冲突。 - 不同场景的使用建议:
- 如果你使用普通Scala字符串(无前缀的双引号包裹):两种写法可以随意混用,Gatling EL解析器会做完全相同的处理
- 如果你使用Scala原生插值字符串:优先使用
#{}写法,不需要额外转义即可被Gatling正常解析;如果坚持用${},需要对$符号做转义,写成$${}
以下是对应场景的代码示例:
// 普通字符串场景,两种写法完全等价 .exec(http("普通字符串用$").get("localhost/${foo}")) .exec(http("普通字符串用#").get("localhost/#{foo}")) // Scala插值字符串场景 .exec(http("插值字符串用#(推荐)").get(s"localhost/#{foo}")) // 正常运行 .exec(http("插值字符串用$需要转义").get(s"localhost/$${foo}")) // 转义后正常运行 // .exec(http("错误写法").get(s"localhost/${foo}")) // 编译报错,Scala编译器找不到变量foo
内容的提问来源于stack exchange,提问作者wotanii
相关产品推荐
相关产品推荐

