Groovy Нет такой ошибки свойства при создании динамического JSON - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать динамический JSON с использованием данных CSV в Jmeter с препроцессором JSR223

Ниже приведен код для того же я использую CSV для данных для идентификатора и имени:

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: 23,669 ОШИБКА oajmJSR223PreProcessor: Проблема в сценарии JSR223, JSR223 PreProcessor javax.script.ScriptException: groovy.lang.MissingPropertyException: Нет такого свойства: это для класса: Script32 в org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval (GroovyScriptEngineImpl.java:320 all [[2.4] ~ all [[2.4]].13.jar: 2.4.13] at 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.JSR223TestElement.processFileOrScript (JSR223TestElement.java:221) ~ [ApacheJMeter_core.jar: 4.0 r1823414] в org.apache.jmeter.JSR223PreProcessor.process (JSR223PreProcessor.java:44) [ApacheJMeter_components.jar: 4.0 r1823414] в org.apache.jmeter.threads.JMeterThread.runPreProcessors (JMeterThread.java:849) [ApacheJMear].jmeter.threads.JMeterThread.executeSamplePackage (JMeterThread.java:467) [ApacheJMeter_core.jar: 4.0 r1823414] в org.apache.jmeter.threads.JMeterThread.processSampler (JMeterThread.java:234: rjj_jar_416: at16ar)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] в организации.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

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я считаю, что вы должны более точно копировать и вставлять пример кода , чтобы ваш раздел "Предметы" выглядел следующим образом:

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

Также помните, чтовам не следует использовать Функции JMeter и / или переменные в скриптах Groovy напрямую, поскольку это конфликтует с шаблоном GString и делает невозможным негативное влияние на производительность кэширование скомпилированных скриптов .

Поэтому я бы также рекомендовал изменить:

  • ${__P(DeviceFamily) на props.get('DeviceFamily) `
  • ${__time(yyyy-MM-dd'T'hh:mm:ss)} на new Date().format("yyyy-MM-dd'T'hh:mm:ss")
  • и т. д.

См. Шпаргалку шаблонов Groovy для JMeter для получения дополнительной информации о скриптах Groovy в JMeter, если необходимо

0 голосов
/ 24 сентября 2018

Вы должны использовать {} для замыкания здесь:

items.collect() { // wrong: [
    // ...
} // wrong: ]

Или просто items.collect { ... }

С [] компилятор увидит это как литерал карты иВы получаете вышеуказанные ошибки (it не определено)

...