繁体   English   中英

如何从 JMeter 中的 CSV 数据集配置中读取下一行?

[英]How Can I Read The Next Row From A CSV Data Set Config In JMeter?

我正在 JMeter 中创建一个测试位置,它访问随机数量的页面(从 2 到 10),其 URL 将从 CSV 数据集中获取。 我已经创建了 CSV 数据集和工作正常的采样器,除了每个线程只从数据集中读取一行,这不是我需要的 - 我希望在采样器完成后读取一个新行(或之前,我并不大惊小怪)。

我看到这个问题非常相似,解决方案是使用原始数据源预处理器,它确实有效,但需要对相关文件进行艰巨的更改(在每一行之前添加块大小),这有点痛苦当文件长约 500 行时。

有没有办法可以将 CSV 数据集设置为在阅读时前进到下一行,或者使用一些后处理器或预处理器(例如 beanshell)来执行此操作? 我见过有人说CSVRead可以做到这一点,但是说访问是按线程进行的,这对我没有好处。

作为旁注 - 最终我想要做的就是访问传递给 HTTP 采样器的文件中的随机行,如果有更简单或更好的方法来做到这一点,我愿意接受建议。

您可以使用从BeanShell Sampler / BeanShell PostProcessor / BeanShell PreProcessor执行的 beanshell (= java) 代码。

以下代码将从您的文件中读取所有行,然后选择单个随机:

import java.text.*;
import java.io.*;
import java.util.*;

String [] params = Parameters.split(",");
String csvTest = params[0];
String csvDir = params[0];

ArrayList strList = new ArrayList();     

try {
    File file = new File(System.getProperty("user.dir") + File.separator + csvDir + File.separator + csvTest);

    if (!file.exists()) {
        throw new Exception ("ERROR: file " + csvTest + " not found in " + csvDir + " directory.");
    }

    BufferedReader bufRdr = new BufferedReader(new FileReader(file));
    String line = null;

    while((line = bufRdr.readLine()) != null) {
        strList.add(line);
    }

    bufRdr.close();            

    Random rnd = new java.util.Random();
    vars.put("csvUrl",strList.get(rnd.nextInt(strList.size())));
}
catch (Exception ex) {
    IsSuccess = false; 
    log.error(ex.getMessage());
    System.err.println(ex.getMessage());
}
catch (Throwable thex) {
    System.err.println(thex.getMessage());
}

然后您可以通过变量(在本例中为 ${csvUrl})访问提取的 URL。

从性能的角度来看,我只是怀疑在每次迭代中读取完整文件(如果您必须在循环中执行此操作)是一个很好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM