Jmeter: невозможно использовать несколько условных операторов в If Controller - PullRequest
0 голосов
/ 03 октября 2018

ОТВЕТ НА ВОПРОС

Пожалуйста, дорогой читатель, если хотите, можете продолжить и прочитать вопрос.Но на самом верху я хочу дать ответ Дмитрия, чтобы другие не тратили время на игры с Jmeter If Controller.

Если вы хотите использовать несколько операторов условия в If Controller, особенно если вы хотите проверить, что переменные равны некоторым строкам, НЕ ИСПОЛЬЗУЙТЕ $ {__ javaScript ()} FUNTION !!!Дмитрий предложил вместо этого использовать функцию $ {__ groovy ()}, которая работала в моей ситуации.Правильный синтаксис ниже.Обратите внимание на открывающую скобку, расположение запятой и закрывающие фигурные скобки:

$ {__ groovy ((vars.get ('yourVariable'). Equals ('someString') && vars.get ('yourAnotherVariable'). Equals('someOtherString')),)}

Добавление

Если вы хотите сэкономить свое время при попытке сделать Если контроллер работает с несколькими условиями, всегда снимите флажок Интерпретировать условиекак выражение переменной .В противном случае вам придется придерживаться этих __javaScript, __groovy или других функций, поскольку нет никакого способа понять, как, черт возьми, они предполагают работать и почему они не преобразуются в true или false (файл журнала всегда чист в этой ситуации),Вот как вы обходитесь без помощи этих «функций».Пожалуйста, смотрите мой пример ниже

${yourVariable} != 'not_found' && ${youAnotherVariable_matchNr} == 1 

Вот и все, нет необходимости использовать какие-либо функции.

enter image description here


НАЧАЛЬНЫЙ ВОПРОС

В Jmeter v4.0 r 1823414 Я могу использовать Если контроллер только с одним оператором, но не с несколькими.Пример использования нескольких операторов, которые я взял из здесь , и было предложено использовать

$ {__ javaScript ("$ {responsecode}" == "404")} && ${__javaScript ("$ {responseMessage}" == "Not Found")}

Я также проверил страницу учебника Blazemeter , но он ничего не говорит о нескольких условных выражениях внутри Если контроллер .

Пример моего плана тестирования ниже

enter image description here

В моем отладочном сэмплере я вижу следующее

enter image description here

В каком-то месте плана тестирования я поместил IF Controller , чтобы проверить, что обе переменные равны not_found ...

${__javaScript(vars.get('manual_bug')=='not_found')} && ${__javaScript(vars.get('integration_bug')=='not_found')}

... так что все последующие действия выполняются.Однако этот IF Controller либо никогда не выполняется, либо всегда возвращает FALSE.Не уверен, что с ним происходит.

Прежде чем обвинить меня :-) в том, что я не провел достаточно исследований и поспешил задать вопрос по SO, я приведу ниже примеры того, что я уже пробовал, и это не помогло:

  • С двойными кавычками вокруг переменных

    $ {__ javaScript (vars.get ("manual_bug") == "not_found")} && $ {__ javaScript (vars.get (")integra_bug ") ==" not_found ")}

  • С дополнительным пробелом между знаком равенства

$ {__ javaScript (vars.get ('manual_bug') ==' not_found ')} && $ {__ javaScript (vars.get ('gration_bug') == 'not_found')}

  • Избегайте использования vars.get

$ {__ javaScript ($ {manual_bug} == 'not_found')} && $ {__ javaScript ($ {gration_bug} == 'not_found')}

  • Использование двойных кавычек без переменных.get

    $ {__ javaScript ($ {manual_bug} == "not_found")} && $ {__ javaScript ($ {gration_bug} == "not_found")}

Мой файл журнала выглядит совершенно нормально, без ошибок

enter image description here

enter image description here

Пожалуйста, сообщите, если кто-то смог выполнить несколько условных операторов в инструменте Jmeter?Спасибо!

1 Ответ

0 голосов
/ 03 октября 2018

В ссылке, на которую вы ссылаетесь, 2 предложения находятся в single __ javaScript () , и у вас есть 2 разные функции, поэтому JMeter не знает, что делает ваш && означает особенно указанный Interpret Condition as Variable Expression? режим по умолчанию If Controller.

Также, если вы откроете Если GUI контроллера , вы увидите следующее предупреждение:

Для производительности рекомендуется проверить «интерпретировать условие как выражение переменной» ииспользуйте __jexl3 или __groovy для оценки true или false или для переменной, содержащей true или false.$ {JMeterThread.last_sample_ok} можно использовать для проверки успешности последнего сэмплера

Поэтому я бы рекомендовал пересмотреть ваш подход и использовать функцию __ groovy () , соответствующий синтаксис будет:

${__groovy((vars.get('responseCode').equals('404') && vars.get('responseMessage').equals('Not Found')),)}

Демонстрация:

JMeter If Controller Multiple Clauses

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