有没有方法通过变量/属性访问当前脚本的绝对物理路径?似乎没有任何通过调试采样器列出的内容。访问JMeter脚本路径
令人难以置信的是,加载CSV文件和JMX Includes等操作使用当前工作目录作为其相对路径。
有没有方法通过变量/属性访问当前脚本的绝对物理路径?似乎没有任何通过调试采样器列出的内容。访问JMeter脚本路径
令人难以置信的是,加载CSV文件和JMX Includes等操作使用当前工作目录作为其相对路径。
Include Controller
作为每个分量的参考:
该元件不支持的文件名 场变量/函数。
但是,如果属性includecontroller.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文件或写一个封装文件;在Jmeter Ant Task用法的情况下
3) - 设置为单独的属性:
<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/
我的具体问题是,我的亲戚包括控制器路径包括这打破了一个反斜杠在Linux和OSX上。
解决方法是在相对路径中使用正斜杠,该斜线适用于所有平台。
谢谢你。在jmeter脚本中,您还可以使用$ {__ BeanShell(File.separator,)}来设置所有路径 - 这也会使它们与平台无关。 – 2012-02-08 15:34:03
@AliesBelik - 我会记住这一点,但对于这种情况,包含控制器不支持变量(根据您的答案)。 – 2012-02-08 16:21:04
这些命令究竟意味着什么?$ {__ BeanShell(Name_Of_BeanShell_Script)}。我在jMeterProject中有一个beanshell脚本,我想在发送请求之前只使用其中的一个脚本。我应该在BeanShell PreProcessor命令中使用: $ {__ BeanShell(Name_of_my_script)}? – 2014-03-07 14:27:50
通过说“当前脚本的绝对物理路径”,我猜测OP指的是加载testplan(jmx文件)的位置。我完全需要在运行开始时从BeanShell脚本生成一个CSV文件,该文件随后在CSV数据集配置中用于回读,所以我希望脚本能够像后面的工作方式一样工作,因为没有路径时指定。我通过JMeter源代码找到了这个工作解决方案:
import org.apache.jmeter.services.FileServer;
log.info(FileServer.getFileServer().getBaseDir());
我测试了这个,并在jmeter.log中看到了正确的路径。
我使用了haridsv提供的答案。除了我需要将目录放在JMX文件中的变量中,它运行得非常好。我做了一个“用户定义的变量”组件,使用的BeanShell在变量的“值”字段是这样的:
${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
第一部分的BeanShell调用获取目录有问题的Java类。第二个将文件分隔符附加到路径,这当然是可选的。
这适用于gui,non-gui和所有组件,并且不会影响配置或参数 – KCD 2015-08-03 01:41:55
仅供参考:此解决方案的效果(至少对于我测试的3.2)至少是因为某些原因报告文件的更多覆盖警告(自动执行追加) – 2017-06-27 08:18:00
感谢您的详细回答阿里。通过GUI在“调试”中运行时,这是如何工作的? – 2012-02-07 20:58:41
感谢您的文档参考。我很困惑,因为日志输出意味着使用了JMeter主路径;但是,如果JMX相对路径正确,它将起作用。 – 2012-02-08 15:04:38