You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:36:02