是否有一种通过变量/属性访问当前脚本的绝对物理路径的方法? 似乎在Debug Sampler中没有列出任何内容。
加载CSV文件和JMX包含等操作使用当前工作目录作为其相对路径非常令人恼火。
我使用了haridsv提供的答案,它非常好用,但是我需要将JMX文件的目录放入一个变量中。我创建了一个“用户定义变量”组件,并在变量的“值”字段中使用了BeanShell,如下所示:
${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
第一个BeanShell部分调用获取目录的Java类。第二个部分将文件分隔符附加到路径中,当然这是可选的。
包含控制器
根据组件参考文档:
此元素不支持文件名字段中的变量/函数。
但是,如果定义了属性 includecontroller.prefix,则使用内容作为路径名的前缀。如果在 prefix + filename 指定的位置找不到文件,则控制器尝试相对于 JMX 启动目录(2.3.4 版本之后的 JMeter 版本)打开 fileName。您可以向 JMeter 传递名为 includecontroller.prefix 的 Java 属性,该属性可用于在包括的 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 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/
import org.apache.jmeter.services.FileServer;
log.info(FileServer.getFileServer().getBaseDir());
我测试过,发现在jmeter.log中显示了正确的路径。
我的问题是,我的相对路径Include Controller包含反斜杠,在Linux和OSX上出现了错误。
解决方案是在相对路径中使用正斜杠,这在所有平台上都有效。