如何在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
相关产品推荐
相关产品推荐

