2013-12-20 4 views
1

SI'm пытается проверить значение JSON, которое может быть = null.Jmeter: использование утверждения Beanshell для проверки нулевого значения JSON

Сначала я попытался использовать jp @ gc - JSON Path Assertion. но, похоже, ничего не возвращает ничего или не определяет переменную, если она встречает нулевое значение.

Так что я пытался заставить его работать так:

  • использования JP @ дс - JSON Path экстрактор, чтобы попытаться извлечь значение переменной.
  • Использование проверки Beanshell для проверки, существует ли переменная или имеет нулевое значение
  • Если переменная не существует или существует и имеет нулевое значение, я знаю, что значение JSON равно null.

Я не писал никаких сценариев с Jmeter раньше, поэтому я могу делать что-то, очевидно, неправильно, но вот то, что я пытался в Beanshell утверждения:

try { 
    String myValue = vars.get("myValue"); 
    log.info("myValue =" + myValue); 
} 
catch (e) { 
    log.info("caught exception: "+e); 
    String myValue = null; 
} 


if (myValue.length() > 0 && myValue != 0){ 
Failure = true; 
FailureMessage = "myValue was " + myValue + "."; 
} 
else{ 
    Failure = false; 
} 

Для этого теста, нулевое значение фактически проходит тест.

Проблема, с которой я столкнулся, заключается в том, что блок try/catch не работает. Вместо этого я вижу следующее сообщение в журнале:

jmeter.assertions.BeanShellAssertion: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import org.apache.jmeter.util.JMeterUtils; try { //myValue = JMeterUtils.get . . . '' : Attempt to resolve method: length() on undefined variable or class name: myValue 

Может кто-нибудь сказать мне, что я делаю неправильно и/или как получить этот тест нулевого значения JSON для работы?

+0

Можете ли вы показать ответ с сервера? – olyv

ответ

2

В этом коде есть много неправильных вещей;

  1. В сообщении об ошибке говорится, что оно не распознает myValue. Это потому, что он определен внутри блока try-catch. Чтобы исправить это, вы должны объявить String myValue перед блоком try-catch. Но ...
  2. Оказывается, вам не нужен блок try-catch, поскольку vars не будет выбрасывать исключение, кроме will return null when the given key does not exist.
  3. Чтобы проверить, нет ли myValue, используйте myValue != null.

Вот обновленный код:

String myValue = vars.get("myValue"); 
if(myValue != null){ 
    log.info("myValue =" + myValue); 
    Failure = true; 
    FailureMessage = "myValue was " + myValue + "."; 
}else{ 
    //log something here? 
    Failure = false; 
} 
2

Вам нужно изменить свой код.

  1. Beanshell is not very Java, все статьи будут обработаны, если вы явно не указали это.
  2. Ваша myValue строка не определена, вам нужно, чтобы сделать его более "глобальные"

Правильный код будет выглядеть просто следующим образом:

String myvalue = vars.get("json"); 

    if (myvalue == null) { 
     Failure = false; 
    } else if (myvalue.length() > 0) { 
     Failure = true; 
     FailureMessage = "Expected \"myvalue\" to be null, Actual: " + myvalue; 
    } 
Смежные вопросы