Gatling如何将捕获的动态值列表转换为逗号分隔格式代入请求
实现方法
核心逻辑
你通过findAll.saveAs("propertyid")保存到Session里的propertyid本身就是Seq[String]类型的列表,直接调用Scala集合的mkString(",")方法即可生成逗号分隔的字符串。
实现方式1:直接在请求中拼接(推荐,无需额外存储)
Gatling支持传入Session函数作为请求URL的参数,直接在构造URL时处理即可:
.exec(http("/torchlist") .get(session => uri21 + "/torchlist/status.json?property_id=" + session("propertyid").as[Seq[String]].mkString(",") + "&_=1627273897640&search_type_param=address" ) )
实现方式2:提前转换后存入Session复用
如果后续多个请求都需要用到这个逗号分隔的字符串,可以先提前转换存储:
- 修改你之前打印Session的exec块,新增拼接逻辑:
.exec(session => { // 注意:原代码的as[String]是错误写法,findAll保存的是Seq类型,直接转String会抛出类型转换异常 val propertyIdList = session("propertyid").as[Seq[String]] println(propertyIdList.mkString(",")) // 拼接后存入新的Session属性 session.set("propertyIdStr", propertyIdList.mkString(",")) })
- 后续请求直接用Gatling EL表达式调用即可:
.exec(http("/torchlist") .get(uri21 + "/torchlist/status.json?property_id=${propertyIdStr}&_=1627273897640&search_type_param=address") )
注意事项
- 即使
propertyid列表只有1个元素,mkString(",")也会直接返回该元素的字符串,符合参数要求 - 如果需要兼容空列表场景,可以直接使用
mkString(","),空列表会返回空字符串,不会触发报错
内容的提问来源于stack exchange,提问作者newtogroovy
相关产品推荐
相关产品推荐

