访问JMeter脚本路径

时间:2012-02-07 15:58:01

标签: jmeter

有没有办法通过变量/属性访问当前脚本的绝对物理路径?似乎没有通过Debug Sampler列出任何内容。

加载CSV文件和JMX Includes等操作使用当前工作目录作为其相对路径,这令人非常恼火。

4 个答案:

答案 0 :(得分:19)

我使用了haridsv提供的答案。除了我需要将目录放在变量中的JMX文件之外,它工作得很好。我制作了一个“用户定义的变量”组件,并在变量的“值”字段中使用了BeanShell,如下所示:

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

第一个BeanShell部分调用获取相关目录的Java类。第二个将文件分隔符附加到路径,这当然是可选的。

答案 1 :(得分:10)

  • Include Controller
    根据组件的参考:

      

    此元素不支持文件名中的变量/函数   场。
      但是,如果属性includecontroller.prefix是   定义后,内容用于为路径名添加前缀。如果是文件   无法在前缀+文件名给出的位置找到,然后是   controller尝试相对于JMX启动打开fileName   目录(2.3.4之后的JMeter版本)。

         

    您可以向JMeter传递一个名为includecontroller.prefix的java属性   它可用于将目录添加到您正在的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 Data Set Config
    根据组件的参考:

      

    根据路径解析相对文件名   主动测试计划。
      也支持绝对文件名,但请注意   它们不太可能在远程模式下工作,除非遥控器   server具有相同的目录结构。如果是相同的物理文件   以两种不同的方式引用 - 例如csvdata.txt和./csvdata.txt - 然后这些是&gt; &GT;被视为不同的文件。如果操作系统不区分上层   小写,csvData.TXT也将单独打开。


    您可以声明一个测试计划变量,该变量使用包含csv数据文件的文件夹检索参数值:
    e.g。

    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 :(得分:8)

通过说“当前脚本的绝对物理路径”,我猜OP是指从中加载testplan(jmx文件)的位置。我需要在运行开始时从BeanShell脚本生成一个CSV文件,随后在CSV数据集配置中使用它来回读,所以我希望脚本能像后面的工作方式一样工作,当没有路径时指定。我浏览了JMeter源代码,找到了这个有效的解决方案:

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

我测试了这个,并在jmeter.log中看到了正确的路径。

答案 3 :(得分:3)

我的特殊问题是我的相对包含控制器路径包含了在Linux和OSX上出现的反斜杠。

解决方案是在相对路径中使用正斜杠,这适用于所有平台。