Gatling中如何在POST调用执行指定时长后仅运行一次GET请求
Gatling 先执行指定时长POST压测后单次执行GET的实现方案
核心思路是拆分两个独立执行场景,通过Gatling内置的执行顺序控制能力实现阶段流转,具体实现如下:
实现步骤
- 第一阶段定义POST压测场景:用
during方法控制POST请求的总执行时长,所有并发用户仅在该时长内循环执行POST请求 - 第二阶段定义GET校验场景:仅配置1个用户执行单次GET,通过
andThen方法指定该场景必须在POST场景完全结束后再启动
完整示例代码
import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class PostThenGetSimulation extends Simulation { // HTTP公共配置,替换为你自己的测试域名和头信息 val httpConf = http.baseUrl("https://test.example.com") .acceptHeader("application/json") .contentTypeHeader("application/json") // POST请求逻辑,替换为你自己的接口路径和请求体 val postAction = exec(http("业务POST请求") .post("/api/business") .body(StringBody("""{"param":"testValue"}""")).asJson .check(status.is(200)) ) // GET请求逻辑,替换为你自己的接口路径 val getAction = exec(http("校验GET请求") .get("/api/queryResult") .check(status.is(200)) ) // POST压测场景:配置并发用户数和运行时长 val postScenario = scenario("POST压测阶段") // 这里可按需添加登录、初始化等前置逻辑 .during(10 minutes) { // 替换为你需要的POST执行时长,支持seconds/minutes/hours单位 exec(postAction) // 按需添加思考时间,例如.pause(2 seconds) } // GET校验场景:仅执行1次 val getScenario = scenario("GET校验阶段") .exec(getAction) // 配置执行顺序 setUp( // POST阶段的并发注入策略,这里示例为30秒内匀速启动20个并发用户 postScenario.inject(rampUsers(20).during(30 seconds)) .andThen( // POST全部结束后,立即发起1次GET请求 getScenario.inject(atOnceUsers(1)) ) ).protocols(httpConf) }
注意事项
andThen链式执行场景的能力需要Gatling 3.3及以上版本支持,低版本可通过拆分两个独立脚本依次运行实现相同效果- 如果需要POST结束后间隔固定时间再发起GET,可在
getScenario的exec(getAction)前添加.pause(需要的等待时长)配置 - POST场景如果需要携带登录态,可把登录逻辑放到
during循环之前执行,避免每次循环重复登录
内容的提问来源于stack exchange,提问作者ramesh kumar
相关产品推荐
相关产品推荐

