如何通过Jmeter JSR223预处理器脚本访问GitHub存储库测试数据文件?

问题描述 投票:0回答:1

场景:

我有一个 JMeter 脚本(例如,

jmeterScript.jmx
)需要通过 Jenkins 作业(自动计划)触发。

此脚本有一个 JSR223 预处理器,需要通过它访问位于远程 GitHub 存储库中的 CSV 文件(例如,

testData.csv
)。

脚本和CSV文件都存储在远程GitHub存储库中,其文件夹结构如下图所示: enter image description here

我正在尝试退出

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++;
}

非常感谢任何帮助。

问候!

github jmeter preprocessor jsr223 test-data
1个回答
0
投票

更改此行:

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'));

原因在于:

  1. 不应该将 JMeter 函数或变量内联到 Groovy 脚本中

  2. 如果您不使用 FileServer.getBaseDir() 作为前缀,JMeter 将开始从其“bin”文件夹开始查找 CSV 文件

  3. 不确定您想要实现什么,但在 Groovy 中读取文件就像这样简单:

    def text = new File('/path/to/file').text
    

    如果您希望其内容作为行数组:

    ArrayList<String> lines = new File('/path/to/file').readLines()
    

有关 JMeter 中 Groovy 脚本编写的更多信息:Apache Groovy:Groovy 的用途是什么?

© www.soinside.com 2019 - 2024. All rights reserved.