参数化测试数据文件名 - Jmeter

时间:2015-12-24 15:22:28

标签: jmeter beanshell

我在一个文件夹中有多个测试CSV文件(大约20个文件,每个文件中有一百万条记录(只有一列ID))。我想使用这些数据进行性能测试。

要循环浏览文件,我已取得进展,但我遇到了一个问题。首先,我将解释到目前为止我所取得的成就,然后是我遇到的问题。

  1. 在线程组下添加了一个BeanShell采样器(脚本如下)。 它创建文件变量,文件路径为值 例如file_1 = /Users/Code/JMeter-Campaign/data/file_1.txt
  2. import java.io.*; 
    
    File fileDir = new File("/Users/Code/JMeter-Campaign/data"); 
    File[] fList = fileDir.listFiles(); 
    
    int counter = 1; 
    
    for (File file:fList) {
        if (! file.isHidden()) {
            vars.put("file_" + counter, file.getAbsolutePath());
            log.info("file_" + counter + "=" + vars.get("file_" + counter));    
            counter++;
        }
    }
    
    1. ForEach控制器添加到循环中。字段和值如下。
    2.   

      输入变量前缀:文件
        启动循环索引:0
        输出变量名称:USER_FILE
        在编号前添加_ - 选中

      1. 添加Beanshell预处理器作为ForEach控制器的子代。 转换道具中的变量。

        props.put("UserFile", vars.get("USER_FILE")); 
        
      2. 添加了CSV数据集配置作为ForEach控制器的子项。

      3.   

        文件名:$ {__ P(UserFile,)}
          Delimeter:,

        首先,我正在测试一个简单的场景 - 3个文件(file_1,file_2和file_3),每个文件有1个记录。

        它循环遍历所有3个文件(使用log.info,debug sampler,view results tree调试),但数据仅来自最后一个文件。 因此对于file_1,数据来自file_3

        jmeter.log中的观察者,jmeter.services.FileServer始终指向第3个文件。

        是否有更好的方法来参数化测试CSV文件?我想用第一个文件中的所有记录运行测试,然后是第二个文件,依此类推。这将阻止服务器端缓存。

1 个答案:

答案 0 :(得分:2)

您无法以这种方式参数化CSV数据集配置,因为在测试树加载期间正在填充文件路径。您所能做的就是通过-J命令行参数来定义属性,如

jmeter -Jpath=/some/path.csv -n -t ....

并在CSV数据集配置中使用__P()函数,例如${__P(path,)}。但是这样你就无法进行迭代。

所以我建议考虑在执行期间评估的__CSVRead()函数,因此它可能包含变量。

有关上述和其他JMeter功能的更多详细信息,请参阅Functions and Variables用户手册章节和How to Use JMeter Functions帖子系列。