我有一个用java编写的自定义jmeter采样器,它将文件位置和文件路径作为参数,并根据这些采样创建一个json文件,用于发布到服务(基于模板文件)。由于我的脚本需要在具有不同目录结构的多个环境中运行,我需要在我的采样器中使用相对路径指向我需要转换为有效json的文件。有没有办法让我的脚本作为jmeter中的变量存在?我尝试了$ {user.dir},但它返回了jmeter启动的目录,而不是我脚本所在的目录。是否有我可以引用的另一个系统属性来获取此值?如果没有,有没有人以编程方式完成这个?
答案 0 :(得分:31)
前段时间我遇到了类似的情况,我必须上传签名文件作为POST请求的一部分。此签名文件相对于我的JMeter脚本所在的文件夹结构而存在。
尝试使用以下BeanShell表达式(可以作为系统级属性访问)来解析JMeter测试用例所在位置/执行位置的相对路径。
${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
您只需附加文件名即可在“使用请求发送文件”字段中输入您要发送/ POST的文件的名称。
${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}fileName.sig
更清晰的实现会将此声明为变量(本地或全局,具体取决于范围),并在相应的字段中使用此变量。
absolutePath = ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}
${absolutePath}fileName.sig
注意:如果您打算将JMeter测试文件插入Jenkins等持续集成系统,这种方法非常有用。它使您的测试用例更易于维护。