2012-02-07 2 views
14

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

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

ответ

10
  • Include Controller
    По ссылке компонента:

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

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

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

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

    2) в случае графического интерфейса пользователя - добавить то же самое .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 Data Set Config
    Согласно справки компонента:

    Относительные имена файлов разрешаются по пути активный план тестирования .
    Абсолютные имена файлов также поддерживаются, но обратите внимание: , что они вряд ли будут работать в удаленном режиме, если только удаленный сервер не имеет одинаковой структуры каталогов. Если один и тот же физический файл равен , он имеет два разных способа. 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/
+0

Спасибо за подробный ответ Alies. Как это работает при запуске «отладки» через графический интерфейс? –

+0

Спасибо за ссылки на документацию. Я был смущен, поскольку выход из журнала подразумевает, что использовался исходный путь JMeter; однако, если правильный путь JMX правильный, он будет работать. –

3

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

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

+1

Спасибо за это. Внутри сценариев jmeter вы также можете использовать $ {__ BeanShell (File.separator,)} для настройки всех путей - это также сделает их независящими от платформы. –

+0

@AliesBelik - Я буду помнить об этом, хотя для этого случая контроллер Include не поддерживает переменные (в соответствии с вашим ответом). –

+0

Что означает эта команда? $ {__ BeanShell (Name_Of_BeanShell_Script)}. У меня есть скрипты beanshell внутри jMeterProject, и я хотел бы использовать только одну из них перед отправкой запроса. Должен ли я использовать внутри BeanShell PreProcessor команду: $ {__ BeanShell (Name_of_my_script)} ?? –

8

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

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

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

18

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

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

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

+1

Это работает в gui, non-gui и со всеми компонентами без конфликтов с настройками или параметрами – KCD

+0

Только для записи: эффект этого решения (по крайней мере, для 3.2, который я тестировал), заключается в том, что по какой-то причине нет больше перезаписывать предупреждение для файлов отчетов (Append автоматически выполняется) –

Смежные вопросы