Произошел сбой RandomUtils.nextLong (10L, 1000L) с «неожиданным токеном: 10L» в теле HTTP-запроса JMeter - PullRequest
0 голосов
/ 06 марта 2020

Я должен передать случайное длинное значение в одном из моих данных тела HTTP-запроса.

Я использовал код "${__groovy(import org.apache.commons.lang3.RandomUtils;RandomUtils.nextLong(10L,1000L);)}"

Я попробовал соответствующий код groovy в Препроцессор JSR223 для groovy, и он правильно печатает номер;

long rand = org.apache.commons.lang3.RandomUtils.nextLong(2000, 10000);
log.info("random   [" + rand + "]");

Но когда я использую тот же код в __ groovy () внутри тела HTTP-запроса, он завершается неудачно с;

2020-03-06 09:50:57,821 INFO o.a.j.m.J.JSR223 PreProcessor: random   [4023]
2020-03-06 09:50:57,827 WARN o.a.j.f.Groovy: Error running groovy script
javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script358.groovy: 1: unexpected token: 10L @ line 1, column 66.
   domUtils;RandomUtils.nextLong(10L
                                 ^

1 error

    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:162) ~[groovy-all-2.4.16.jar:2.4.16]
    at javax.script.AbstractScriptEngine.eval(Unknown Source) ~[?:1.8.0_221]
    at org.apache.jmeter.functions.Groovy.execute(Groovy.java:121) [ApacheJMeter_functions.jar:5.1.1 r1855137]
    at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:136) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:111) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.testelement.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:281) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.config.Argument.getValue(Argument.java:146) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.util.HTTPArgument.getEncodedValue(HTTPArgument.java:248) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.util.HTTPArgument.getEncodedValue(HTTPArgument.java:229) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.setupHttpEntityEnclosingRequestData(HTTPHC4Impl.java:1529) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.handleMethod(HTTPHC4Impl.java:794) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:569) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1231) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1220) [ApacheJMeter_http.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]

Я вижу, что могу получить другие groovy сценарии, такие как "$ {__ groovy (new Date (). Format (" yyyy-MM-dd'T'HH: mm: ss.SSS'Z '");)}" нормально работает внутри данных тела HTTP-запроса.

Что мне здесь не хватает?

ОБНОВЛЕНИЕ: Я также пробовал код без "L" даже RandomUtils.nextLong(10,1000); то же исключение.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

https://jmeter.apache.org/usermanual/functions.html#__groovy

Значения аргумента, которые сами содержат запятые, следует по необходимости экранировать. Если вам нужно включить запятую в значение вашего параметра, экранируйте ее следующим образом: \,

, поэтому она должна выглядеть следующим образом:

${__groovy( org.apache.commons.lang3.RandomUtils.nextLong(10\,1000) )}

0 голосов
/ 09 марта 2020

Вам необходимо экранировать запятую, например:

${__groovy(return org.apache.commons.lang3.RandomUtils.nextLong(10\, 1000),)}

В следующий раз рассмотрите возможность использования Диалог функционального помощника , чтобы получить правильный синтаксис для функций JMeter.

Как правило, рекомендуется использовать встроенные тестовые элементы и / или функции JMeter и избегать сценариев, где это возможно, поэтому рассмотрите возможность использования вместо __ Random () функции соответствующий синтаксис:

${__Random(10,1000,)}

если вы укажете третий параметр - JMeter сохранит сгенерированное значение в переменной.

Дополнительная информация: Apache Функции JMeter - введение

...