如何从JMeter中不包含输入列表的数组中检索所有值

iyfjxgzm  于 2023-06-23  发布在  其他
关注(0)|答案(4)|浏览(103)

问题陈述:我有一个输入数组(即excludeStudyName)和我有一个响应数组,我试图获取不包含输入数组中给定字符串的元素。
输入数组值["Inflammation","Perf","Test_Study"]

获取响应中所有值的代码包含输入数组,

import groovy.json.JsonSlurper;

def fetchedStudyName = [] 
1.upto(vars.get('studyNameFetched_matchNr') as int, { index ->
    fetchedStudyName.add(vars.get('studyNameFetched_' + index))
});

String tempExcludeStudyName = vars.get('excludeStudyName'); 
def excludeStudyName = new JsonSlurper().parseText(tempExcludeStudyName);

def valid = fetchedStudyName.findAll  { a -> 
    excludeStudyName.any {a.contains(it)}
}

这是工作正常,我得到48个值,其中包含。但我想要不包含这个值的。
我尝试了excludeStudyName.any {!a.contains(it)}excludeStudyName.any {!(a.contains(it))},它正在打印响应数组中的所有值。
但不起作用。怎么修?

ttcibm8c

ttcibm8c1#

如果你想从fetchedStudyName中删除所有存在于excludeStudyName中的元素,你可以这样做:

def toRemove = excludeStudyName.intersect(fetchedStudyName)
fetchedStudyName.removeAll(toRemove)

更多信息:

jk9hmnmh

jk9hmnmh2#

你很接近了:

def valid = fetchedStudyName.findAll  { a -> 
    !excludeStudyName.contains(a)
}

应该工作。
如果excludeStudyName是一个很大的列表,你应该考虑将它改为一个set来加速contains(a)

Set excludeStudyName = new JsonSlurper().parseText(tempExcludeStudyName)

def valid = fetchedStudyName.findAll  { a -> 
    !excludeStudyName.contains(a)
}
ftf50wuq

ftf50wuq3#

这个方法如何
对你的代码做一个小改动

def valid = fetchedStudyName.findAll  { a -> 
    excludeStudyName.every { val ->
        !a.contains(val)
    }
}
fiei3ece

fiei3ece4#

您当前的代码获取所有与excludeStudyName匹配的值,并以valid返回它们。如果您的目标是获取与excludeStudyName不匹配的值,那么这里有一些选项。

def included = ["this", "is", "not", "here"]

def excluded = ["is"]

def valid = included.findAll  { a -> 
    excluded.any {a.contains(it)}
}

def valid1 = included.findAll  { a -> 
    excluded.every { val ->
        !a.contains(val)
    }
}

def valid2 = included.findAll  { a -> 
    !excluded.contains(a)
}

println("valid " + valid)
println("valid1 " + valid1)
println("valid2 " + valid2)

Output:
valid [this, is]
valid1 [not, here]
valid2 [this, not, here]

相关问题