Доступ к пути сценария JMeter - PullRequest
15 голосов
/ 07 февраля 2012

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

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

Ответы [ 4 ]

19 голосов
/ 13 марта 2013

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

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

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

10 голосов
/ 07 февраля 2012
  • Включить контроллер
    Согласно справке компонента:

    Этот элемент не поддерживает переменные / функции в поле имени файла.
    Однако если свойство includecontroller.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 использование - задайте как отдельное свойство:

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

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


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

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

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

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

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

    -Gcsv.path=/full/path/to/csv/data/dir/
8 голосов
/ 20 декабря 2012

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

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

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

3 голосов
/ 08 февраля 2012

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

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

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