作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我像这样在我的 JSR223 PreProcessor 中编写 Groovy 脚本
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")
vars
是 JMeter 内部 API,但我们不能使用
vars.put()
或
vars.get()
在 Groovy 脚本中使用
class{}
在 JMeter 中的 JSR223 采样器/预处理器中?
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")
}
}
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)
基本上,错误是由
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
,
logkit-1.2.2
)。 IntelliJ 将返回结果。到现在为止还挺好。
JSR223 sampler
将代码复制到 JMeter ,
debug sampler
, 和
Results Tree listener
.
myVar
由监听器中的 JSR223 采样器创建。
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*)
{
"event_id": "01DE95CRARFQ4X9WEKXACQYHVX",
"event_type": "form_response"
}
最佳答案
如果您想保持代码结构的更改最少,请考虑引入一个单独的类来保存静态变量,这些静态变量可以在您的 Groovy 脚本中的任何地方访问。
就像是:
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")
关于groovy - 如何在JSR223的Groovy类中使用JMeter的内部方法(vars.get()等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56800860/
我是一名优秀的程序员,十分优秀!