我在我的JSR223预处理程序中写入凹陷的脚本
import groovy.json.JsonSlurper;
class jmeter {
def parsingJSON(String fileName){
def payload = new File(fileName).getText();
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(payload)
vars.put("myVar", object.event_id)
return object.event_id
}
}
def running = new jmeter()
running.parsingJSON( "C:/Users/payload.json")
这个将返回例外
ERROR o.a.j.m.JSR223PreProcessor: Problem in JSR223 script, JSR223 PreProcessor Dummy
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: vars for class: jmeter
但是当我删除课时,所以看起来像这样
import groovy.json.JsonSlurper;
def parsingJSON(String fileName){
def payload = new File(fileName).getText();
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(payload)
vars.put("myVar", object.event_id)
return object.event_id
}
parsingJSON( "C:/Users/payload.json")
我的问题:我理解Jmeter是内部API,但是我们不能在JSR223 Sampler / Jmeter中使用
vars
使用
vars.put()
在groovy脚本中使用vars.get()
? [获得输入后的更新1月19日]:我在Intellij中编写代码,看起来像这样。它运行得很好。
class{}
代码基本上将值放在参数myvar上,因此我可以在HTTP请求采样器中使用它。 我将其复制到Jmeter JSR223预处理程序,然后创建HTTP请求采样器,然后将$ {myvar}放入身体数据
[从2019年7月3日获得DMITRY输入后的更新]
我使用Intellij并像这样编写代码
import groovy.json.JsonSlurper
import org.apache.jmeter.threads.JMeterVariables
class jmeter {
JMeterVariables vars;
jmeter(JMeterVariables vars) {
this.vars = vars;
}
def parsingJSON(String fileName){
def payload = new File(fileName).getText();
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(payload)
vars.put("myVar", object.event_id)
println("My Var " + vars.get("myVar"))
return object.event_id
}
}
class runTest {
static void main(String[] args) {
JMeterVariables vars = new JMeterVariables();
def running = new jmeter(vars)
running.parsingJSON( "C:/Users/payload")
}
}
这个时间,甚至Intellij都会返回我一个错误
import groovy.json.JsonSlurper
import org.apache.jmeter.threads.JMeterVariables
class Global {
static vars = [:]
}
Global.vars.jmeterVars = vars
class jmeter {
def parsingJSON(String fileName){
def payload = new File(fileName).getText();
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(payload)
Global.vars.jmeterVars.put("myVar", object.event_id) //This will return java.lang.NullPointerException: Cannot invoke method put() on null object
println("My Var " + vars.get("myVar"))
return object.event_id
}
}
class runTest {
static void main(String[] args) {
def running = new jmeter()
running.parsingJSON( "C:/Users/payload")
}
}
基本上,误差是由
Exception in thread "main" java.lang.NullPointerException: Cannot invoke method put() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:43)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:34)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:135)
at jmeter.parsingJSON(jmeter.groovy:21)
at jmeter$parsingJSON.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
at runTest.main(jmeter.groovy:38)
引起的
[更新]:2019年7月17日,来自用户7294900的输入i在Intellij
中写了这样的代码
Global.vars.jmeterVars.put("myVar", object.event_id)
import groovy.json.JsonSlurper
import org.apache.jmeter.threads.JMeterVariables
class jmeter2 {
JMeterVariables vars;
jmeter2(JMeterVariables vars) {
this.vars = vars;
}
public addvar(String VarName, String value) {
vars.put(VarName, value);
}
def parsingJSON(String fileName) {
def payload = new File(fileName).getText();
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(payload)
addvar("myVar", object.event_id)
println("My Var " + vars.get("myVar"))
return object.event_id
}
}
class runTest {
static void main(String[] args) {
JMeterVariables vars = new JMeterVariables();
def running = new jmeter2(vars)
running.parsingJSON( "C:/Users/payload.json")
}
}
,
slf4j-simple-1.7.2
apachejmeter_core
)中添加一些JAR依赖项即可。 Intellij将返回结果。到目前为止,一切都很好。
我通过创建
logkit-1.2.2
,JSR223 sampler
和debug sampler
将代码粘贴到jmeter中。
我看不到听众中JSR223采样器创建的任何
Results Tree listener
。
myVar
payload.json仅包含一个非常简单的json
2019-07-17 12:33:15,806 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2019-07-17 12:33:15,806 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, *local*)
2019-07-17 12:33:15,812 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : Thread Group
2019-07-17 12:33:15,812 INFO o.a.j.e.StandardJMeterEngine: Starting 1 threads for group Thread Group.
2019-07-17 12:33:15,812 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
2019-07-17 12:33:15,812 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=1 ramp-up=1 delayedStart=false
2019-07-17 12:33:15,813 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2019-07-17 12:33:15,813 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2019-07-17 12:33:15,813 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-1
2019-07-17 12:33:15,825 INFO o.a.j.t.JMeterThread: Thread is done: Thread Group 1-1
2019-07-17 12:33:15,825 INFO o.a.j.t.JMeterThread: Thread finished: Thread Group 1-1
2019-07-17 12:33:15,825 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
2019-07-17 12:33:15,825 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, *local*)
我不确定为什么Jmeter不喜欢脚本。 有什么想法吗? 谢谢。
如果您想以最小的更改来保持代码结构,请考虑引入单独的类持有静态变量,在脚本脚本中,这些变量在任何地方都可以访问。thim,例如:
{
"event_id": "01DE95CRARFQ4X9WEKXACQYHVX",
"event_type": "form_response"
}
更多信息:
import groovy.json.JsonSlurper
class Global {
static vars = [:]
}
Global.vars.jmeterVars = vars
class jmeter {
def parsingJSON(String fileName) {
def payload = new File(fileName).getText();
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(payload)
Global.vars.jmeterVars.put("myVar", object.event_id)
return object.event_id
}
}
def running = new jmeter()
running.parsingJSON("C:/Users/payload.json")
对象传递到jmeter对象,JMeterVariables
import org.apache.jmeter.threads.JMeterVariables;
class jmeter {
JMeterVariables vars;
jmeter(JMeterVariables vars) {
this.vars = vars;
}
public addvar() {
vars.put("aaa","bbb");
}
}
def running = new jmeter(vars);
running.addvar();