Arrays Jmeter-ArrayList中的JSON响应操作追加节点
我得到了HTTP GET请求作为JSON对象的响应,我希望使用该JSON并将其传递给另一个HTTP请求。我得到了以下回应数据Arrays Jmeter-ArrayList中的JSON响应操作追加节点,arrays,json,jmeter,Arrays,Json,Jmeter,我得到了HTTP GET请求作为JSON对象的响应,我希望使用该JSON并将其传递给另一个HTTP请求。我得到了以下回应数据 { "settlementFolio": "0002", "settlementID": 283, "businessUnitID": 43, "routeID": 955, "chargeAmount": 22248.0000,
{
"settlementFolio": "0002",
"settlementID": 283,
"businessUnitID": 43,
"routeID": 955,
"chargeAmount": 22248.0000,
"paymentAmount": 68560.6000,
"isPaid": false,
"hasValidCrewConfiguration": true,
"settlementDate": "2020-09-21T00:00:00",
"charged": 68560.6000,
"packageRemain": 7500.0000,
"totalBoxes": 280,
"detail": [
{
"settlementTransactionID": 1,
"settlementTransactionDescription": "1 Ventas Netas",
"charge": 0.0,
"payment": 61060.6000,
"isAutomatic": true,
"isForClient": false,
"isCharge": false,
"isChecked": false,
"settlementTransactionClientDetail": [
{
"settlementTransactionID": 3456,
"clientID": 392342,
"saleNote": 11792,
"amount": 30530.3000,
"reference": "",
"clientName": "OXXO NUEVA MAYAPAN",
"isChecked": false
},
{
"settlementTransactionID": 3456,
"clientID": 391322,
"saleNote": 11793,
"amount": 30530.3000,
"reference": "",
"clientName": "OXXO CHICHI SUAREZ",
"isChecked": false
}
]
}
],
"productTypeCounter": [
{
"centralCostID": 1,
"centralCostName": "Refrescos",
"sellUnit": 280,
"cNomina": 0.0000
}
]
}
我需要用“settlementTransactionID”附加这样一个节点:2
我用的是这样的东西
String addMore = '${detail}';
def detail = new groovy.json.JsonSlurper().parseText(addMore);
detail.put(deposito);
vars.put("detail", new groovy.json.JsonBuilder(detail).toPrettyString());
log.info("",vars.get('detail'));
日志显示以下错误
020-09-23 09:09:25,857 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 PostProcessor
javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.put() is applicable for argument types: (org.apache.groovy.json.internal.LazyMap) values: [[settlementTransactionID:11, settlementTransactionDescription:11 Deposito de Efectivo, ...]]
Possible solutions: sum(), pop(), get(int), get(int), sum(java.lang.Object), plus(java.lang.Object)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-jsr223-3.0.3.jar:3.0.3]
at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.3.jar:3.0.3]
at javax.script.CompiledScript.eval(CompiledScript.java:89) ~[java.scripting:?]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:222) ~[ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) [ApacheJMeter_components.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:940) [ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:572) [ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) [ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) [ApacheJMeter_core.jar:5.3]
at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.put() is applicable for argument types: (org.apache.groovy.json.internal.LazyMap) values: [[settlementTransactionID:11, settlementTransactionDescription:11 Deposito de Efectivo, ...]]
Possible solutions: sum(), pop(), get(int), get(int), sum(java.lang.Object), plus(java.lang.Object)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:70) ~[groovy-3.0.3.jar:3.0.3]
at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46) ~[groovy-3.0.3.jar:3.0.3]
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-3.0.3.jar:3.0.3]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-3.0.3.jar:3.0.3]
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139) ~[groovy-3.0.3.jar:3.0.3]
at Script158.run(Script158.groovy:31) ~[?:?]
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317) ~[groovy-jsr223-3.0.3.jar:3.0.3]
... 9 more
我们无法帮助您,因为不清楚这些
${detail}
和${deposito}
的含义和包含内容
如果您收到一张类似以下内容的存款单
:
{
"settlementTransactionID": 2,
"settlementTransactionDescription": "2 Envase Faltante",
"charge": 0.0,
"payment": 7500.0000,
"isAutomatic": true,
"isForClient": false,
"isCharge": false,
"isChecked": false,
"settlementTransactionClientDetail": [
{
"settlementTransactionID": 3461,
"clientID": 0,
"saleNote": null,
"amount": 7500.0000,
"reference": "202|75.00|100.000",
"clientName": "",
"isChecked": false
}
]
}
您希望将其添加到某个采样器的响应中,并将结果存储到另一个JMeter变量中,您可以使用以下代码:
def originalResponse = new groovy.json.JsonSlurper().parse(prev.getResponseData())
originalResponse.detail.add(new groovy.json.JsonSlurper().parseText(vars.get('deposito')))
vars.put('modifiedResponse', new groovy.json.JsonBuilder(originalResponse).toPrettyString())
假设一切顺利,您将在${modifiedResponse}
JMeter变量中获得所需的JSON负载
更多信息:
def originalResponse = new groovy.json.JsonSlurper().parse(prev.getResponseData())
originalResponse.detail.add(new groovy.json.JsonSlurper().parseText(vars.get('deposito')))
vars.put('modifiedResponse', new groovy.json.JsonBuilder(originalResponse).toPrettyString())