Gatling测试中使用JSON Feeder校验响应体失败问题
解决Gatling中Feeder变量在jsonPath.is()中不生效的问题
问题根因
你写的 .is("${out}") 是把 ${out} 当成了字面量字符串来使用,Gatling不会解析这个EL表达式,所以它会拿响应里的 "pong" 和字符串 "${out}" 做对比,这就导致了报错。而 substring("${out}").exists() 能生效,是因为该方法的参数支持自动解析EL表达式,和 is() 的字符串参数逻辑不一样。
解决方案
有两种可行的修改方式:
方式一:用Lambda从Session中取值(Java环境推荐)
直接通过Lambda表达式从Session里获取Feeder注入的变量值,替换原来的字符串参数:
final ChainBuilder call = exec(http("Api Response") .post("/ping") .check(status().is(200)) // 从session中取出"out"对应的变量值 .check(jsonPath("$.result").is(session -> session.getString("out"))));
方式二:用EL表达式包装类
导入Gatling的ElString类,把字符串表达式包装成可解析的动态值:
// 需要先导入这个类 import io.gatling.core.el.ElString; final ChainBuilder call = exec(http("Api Response") .post("/ping") .check(status().is(200)) // 用ElString包装表达式,让Gatling解析变量 .check(jsonPath("$.result").is(ElString.el("${out}"))));
验证效果
修改后,Gatling会从Session中取出Feeder注入的 "pong" 值,和响应体里的result字段做对比,就能正常通过响应校验了。
内容的提问来源于stack exchange,提问作者mbanchero
相关产品推荐
相关产品推荐

