Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy在创建动态json时没有此类属性错误_Groovy_Jmeter_Jsr223_Jsonbuilder - Fatal编程技术网

Groovy在创建动态json时没有此类属性错误

Groovy在创建动态json时没有此类属性错误,groovy,jmeter,jsr223,jsonbuilder,Groovy,Jmeter,Jsr223,Jsonbuilder,我正在尝试使用JSR223预处理器在jmeter中使用csv数据创建动态json 下面是我使用CSV作为Id和名称数据的代码: def builder = new groovy.json.JsonBuilder() @groovy.transform.Immutable class Items { String Id String Name } def items = new File("Item.txt").readLines().collect { line ->

我正在尝试使用JSR223预处理器在jmeter中使用csv数据创建动态json

下面是我使用CSV作为Id和名称数据的代码:

def builder = new groovy.json.JsonBuilder()

@groovy.transform.Immutable
class Items {
    String Id
    String Name
}

def items = new File("Item.txt").readLines().collect { line -> new Items(line.split(",")[0], line.split(",")[1]) }
builder.Rule(

        __type: "DataCollectionRule",
        DeviceFamily: '${__P(DeviceFamily)}',
        RuleId: 0,
        Name: 'test-${__time(yyyy-MM-dd'T'hh:mm:ss)}-${__counter(TRUE,)}',
        Targets:
                [
                        Groups :
                                [
                                        [
                                                Id: '${logicalid1_1}',
                                        ]
                                ],
                        Devices:
                                [

                                ]
                ],
        StartDate: '/Date(${__time(,)})/',        
        IsEnabled: true,
        Priority: 0,
        AlertType: 0,
        DeliverySchedule:
                [
                                                Id         :   1,
                                                Name       :  "Every 30 Minutes",
                                                Period     :  "30M"

                ],
        CollectionSchedule:                      
               [
                                              Id         :   1,
                                                Name       :  "Every 30 Minutes",
                                                Period     :  "30M"
              ],                    
        Items  : items.collect() [
        [

                                                Id         : it.Id,
                                                Name       : it.Name                                                

        ]
                ],
        LocationAccuracy:
                [
                                                UseGPS     :  false,
                                       DistanceInMeters : 100,
                                       ReportToServer  : true,
                                       AccuracyInMeters : 10
             ],
          HasDolphinCounters: false,
          EnrollmentCertificateId: null,
          EnrollmentCertificateName: "",
        DatabaseHighWatermark: 28,
        DatabaseLowWatermark: 14,
        DeviceHighWatermark: 400,
        DeviceLowWatermark:  200

)

sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('', builder.toPrettyString(), '')
sampler.setPostBodyRaw(true);
在运行测试时,我得到了错误请求的HTTP 400

日志消息如下所示:

2018-09-24 13:49:23669错误o.a.j.m.JSR223预处理器:JSR223脚本中存在问题,JSR223预处理器 javax.script.ScriptException:groovy.lang.MissingPropertyException:没有这样的属性:它用于类:Script32 在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)~[groovy-all-2.4.13.jar:2.4.13] 在org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72)~[groovy-all-2.4.13.jar:2.4.13] 在javax.script.CompiledScript.eval(未知源代码)~[?:1.8.0_151] 在org.apache.jmeter.util.jsr23testelement.processFileOrScript(jsr23testelement.java:221)~[ApacheJMeter\u core.jar:4.0 r1823414] 在org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44)[ApacheJMeter_components.jar:4.0 r1823414] 位于org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:849)[ApacheJMeter_core.jar:4.0 r1823414] 在org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:467)[ApacheJMeter_core.jar:4.0 r1823414] 位于org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:416)[ApacheJMeter_core.jar:4.0 r1823414] 在org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:250)[ApacheJMeter_core.jar:4.0 r1823414] 在java.lang.Thread.run(未知源代码)[?:1.8.0_151] 原因:groovy.lang.MissingPropertyException:无此类属性:它用于类:Script32 在org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)~[groovy-all-2.4.13.jar:2.4.13] 在org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)~[groovy-all-2.4.13.jar:2.4.13] 在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)~[groovy-all-2.4.13.jar:2.4.13] 在Script32.run(Script32.groovy:46)~[?:?] 在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)~[groovy-all-2.4.13.jar:2.4.13] ... 9更多

CSV如下所示:

   -1,BatteryStatus
    -3,AvailableMemory
    -5,AvailableStorage

提前感谢您

您必须在此处使用
{}
进行结束:

items.collect() { // wrong: [
    // ...
} // wrong: ]
或者只是
items.collect{…}


使用
[]
编译器会将其视为一个映射文字,您会发现上面的错误(
未定义)

我认为您应该更准确地复制和粘贴,也就是说,您的“项”部分应该如下所示:

Items: items.collect() {
    [
            Id  : it.Id,
            Name: it.Name
    ]
}

还要注意的是,您不应该直接在Groovy脚本中使用它,因为它与功能冲突,并且不可能对性能产生负面影响

因此,我也建议改变:

  • ${P(DeviceFamily)
    props.get('DeviceFamily
    )`
  • ${uu时间(yyyy-MM-dd'T'hh:MM:ss)}
    新日期()。格式(“yyy-MM-dd'T'hh:MM:ss”)
  • 等等
如有必要,请参阅本文以了解有关JMeter中Groovy脚本的更多信息