使用Beanshell Pre Processor实现单线程单次请求生成30个ID
解决方案:单线程单次GET请求生成30个ID(Beanshell实现)
问题背景
单线程场景下,需通过1次GET API请求生成30个personId,要求用Beanshell循环30次拼接字符串实现,使用Loop Controller未达成需求。
API响应示例:
{"code":"CMSI0000","message":"Success.","data":[{"personId":"8a8782188a459e86018a67d58a5c2885"},{"personId":"8a8782188a459e86018a67d58a5c2885"},{"personId":"8a8782188a459e86018a67d58a5c2885"}]}
Beanshell实现步骤
- 前置准备:添加HTTP Request采样器调用目标GET API,通过JSON Extractor提取单个
personId(存入变量singlePersonId)。 - 添加Beanshell PostProcessor:在HTTP Request采样器下添加该组件,写入以下脚本:
// 初始化拼接字符串 StringBuilder idList = new StringBuilder("["); // 循环30次拼接personId for (int i = 0; i < 30; i++) { // 获取提取到的单个personId String pid = vars.get("singlePersonId"); // 拼接JSON格式对象 idList.append("{\"personId\":\"").append(pid).append("\"}"); // 最后一次循环不添加逗号 if (i != 29) { idList.append(","); } } // 闭合数组 idList.append("]"); // 将结果存入JMeter变量*generatedIdList*,供后续使用 vars.put("generatedIdList", idList.toString()); // 可选:打印结果到控制台验证 log.info("生成的30个ID列表:" + idList.toString());
- 验证结果:通过Debug Sampler查看generatedIdList变量值,确认是否生成包含30个
personId的JSON数组。
为什么Loop Controller不适用?
Loop Controller会重复执行其下的采样器,导致多次调用GET API,不符合“单次请求生成30个ID”的要求。而Beanshell循环是在单次请求响应后,通过内存拼接字符串生成多ID列表,仅调用一次API。
内容的提问来源于stack exchange,提问作者Abhijith Lomada
相关产品推荐
相关产品推荐

