如何在Gatling中从CSV Feeder取值并传递给请求头生成函数?
解决方案:Gatling中Session变量在Scala函数参数中无法解析的问题
问题原因
Gatling的${xxx}字符串插值仅在Gatling DSL方法(如get、post)的参数中生效,这类方法会自动从Session中解析变量。但当你将"${endpoint}"作为普通字符串传递给自定义Scala函数(如create_header)时,它只是一个普通字符串,不会触发Session变量解析,因此函数接收到的是字面量"${endpoint}"而非CSV中的实际值。
修复方案
你需要显式从Session中提取endpoint的值,再传递给create_header函数。以下是两种简洁的实现方式:
方式1:直接在headers方法中传入Session处理函数
val scn = scenario("Test").exitBlockOnFail{ feed(csvFeeder) .group("Multiple tests") { exec(http("Multiple tests") .get("${endpoint}" + request_params) // 显式从Session中获取endpoint值,再调用生成header的函数 .headers(session => utils.HeaderUtils.create_header(session("endpoint").as[String]).toMap) .check(status.is(200))) }.pause(1.seconds) }
方式2:提前提取变量并存入Session(适合需要复用header的场景)
val scn = scenario("Test").exitBlockOnFail{ feed(csvFeeder) .group("Multiple tests") { // 先从Session取出endpoint,生成header后存入Session exec(session => { val endpoint = session("endpoint").as[String] val requestHeaders = utils.HeaderUtils.create_header(endpoint).toMap session.set("requestHeaders", requestHeaders) }) .exec(http("Multiple tests") .get("${endpoint}" + request_params) // 从Session中取出预先生成的header .headers("${requestHeaders}") .check(status.is(200))) }.pause(1.seconds) }
关键说明
session("endpoint").as[String]:从Gatling的Session中提取名为endpoint的变量,并转换为String类型,这是获取Session变量的标准方式。headers方法支持接收两种参数:一是Map[String, String],二是Session => Map[String, String]类型的函数,后者允许你动态基于Session生成header。
内容的提问来源于stack exchange,提问作者Nanu
相关产品推荐
相关产品推荐

