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

如何在Gatling的Java脚本中调用其他脚本并行执行?

在Gatling(Java)中并行执行多个脚本(script_1与script_2)

核心思路

Gatling实现多脚本并行执行的关键是复用原有脚本的场景逻辑,在新脚本script_3的setUp方法中同时配置多个场景的注入策略,Gatling会默认并行启动这些负载场景。

步骤1:改造原有脚本(提取可复用场景)

如果script_1.java和script_2.java是独立的Simulation类,先将核心场景逻辑提取为公共静态变量,方便script_3引用:

script_1.java 修改后

import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.http;

public class script_1 extends Simulation {
    // 提取公共场景,供其他脚本复用
    public static final ScenarioBuilder SCENARIO_1 = scenario("Script 1 业务流程")
        .exec(http("请求1-获取列表")
            .get("/api/list"))
        .pause(2);

    // 保留原有脚本的独立运行配置(可选)
    {
        setUp(SCENARIO_1.injectOpen(atOnceUsers(5)))
            .protocols(http.baseUrl("http://your-target-host.com"));
    }
}

script_2.java 修改后

import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.http;

public class script_2 extends Simulation {
    public static final ScenarioBuilder SCENARIO_2 = scenario("Script 2 业务流程")
        .exec(http("请求2-提交数据")
            .post("/api/submit")
            .formParam("key", "value"))
        .pause(1);

    // 保留原有脚本的独立运行配置(可选)
    {
        setUp(SCENARIO_2.injectOpen(atOnceUsers(5)))
            .protocols(http.baseUrl("http://your-target-host.com"));
    }
}

步骤2:创建script_3.java实现并行执行

在script_3中引用前两个脚本的场景,在setUp中同时配置两个场景的注入策略,即可实现并行执行:

import io.gatling.javaapi.core.Simulation;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.http;

public class script_3 extends Simulation {
    // 引用script_1和script_2中的公共场景
    private final ScenarioBuilder scenario1 = script_1.SCENARIO_1;
    private final ScenarioBuilder scenario2 = script_2.SCENARIO_2;

    {
        setUp(
            // 为每个场景配置注入策略,示例用atOnceUsers,可替换为rampUsers等
            scenario1.injectOpen(atOnceUsers(10)),
            scenario2.injectOpen(atOnceUsers(10))
        )
        // 全局HTTP协议配置(若两个脚本baseUrl不同,可在各自场景单独设置)
        .protocols(http.baseUrl("http://your-target-host.com"))
        // 可选:添加全局断言、报告配置
        .assertions(global().responseTime().max().lt(500));
    }
}

关键说明

  • 并行逻辑:Gatling在setUp中传入多个场景的注入配置时,默认会并行启动所有场景的负载,无需额外关键字。
  • 注入策略:示例使用atOnceUsers(一次性启动指定用户数),可根据测试需求替换为rampUsers(梯度启动)、constantUsersPerSec(恒定用户速率)等其他Gatling注入方法。
  • 复用性:提取公共场景后,script_1、script_2仍可独立运行,script_3仅负责组合并行执行逻辑。

内容的提问来源于stack exchange,提问作者Anna Chepurkina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:25