【发布时间】:2012-02-29 01:41:09
【问题描述】:
有没有办法通过变量/属性访问当前脚本的绝对物理路径?似乎没有通过 Debug Sampler 列出任何内容。
加载 CSV 文件和 JMX Includes 等操作使用当前工作目录作为其相对路径,这非常烦人。
【问题讨论】:
有没有办法通过变量/属性访问当前脚本的绝对物理路径?似乎没有通过 Debug Sampler 列出任何内容。
加载 CSV 文件和 JMX Includes 等操作使用当前工作目录作为其相对路径,这非常烦人。
【问题讨论】:
我使用了haridsv提供的答案。它工作得很好,只是我需要将目录放到变量中的 JMX 文件中。我制作了一个“用户定义的变量”组件,并在变量的“值”字段中使用了 BeanShell,如下所示:
${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
第一个 BeanShell 部分调用获取相关目录的 Java 类。第二个在路径上附加一个文件分隔符,这当然是可选的。
【讨论】:
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/
【讨论】:
通过说“当前脚本的绝对物理路径”,我猜 OP 指的是加载测试计划(jmx 文件)的位置。我正是需要这个来在运行开始时从 BeanShell 脚本生成一个 CSV 文件,该文件随后在 CSV 数据集配置中用于回读,所以我希望脚本像没有路径时后者的工作方式一样工作指定的。我浏览了 JMeter 源代码并找到了这个可行的解决方案:
import org.apache.jmeter.services.FileServer;
log.info(FileServer.getFileServer().getBaseDir());
我对此进行了测试,并在 jmeter.log 中看到了正确的路径。
【讨论】:
我的特殊问题是我的相对包含控制器路径包含一个反斜杠,该反斜杠在 Linux 和 OSX 上中断。
解决方案是在相对路径中使用正斜杠,适用于所有平台。
【讨论】: