JMeter setTestLogicalAction из JMeterContext выдает «Невозможно связаться с методом экземпляра» - PullRequest
0 голосов
/ 29 марта 2019

JMeter 5.1.Следующая ссылка дает рабочий код Условный перезапуск пользовательского потока в JMeter , где setTestLogicalAction вызывается из SampleResult.метод действительно указан в методах в https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html. Однако, он также указан в https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html, но использование org.apache.jmeter.threads.JMeterContext.setTestLogicalAction дает

ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``    import org.apache.jmeter.samplers.SampleResult;     import org.apache.jmeter . . . '' : Cannot reach instance method: setTestLogicalAction( org.apache.jmeter.threads.JMeterContext$TestLogicalAction ) from static context: org.apache.jmeter.threads.JMeterContext

Почему я не могу использовать setTestLogicalActionот JMeterContext?Что мне не хватает в классах в java?

Кроме того, код из вышеупомянутого поста работает в beanshell, но ни этот, ни измененный, как и приведенный выше код, не работают в JSR223 + Groovy.После того, как вы заметили, что методы не являются статичными, код выглядит как показано ниже (оба пути были опробованы, наконец, я перечислил их вместе) в groovy, без ошибок, но поток продолжается, не перезапускается ...

jmco = new org.apache.jmeter.threads.JMeterContext();
jmsr = new org.apache.jmeter.samplers.SampleResult();

jmco.setTestLogicalAction(org.apache.jmeter.threads.JMeterContext.TestLogicalAction.START_NEXT_ITERATION_OF_THREAD);                                 
jmsr.setTestLogicalAction(org.apache.jmeter.threads.JMeterContext.TestLogicalAction.START_NEXT_ITERATION_OF_THREAD); 

МожетЯ использую setTestLogicalAction в groovy script?

PS Интересно, как beanshell может вызывать нестатический метод без создания экземпляров ...

ADDED 2019/04/01:

def mycontext = org.apache.jmeter.threads.JMeterContextService.getContext()
mycontext.setTestLogicalAction(org.apache.jmeter.threads.JMeterContext.TestLogicalAction.START_NEXT_ITERATION_OF_THREAD);

код был изменен на вышеуказанный после предложения в ответе Дмитрия, но код не перезапускает поток.

1 Ответ

0 голосов
/ 29 марта 2019
  1. Если вы плохо разбираетесь в программировании, используйте Flow Control Action сэмплер вместо того, чтобы пытаться повторить его функциональность в коде, в любом случае это будет быстрее.
  2. Нет необходимости создавать экземпляр JMeterContext или SampleResult, поскольку они предопределены в тестовых элементах JSR223 , более того, вы делаете это неправильно, т. Е. Правильный способ доступа к JMeterContext - это вызов Функция JMeterContextService.getContext ()

    enter image description here

  3. Начиная с JMeter 3.1 вы должны использовать JSR223 Test Elements и язык Groovy для сценариев , поэтому я бы рекомендовал забыть о Beanshell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...