如何使用 JMeter 打印缺失的元素?
How to print the missing elements using JMeter?
我有 2 个 api,其中 returns 响应代码由 ID 号和标题组成。
API_1 的示例响应是:(具有 100 个 ID)
{
"result": "OK",
"obj" : {
"list" : [
{
"id" : 924946341,
"title" : "qweryuy"
},
{
"id" : 8361,
"title" : "kgsklp"
}
]
}
}
API-2也有类似这样的反应
我想比较 api 的 ID 号并打印缺少的元素。
所以我使用了json提取器并提取了2个api的id。 API-1 将提取的变量名称作为 Id。
而API-2 已将变量名称提取为c_Id。
在第一个 API 的 json 提取器中,我提取了如下内容:
变量名:id
json 路径:$..id
匹配号:-1
选中后缀 ALL 框
与 api2 类似,我也使用了与 c_id
相同的可变名称
我已经使用 beanshell 断言来比较它们是否相同,但是无法知道如何显示缺失值,所以我得到了使用 JSR223 断言的建议,我已经使用了给定的代码,代码是:
log.info('id1: '+vars.get('id_ALL'))
log.info('id2: '+vars.get('c_id_ALL'))
def id1 = org.apache.commons.lang.StringUtils.substringBetween(vars.get('id_ALL'), '{', '}').split(',').collect()
def id2 = org.apache.commons.lang.StringUtils.substringBetween(vars.get('c_id_ALL'), '{', '}').split(',').collect()
def missing = org.apache.commons.collections.CollectionUtils.disjunction(id1, id2)
log.info('Missing values: ' +missing)
当我 运行 查看结果树中的脚本时,我收到断言失败消息:
javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: org for class: Script10
当我在 Log viwer 面板中看到时,我可以看到
id:924946341,8361
c_id: 924946341,09272,8361
然后我收到此错误而不是缺失值:
ERROR o.a.j.a.JSR223Assertion: Problem in JSR223 script: JSR223 Assertion javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: org for class: Script10 at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-jsr223-3.0.7.jar:3.0.7] at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.7.jar:3.0.7] at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_321] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.4.3] at org.apache.jmeter.assertions.JSR223Assertion.getResult(JSR223Assertion.java:50) [ApacheJMeter_components.jar:5.4.3] at org.apache.jmeter.threads.JMeterThread.processAssertion(JMeterThread.java:931) [ApacheJMeter_core.jar:5.4.3]
我尝试使用 beanshell 断言来查看 id 和 c_id 值是否正在提取,提取的变量值被提取得很好。
我做错了什么吗?或者你能建议任何其他方法来实现在 JMeter 中显示这些缺失的元素吗?当 100 个 id 乱七八糟时,我无法手动检查它们。
我无法重现您的问题,可能是环境问题,具体取决于您的 Java 版本和 JMeter Classpath.
中的库
查看您的变量值,删除 {
和 }
字符没有意义,因为它们不存在。
您可以尝试使用 import
statement 而不是指定完全限定的 class 名称,即将“您的”代码更改为:
import org.apache.commons.collections.CollectionUtils
log.info('id1: '+vars.get('id_ALL'))
log.info('id2: '+vars.get('c_id_ALL'))
def id1 = vars.get('id_ALL').split(',').collect()
def id2 =vars.get('c_id_ALL').split(',').collect()
def missing = CollectionUtils.disjunction(id1, id2)
log.info('Missing values: ' +missing)
演示:
我有 2 个 api,其中 returns 响应代码由 ID 号和标题组成。
API_1 的示例响应是:(具有 100 个 ID)
{
"result": "OK",
"obj" : {
"list" : [
{
"id" : 924946341,
"title" : "qweryuy"
},
{
"id" : 8361,
"title" : "kgsklp"
}
]
}
}
API-2也有类似这样的反应
我想比较 api 的 ID 号并打印缺少的元素。
所以我使用了json提取器并提取了2个api的id。 API-1 将提取的变量名称作为 Id。
而API-2 已将变量名称提取为c_Id。
在第一个 API 的 json 提取器中,我提取了如下内容:
变量名:id
json 路径:$..id
匹配号:-1
选中后缀 ALL 框
与 api2 类似,我也使用了与 c_id
相同的可变名称我已经使用 beanshell 断言来比较它们是否相同,但是无法知道如何显示缺失值,所以我得到了使用 JSR223 断言的建议,我已经使用了给定的代码,代码是:
log.info('id1: '+vars.get('id_ALL'))
log.info('id2: '+vars.get('c_id_ALL'))
def id1 = org.apache.commons.lang.StringUtils.substringBetween(vars.get('id_ALL'), '{', '}').split(',').collect()
def id2 = org.apache.commons.lang.StringUtils.substringBetween(vars.get('c_id_ALL'), '{', '}').split(',').collect()
def missing = org.apache.commons.collections.CollectionUtils.disjunction(id1, id2)
log.info('Missing values: ' +missing)
当我 运行 查看结果树中的脚本时,我收到断言失败消息:
javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: org for class: Script10
当我在 Log viwer 面板中看到时,我可以看到
id:924946341,8361
c_id: 924946341,09272,8361
然后我收到此错误而不是缺失值:
ERROR o.a.j.a.JSR223Assertion: Problem in JSR223 script: JSR223 Assertion javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: org for class: Script10 at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-jsr223-3.0.7.jar:3.0.7] at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.7.jar:3.0.7] at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_321] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.4.3] at org.apache.jmeter.assertions.JSR223Assertion.getResult(JSR223Assertion.java:50) [ApacheJMeter_components.jar:5.4.3] at org.apache.jmeter.threads.JMeterThread.processAssertion(JMeterThread.java:931) [ApacheJMeter_core.jar:5.4.3]
我尝试使用 beanshell 断言来查看 id 和 c_id 值是否正在提取,提取的变量值被提取得很好。
我做错了什么吗?或者你能建议任何其他方法来实现在 JMeter 中显示这些缺失的元素吗?当 100 个 id 乱七八糟时,我无法手动检查它们。
我无法重现您的问题,可能是环境问题,具体取决于您的 Java 版本和 JMeter Classpath.
中的库查看您的变量值,删除
{
和}
字符没有意义,因为它们不存在。您可以尝试使用
import
statement 而不是指定完全限定的 class 名称,即将“您的”代码更改为:import org.apache.commons.collections.CollectionUtils log.info('id1: '+vars.get('id_ALL')) log.info('id2: '+vars.get('c_id_ALL')) def id1 = vars.get('id_ALL').split(',').collect() def id2 =vars.get('c_id_ALL').split(',').collect() def missing = CollectionUtils.disjunction(id1, id2) log.info('Missing values: ' +missing)
演示: