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

如何通过迭代groupBuilderMap创建Gatling ScenarioBuilder并维持会话

Gatling会话丢失问题解决方案

你遇到的问题核心在于ChainBuilder数组未正确合并为可执行链,以及可能存在的group执行顺序不确定,导致后续组无法继承会话属性。以下是具体修改方案:

1. 修正ScenarioBuilder构建逻辑

将数组中的多个ChainBuilder合并为单一可执行链,确保会话能在所有步骤间正常传递:

protected ScenarioBuilder createScenario(GatlingScenario scenario) {
    Map<String, ChainBuilder[]> groupBuilderMap = scenario.getGroupChainBuilderMap();

    ScenarioBuilder scenarioBuilder = scenario(scenario.getScenarioName())
            .exec(session -> session
                    .setAll(Map.of("timeStamp", LocalDateTime.now(), "baseUrl", this.baseUrl)));

    for (Map.Entry<String, ChainBuilder[]> entry : groupBuilderMap.entrySet()) {
        String groupName = entry.getKey();
        ChainBuilder[] chainBuilders = entry.getValue();
        
        // 用Stream合并数组中的ChainBuilder为单一链
        ChainBuilder groupChain = Arrays.stream(chainBuilders)
                .reduce(chain(), ChainBuilder::exec);
        
        // 将group添加到场景中
        scenarioBuilder = scenarioBuilder
                .group(groupName)
                .on(groupChain);
    }

    return scenarioBuilder;
}

2. 保证Group执行顺序

HashMap的遍历顺序是不确定的,如果需要严格按照「登录组→添加项组」的顺序执行,需改用LinkedHashMap维护插入顺序:

Map<String, ChainBuilder[]> gpNameChainBuilderMap = Stream.of(
        Map.entry("Login Group", loginChainBuilder),
        Map.entry("AddItemGroup", addItemChainbuilder)
).collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        (oldVal, newVal) -> oldVal,
        LinkedHashMap::new
));

3. 验证会话属性引用

确保你的步骤中正确引用会话属性,比如使用Gatling的EL表达式${baseUrl},或者通过Session API获取:

// 示例:在请求中使用会话属性
http("Get Item")
        .get("${baseUrl}/items")
        .header("Authorization", session -> session.get("token").toString());

这样修改后,会话属性就能在所有group的步骤中正常传递,后续组的步骤也能正确解析会话数据。

内容的提问来源于stack exchange,提问作者Alferd Nobel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:28:27