Gatling会话无法访问Karate Feature文件设置变量的问题
Gatling与Karate集成时变量跨会话访问问题解决方法
问题根源
Karate Feature里用普通def定义的变量仅在Karate自身上下文内有效,无法直接被Gatling会话读取。要实现跨上下文传递,必须通过karate.set()方法将变量显式绑定到Gatling会话。
修改Karate Feature文件(getSubscriptionWithValidation.feature)
将需要传递的变量通过karate.set()定义,替代原有的def:
Feature: 获取订阅并验证状态 Scenario: 确认订阅有效性 # 此处添加你的API调用逻辑示例 * url "https://your-api-domain/subscription" * method get * status 200 # 把变量绑定到Gatling会话 * karate.set("subscription_confirmed", true)
调整Gatling测试脚本
在Gatling中通过会话对象直接读取该变量:
import com.intuit.karate.gatling.PreDef._ import io.gatling.core.Predef._ import scala.concurrent.duration._ class SubscriptionPerfTest extends Simulation { val testProtocol = karateProtocol( "/subscription" -> Nil ) val subscriptionScenario = scenario("订阅验证性能测试") .exec(karateFeature("classpath:getSubscriptionWithValidation.feature")) .exec { session => // 从Gatling会话读取变量并处理 val confirmedStatus = session("subscription_confirmed").as[Boolean] println(s"当前订阅确认状态: $confirmedStatus") session } setUp( subscriptionScenario.inject( rampUsers(20) during (10 seconds) ).protocols(testProtocol) ) }
核心要点
- 只有
karate.set()定义的变量会同步到Gatling会话,普通def变量仅Karate内部可见。 - 变量名大小写敏感,确保Gatling读取时的名称与Karate中设置的完全一致。
- 保持Gatling与Karate版本匹配(当前为0.9.4),避免API兼容性问题。
内容的提问来源于stack exchange,提问作者murthy
相关产品推荐
相关产品推荐

