场景:
我有一个 JMeter 脚本(例如,
jmeterScript.jmx
)需要通过 Jenkins 作业(自动计划)触发。
此脚本有一个 JSR223 预处理器,需要通过它访问位于远程 GitHub 存储库中的 CSV 文件(例如,
testData.csv
)。
脚本和CSV文件都存储在远程GitHub存储库中,其文件夹结构如下图所示:
我正在尝试退出
folder-4
(后退 4 步)到基本文件夹(即 Base-folder
),然后进入 folder-b
访问 testData.csv
。
我试图通过在脚本中编写以下语法来实现此目的:
"File file = new File(${__P(data,"../../../../folder-a/folder-b/testData.csv") });"
问题:
但是,脚本无法找到该文件并抛出代码中定义的异常。
"ERROR: file not found"
注意:我的本地 git 存储库中有一个精确的文件夹结构,如果我使用类似的路径在
Random CSV Data Set Config
上定义,它就可以工作。
只是,似乎不适用于预处理器脚本。
我的编码技能有点生疏,我在脚本中编写的用于访问 CSV 文件的内容如下:
import java.text.*;
import java.io.*;
import java.util.*;
try {
File file = new File(${__P(data,"../../../../folder-a/folder-b/testData.csv") });
if (!file.exists()) {
throw new Exception ("ERROR: file not found");
}
BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String line = null;
while(((line = bufRdr.readLine()) != null) && (count < limit))
{
stl.add(line);
count++;
}
非常感谢任何帮助。
问候!
更改此行:
File file = new File(${__P(data,"../../../../folder-a/folder-b/testData.csv") });
对于这个:
File file = new File(org.apache.jmeter.util.JMeterUtils.getPropDefault('data', org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + '/../../../../folder-a/folder-b/testData.csv'));
原因在于:
如果您不使用 FileServer.getBaseDir() 作为前缀,JMeter 将开始从其“bin”文件夹开始查找 CSV 文件
不确定您想要实现什么,但在 Groovy 中读取文件就像这样简单:
def text = new File('/path/to/file').text
如果您希望其内容作为行数组:
ArrayList<String> lines = new File('/path/to/file').readLines()
有关 JMeter 中 Groovy 脚本编写的更多信息:Apache Groovy:Groovy 的用途是什么?