如何随机化 JMETER 中文本之间有空格的数据行

How to randomise rows of data that have spaces between text in JMETER

我是 jmeter 的新手,一直在考虑创建一个测试计划,其中包括将个人信息(虚拟数据)发布到网站。我有一个 CSV 文件,其中包含大约 20,000 条记录,我需要将其加载到 jmeter 中,然后随机化 jmeter 将用于每次迭代的信息顺序。目前我正在使用 Beanshell 采样器加载 CSV 并随机化这些行,然后使用 Beanshell Post 处理器将随机化的行加载到一个名为 "Line" 的变量中,但是在 运行 脚本之后并查看在我的调试结果中,它显示了个人信息 line/row 中的部分数据。进一步调查,我意识到变量 "Line" 正在加载由于 CSV 文件中逗号之间的字符串中有 spaces 而被破坏的信息。

CSV文件中的示例数据如下:

firstname,lastname,housenumber,streetname,area,postcode
john,smith,21,Albert Street,Knotts County,AB3 4DL

我在 beanshell 中使用的代码是第 1 部分加载 csv 文件:

Scanner scanner = new Scanner(new File("c:/file.csv")); 
Map file = new HashMap(); 
int counter = 0; 
while (scanner.hasNext()) { 
  String line = scanner.next(); 
  file.put(counter, line); 
  counter++; 
} 
bsh.shared.fileMap = file; 
bsh.shared.linesnumber = counter;

Post 处理器中 beanshell 脚本的第二部分从文件中获取随机行并添加到变量 "line":

int counter = bsh.shared.linesnumber; 
Map file = bsh.shared.fileMap; 

Random r = new Random(); 
String line = file.get(r.nextInt(counter)); 
vars.put("line", line);

当运行这时,调试后处理器中的结果如下所示:

line=john,smith,21,Albert

好像"Albert and Street"这两个字之间的space断线了。因此,包含 space 的逗号之间的任何字符串值都会换行,例如。街道名称、邮政编码等。我的问题是,有没有一种方法可以将整行加载到变量中,包括 spaces。

更改以下行:

String line = scanner.next();

String line = scanner.nextLine();

next() 一旦找到 space 就会中断,而 nextLine() 会等待行尾。

首先,我认为测试需要可重复,因此如果测试显示错误,您可以重新运行测试以确认它或验证潜在问题是否已修复。所以我建议保持 CSV 数据的 "normal" 顺序。行为良好的测试会自行清理,因此您不应该 运行 陷入数据无法重用的情况。

如果您仍在寻找随机化数据的方法,您可以尝试 HTTP Simple Table Server 插件,它具有 "RANDOM" 返回行的模式。

如果您仍然想要 Beanshell,请记住 JMeter 构建在其他库之上,您可以从 Beanshell 脚本调用它们的方法。特别是在您的情况下,我相信 FileUtils.readLines() 会非常有帮助,例如:

  1. 第一个 Beanshell 脚本:

    import org.apache.commons.io.FileUtils;
    
    List lines = FileUtils.readLines(new File("c:/file.csv"));
    bsh.shared.lines = lines;
    
  2. 第二个 Beanshell 脚本:

    import java.util.concurrent.ThreadLocalRandom;
    
    List lines = bsh.shared.lines;
    String line = lines.get(ThreadLocalRandom.current().nextInt(0, lines.size()));
    vars.put("line", line);
    

更多信息:How to Use BeanShell: JMeter's Favorite Built-in Component