Сценарий Beanshell выдает ошибку при запуске с терминала, но он отлично работает в режиме графического интерфейса в JMETER.

Я пробовал запустить следующий скрипт:

import org.apache.commons.io.FileUtils; // necessary import
int lines = FileUtils.readLines(new File("${testPlanFileDir}/csv/test_smtp_save.csv")).size() - 1; // get lines count
vars.put("lines", String.valueOf(lines)); // store the count into "lines" variable

Чтобы получить количество строк в моем CSV-файле, чтобы я мог выполнить цикл в соответствии с количеством строк в CSV-файле.

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

ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval
Sourced file: inline evaluation of:
``import org.apache.commons.io.FileUtils; // necessary import int lines = FileUtil . . . ''
: Typed variable declaration : Method Invocation FileUtils.readLines 

person kishor sharma    schedule 09.08.2016    source источник
comment
Я пробовал ваш код, он работает на JMeter 2.13.   -  person Iske    schedule 09.08.2016


Ответы (3)


Как получить это ${testPlanFileDir} значение переменной? В остальном код выглядит неплохо.

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

import org.apache.commons.io.FileUtils;

try {
    int lines = FileUtils.readLines(new File("${testPlanFileDir}/csv/test_smtp_save.csv")).size() - 1;
    vars.put("lines", String.valueOf(lines));
}
catch (Throwable ex) {
    log.error("Error in Beanshell", ex);
    throw ex;
}

И загляните в файл jmeter.log - он будет содержать «обычную» трассировку стека.

В качестве альтернативы вы можете добавить команду debug () в самое начало вашего сценария Beanshell - он переключит вывод отладки на stdout

См. Как использовать BeanShell: любимый встроенный компонент JMeter для получения дополнительных советов и приемов, связанных с Beanshell

person Dmitri T    schedule 09.08.2016
comment
я получаю testPlanFileDir из следующего кода beanshell: import org.apache.jmeter.gui.GuiPackage; import org.apache.commons.io.FilenameUtils; Строка testPlanFile = GuiPackage.getInstance (). GetTestPlanFile (); Строка testPlanFileDir = FilenameUtils.getFullPathNoEndSeparator (testPlanFile); vars.put (testPlanFileDir, testPlanFileDir); log.info (testPlanFileDir: + testPlanFileDir); - person kishor sharma; 10.08.2016
comment
Я ожидаю, что если вы запустите свой тест в режиме без графического интерфейса, GuiPackage имеет значение null, поэтому пересмотрите способ получения рабочей папки JMeter, например, FileServer.getFileServer().getBaseDir(); - person Dmitri T; 10.08.2016

Замените $ {testPlanFileDir} на:

vars.get ("testPlanFileDir")

Вам следует избегать использования Beanshell в пользу JSR223 + Groovy + Cache, который встроен в JMeter 3.0, см.:

person UBIK LOAD PACK    schedule 09.08.2016
comment
testPlanFileDir - это переменная. как я могу использовать vars.get? - person kishor sharma; 10.08.2016

Я использовал это, чтобы получить текущий каталог файла .jmx. Объявлен переменный TestPlanFileDir как;

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
person kishor sharma    schedule 19.08.2016