Karate-Gatling中如何仅对POST接口压测并复用GET接口返回值
Karate-Gatling 仅压测POST接口的实现方案
核心逻辑是拆分初始化取参逻辑和压测逻辑,GET接口仅作为前置执行必要次数,不纳入压测负载模型。
1. 拆分Feature文件
1.1 单独编写GET取参的初始化Feature
不要将GET和POST逻辑放在同一个Scenario中,否则整个流程都会被重复压测。新建get-init-params.feature,仅实现参数获取并存储为全局可访问的变量:
Feature: 初始化获取POST接口所需参数 Scenario: 调用GET接口取参 Given url '你的GET接口地址' When method get Then status 200 # 将返回中需要的字段存入全局session,供后续POST场景调用 * karate.set('requiredPostParam', response.targetField)
1.2 单独编写POST接口的压测Feature
新建post-load-test.feature,直接引用全局变量即可,无需再次调用GET接口:
Feature: POST接口压测逻辑 Scenario: 发送POST请求 Given url '你的POST接口地址' And request { "param": "#(requiredPostParam)" } When method post Then status 200
2. 调整Gatling模拟类配置
在Scala模拟类中通过场景串行配置,让GET初始化场景仅执行1次,再启动POST压测场景:
import com.intuit.karate.gatling.PreDef._ import io.gatling.core.Predef._ import scala.concurrent.duration._ class PostOnlyLoadTest extends Simulation { // 定义初始化场景,仅执行1次 val initScenario = scenario("参数初始化").exec(karateFeature("classpath:get-init-params.feature")) // 定义POST压测场景 val postScenario = scenario("POST接口压测").exec(karateFeature("classpath:post-load-test.feature")) setUp( // 先执行初始化,仅启动1个用户跑1次 initScenario.inject(atOnceUsers(1)) // 初始化完成后再执行POST压测,按你需要的负载策略配置即可 .andThen( postScenario.inject( constantUsersPerSec(100).during(30.minutes) // 示例:恒定100并发,持续30分钟 ) ) ) }
补充说明
- 如果每个压测用户需要使用不同的参数,可以在初始化场景批量拉取所有需要的参数存入Feeder,压测场景直接从Feeder取值即可,避免重复调用GET接口
- 不要将GET和POST逻辑写在同一个Feature的同一个Scenario下,否则整个流程都会被计入压测执行次数
内容的提问来源于stack exchange,提问作者NoNoNo
相关产品推荐
相关产品推荐

