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

如何在Rest Assured接口自动化中用单循环替代6个循环?

优化Rest Assured短信模板ID获取代码(单循环+标志变量实现)

实现思路

用6个布尔标志变量标记对应模板ID是否已获取,通过一次循环遍历所有模板,每次循环仅对未找到的模板类型进行匹配,匹配成功后赋值ID并将对应标志设为true,后续循环不再处理该类型。同时可在所有ID都获取完成后提前终止循环,提升执行效率。

优化后代码

@When("User fetches the sms template from the templates fetched")
public void user_fetches_the_sms_template_from_the_templates_fetched() {
    List<String> jsonResponse = response.jsonPath().getList("$");
    // 定义标志变量,标记对应ID是否已获取
    boolean foundAgentMissedCall = false;
    boolean foundCallerMissedCall = false;
    boolean foundAgentReceivedCall = false;
    boolean foundCallerReceivedCall = false;
    boolean foundAnsweredOnIvr = false;
    boolean foundAnsweredOnAa = false;

    for (int i = 0; i < jsonResponse.size(); i++) {
        // 提前终止循环:所有ID都已获取完成
        if (foundAgentMissedCall && foundCallerMissedCall && foundAgentReceivedCall 
            && foundCallerReceivedCall && foundAnsweredOnIvr && foundAnsweredOnAa) {
            break;
        }

        String currentType = getJsonPath(response, "type[" + i + "]");
        String currentId = getJsonPath(response, "id[" + i + "]");

        // 仅在未找到对应ID时进行匹配
        if (!foundAgentMissedCall && currentType.equals("agent_sms_missed_call")) {
            agentMissedCallId = currentId;
            foundAgentMissedCall = true;
        } else if (!foundCallerMissedCall && currentType.equals("caller_sms_missed_call")) {
            callerMissedCallSmsId = currentId;
            foundCallerMissedCall = true;
        } else if (!foundAgentReceivedCall && currentType.equals("agent_sms_received_call")) {
            agentReceivedCallSmsId = currentId;
            foundAgentReceivedCall = true;
        } else if (!foundCallerReceivedCall && currentType.equals("caller_sms_received_call")) {
            callerReceivedCallSmsId = currentId;
            foundCallerReceivedCall = true;
        } else if (!foundAnsweredOnIvr && currentType.equals("answered_on_ivr_sms")) {
            answeredOnIvrSmsId = currentId;
            foundAnsweredOnIvr = true;
        } else if (!foundAnsweredOnAa && currentType.equals("answered_on_auto_attendant_sms")) {
            answeredOnAaSmsId = currentId;
            foundAnsweredOnAa = true;
        }
    }
}

关键细节说明

  • 标志变量的作用:每个标志对应一个模板类型,一旦匹配成功就设为true,后续循环会跳过该类型的判断,确保每个IF条件仅执行一次。
  • 提前终止循环:当所有标志都变为true时,说明所有需要的ID都已获取,直接跳出循环,避免不必要的遍历。
  • 减少重复解析:每次循环先获取当前项的type和id,避免多次调用getJsonPath解析相同路径,提升代码执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:05:35