【问题标题】:Access to JMeter script path访问JMeter脚本路径
【发布时间】:2012-02-29 01:41:09
【问题描述】:

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

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

【问题讨论】:

    标签: java jmeter


    【解决方案1】:

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

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

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

    【讨论】:

    • 这适用于 gui、非 gui 和所有组件,而不会弄乱配置或参数
    • 仅作记录:此解决方案的效果(至少对于我测试的 3.2)是,由于某种原因,报告文件不再有覆盖警告(自动执行附加)
    【解决方案2】:
    • Include Controller
      根据组件的参考:

      此元素不支持文件名中的变量/函数 字段。
      但是,如果属性 includecontroller.prefix 是 定义,内容用于路径名的前缀。如果文件 在前缀+文件名给定的位置找不到,那么 控制器尝试打开相对于 JMX 启动的文件名 目录(JMeter 2.3.4 之后的版本)。

      您可以向 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
      根据组件的参考:

      相对文件名根据文件路径解析 活动测试计划。
      也支持绝对文件名,但请注意 他们不太可能在远程模式下工作,除非远程 服务器具有相同的目录结构。 如果相同的物理文件是 以两种不同的方式引用 - 例如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/

    【讨论】:

    • 感谢您的详细回答。通过 GUI 在“调试”中运行时,这是如何工作的?
    • 感谢文档参考。我很困惑,因为日志输出暗示使用了 JMeter 主路径;但是,如果 JMX 相对路径正确,它将起作用。
    【解决方案3】:

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

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

    我对此进行了测试,并在 jmeter.log 中看到了正确的路径。

    【讨论】:

      【解决方案4】:

      我的特殊问题是我的相对包含控制器路径包含一个反斜杠,该反斜杠在 Linux 和 OSX 上中断。

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

      【讨论】:

      • 谢谢。在 jmeter 脚本中,您还可以使用 ${__BeanShell(File.separator,)} 设置所有路径 - 这也将使它们与平台无关。
      • @AliesBelik - 我会记住这一点,但在这种情况下,包含控制器不支持变量(根据您的回答)。
      • 这些命令到底是什么意思?${__BeanShell(Name_Of_BeanShell_Script)}。我的 jMeterProject 中有一个 beanshell 脚本,我想在发送请求之前只使用其中一个脚本。我应该在 BeanShell PreProcessor 命令中使用:${__BeanShell(Name_of_my_script)}??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多