Доступ к пути JMeter script

Есть ли способ доступа к текущему физическому пути script через переменную/свойство? Кажется, что ничего не отображается через Debug Sampler.

Неудивительно, что такие действия, как загрузка CSV файлов и JMX Includes, используют текущий рабочий каталог как относительный путь.

Ответы

Ответ 1

  • Включить контроллер
    В соответствии со ссылкой на компонент:

    Этот элемент не поддерживает переменные/функции в имени файла поле.
    Однако , если свойство includesecontroller.prefix определено, содержимое используется для префикса пути. Если файл не может быть найден в месте, указанном префиксом + имя файла, тогда контроллер пытается открыть fileName относительно запуска JMX (версии JMeter после версии 2.3.4).

    Вы можете передать JMeter свойство java с именем includecontroller.prefix который можно использовать для добавления каталога в файл JMX, который вы используете в том числе.

    1) В случае запуска консоли используйте:

    -Jincludecontroller.prefix=/full/path/to/jmx/scripts/dir/

    2) в случае GUI - добавьте то же самое к файлу .sh/.cmd/.bat или напишите файл-обертку;
    3) в случае Использование Jmeter Ant Task - задано как отдельное свойство:

    <jmeter 
    jmeterhome="${jmeter.home}" 
    testplan="..." 
    resultlog="...">
        <property name="jmeter.save.saveservice.assertion_results" value="all"/>
        <property name="jmeter.save.saveservice.output_format" value="xml"/>
        <property name="includecontroller.prefix" value="..."/>
    </jmeter>
    
  • Конфигурация набора данных CSV
    В соответствии со ссылкой на компонент:

    Относительные имена файлов разрешаются относительно пути активный план тестирования.
    Абсолютные имена файлов также поддерживаются, но обратите внимание что они вряд ли будут работать в удаленном режиме, если только удаленный сервер имеет ту же структуру каталогов. Если один и тот же физический файл ссылаются двумя разными способами - например, csvdata.txt и. /csvdata.txt - тогда они → рассматриваются как разные файлы. Если ОС не различает верхнюю и в нижнем регистре, csvData.TXT также будет открываться отдельно.


    Вы можете объявить переменную плана тестирования, которая извлекает значение параметра в папку, содержащую файлы данных csv:
    например,

    csv.path | ${__P(csv.path, ${__property(user.dir)}${__BeanShell(File.separator,)})} 
    CSV Data Set Config
    Filename = ${csv.path}${__P(users-list,)}
    

    Настройка с консоли:

    -Jcsv.path=/full/path/to/csv/data/dir/

    Настройка для настройки распределенного тестирования:

    -Gcsv.path=/full/path/to/csv/data/dir/

Ответ 2

Я использовал ответ, представленный haridsv. Он отлично работал, за исключением того, что мне нужно было поместить каталог в файл JMX в переменной. Я создал компонент "Пользовательские переменные" и использовал BeanShell в поле "Значение" следующим образом:

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}

Первый раздел BeanShell вызывает класс Java, который получает соответствующий каталог. Второй добавляет разделитель файлов к пути, который, конечно, необязателен.

Ответ 3

Говоря "текущий script абсолютный физический путь", я предполагаю, что OP ссылается на место, где загружается тестовый план (файл jmx). Мне нужно было именно это, чтобы сгенерировать CSV файл из BeanShell script в начале прогона, который впоследствии используется в конфигурации набора данных CSV для чтения, поэтому я хотел, чтобы script работал так же, как то, как работает более поздняя версия когда путь не указан. Я прошел через источник JMeter и нашел это рабочее решение:

import org.apache.jmeter.services.FileServer;
log.info(FileServer.getFileServer().getBaseDir());

Я проверил это и увидел правильный путь в jmeter.log.

Ответ 4

Моя особая проблема заключалась в том, что мой относительный путь Include Controller включал обратную косую черту, которая разбилась на Linux и OSX.

Решение заключалось в использовании косой черты в относительных путях, которая работает на всех платформах.