JMeter中Groovy脚本处理List类型自定义变量返回空值问题
JMeter多值列表匹配返回空值问题排查与解决
问题原因
你的代码中使用了every方法来判断匹配逻辑,这是导致多值列表返回空的核心原因:
studyNameNeedToExcludeFromDeletion.every { keywords -> studyName.contains(keywords) }这行代码要求当前name必须包含列表中的所有关键词才会被保留。- 当自定义变量是多值列表时,几乎没有name能同时命中所有关键词,因此最终筛选结果为空。
- 而排除场景下用
!studyName.contains(keywords)时,实际是排除掉包含所有关键词的条目,这类条目数量少,剩余条目多,所以看起来正常,但这并不是你需要的「匹配任意关键词」的逻辑。
解决方案
如果你需要筛选出包含列表中任意一个关键词的条目,只需把every替换为any即可。any方法的逻辑是:只要name包含列表中的任意一个关键词,就会被纳入筛选结果。
修正后的代码(保留原有流程)
import groovy.json.JsonSlurper; def completeFetchedStudyNameFromResponse = []; 1.upto(vars.get('allStudyNameFetched_matchNr') as int, { index -> completeFetchedStudyNameFromResponse.add(vars.get('allStudyNameFetched_' + index)); }); String tempToBeExcludedStudyName = vars.get('excludeStudyName'); def studyNameNeedToExcludeFromDeletion = new JsonSlurper().parseText(tempToBeExcludedStudyName); // 把every替换为any def filteredStudyName = completeFetchedStudyNameFromResponse.findAll { studyName -> studyNameNeedToExcludeFromDeletion.any { keywords -> studyName.contains(keywords); } } def bdConverter = new JsonSlurper(); def responseBDTemp = prev.getResponseDataAsString(); def responseBD = bdConverter.parseText(responseBDTemp); def resultStudyUUIDCollector = []; filteredStudyName.each { studyNameFew -> resultStudyUUIDCollector.add(responseBD.accounts.find { account -> account.name == studyNameFew }.uuid) } vars.putObject("myList", resultStudyUUIDCollector);
更简洁的优化版本(推荐)
直接解析响应JSON完成筛选,省去JSON Extractor提取name的步骤,减少中间环节:
import groovy.json.JsonSlurper // 解析自定义变量的目标关键词列表 def targetKeywords = new JsonSlurper().parseText(vars.get('excludeStudyName')) // 直接解析接口响应 def responseJson = new JsonSlurper().parseText(prev.getResponseDataAsString()) // 筛选name包含任意关键词的条目,并提取uuid def resultUUIDs = responseJson.accounts.findAll { account -> targetKeywords.any { keyword -> account.name.contains(keyword) } }.collect { it.uuid } // 将结果存入JMeter变量 vars.putObject("myList", resultUUIDs)
补充说明
- 如果你的需求确实是匹配所有关键词(极少场景会用到),那需要检查你的自定义变量和响应中的name是否真的存在同时包含所有关键词的条目,否则结果为空是正常的。
- 优化版本的代码更高效,避免了多次解析和中间变量的维护,推荐使用。
内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick
相关产品推荐
相关产品推荐

