如何使用 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 乱七八糟时,我无法手动检查它们。

  1. 我无法重现您的问题,可能是环境问题,具体取决于您的 Java 版本和 JMeter Classpath.

    中的库
  2. 查看您的变量值,删除 {} 字符没有意义,因为它们不存在。

  3. 您可以尝试使用 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)
    

演示:

更多信息:Scripting JMeter Assertions in Groovy - A Tutorial