如何在Gatling中校验存储在另一文件中的接口响应值
Gatling 跨文件取值断言实现方案
情况1:TestParameters为Scala单例对象(最常用场景)
如果你的TestParameters是同项目下的Scala Object,只要在性能测试脚本文件顶部导入该对象,你写的原有断言代码本身就是合法可用的,完整示例结构如下:
// 顶部导入你自定义的参数存储对象,注意替换为你自己的包路径 import com.yourpackage.TestParameters import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class YourSimulation extends Simulation { val httpProtocol = http.baseUrl("你的接口服务地址") val scn = scenario("测试场景名称") .exec(http("接口请求名称") .post("/你的接口路径") // 此处补充你的请求头、请求体等配置 .check(jsonPath("$.id").is(TestParameters.locationId)) // 你编写的断言直接生效 ) setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol) }
情况2:TestParameters为properties/json等独立配置文件
如果你是把参数存在properties、yml这类非代码格式的独立文件里,需要先在脚本中加载解析文件再取值:
步骤1:加载配置文件
在Simulation类顶部添加文件加载逻辑,以properties文件为例:
import java.io.FileInputStream import java.util.Properties val props = new Properties() props.load(new FileInputStream("src/test/resources/TestParameters.properties")) val locationId = props.getProperty("locationId")
步骤2:修改断言取值
把断言中的取值替换为加载后的变量即可:
.check(jsonPath("$.id").is(locationId))
常见问题排查
- 如果运行时提示找不到TestParameters,先检查导入路径是否正确,单例对象是否声明为public
- 如果断言失败提示类型不匹配,jsonPath默认返回String类型,要是你的locationId是数字类型,需要手动指定解析类型:
.check(jsonPath("$.id").ofType[Int].is(TestParameters.locationId.toInt)) - 调试时可以加日志输出确认预期值是否正确:
.exec(session => { println("预期的locationId为:" + TestParameters.locationId) session })
内容的提问来源于stack exchange,提问作者Sriram RAJASEKARAN
相关产品推荐
相关产品推荐

