Jmeter:参数设置

时间:2016-10-03 09:45:17

标签: csv jmeter

每个线程是否可以从CSV文件中选择相同的行?

例如。我的CSV文件中有5个用户,只有5个记录(行)。在每次迭代中,CSV的第一个值应分配给User1,类似于所有用户。

User1: myID1,pass1,item1,product1
User2: myID2,pass2,item2,product2
User3: myID3,pass3,item3,product3
User4: myID14,pass4,item4,product4
User5: myID15,pass5,item5,product5

。 。 有什么解决方案吗?

1 个答案:

答案 0 :(得分:1)

  1. 如果您只有5个主题和5行CSV,我建议您考虑切换到User Parameters而不是使用CSV。
  2. 如果您的CSV文件可以包含> 5行,你的测试可以有> 5个虚拟用户和需求如"用户1采用第1行和第34行;是必须的,您必须使用像Beanshell Sampler这样的脚本测试元素将CSV文件预加载到内存中:

    • 将setUp线程组添加到您的测试计划(包含1个线程和1次迭代)
    • 添加Beanshell Sampler并将以下代码放入" Script"面积:

      import org.apache.commons.io.FileUtils;
      
      List lines = FileUtils.readLines(new File("test.csv"));
      bsh.shared.lines = lines;
      

    以上代码将读取test.csv文件的内容(将其替换为CSV文件的相对路径或完整路径)并将其存储到bsh.shared namespace

    • 将Beanshell PreProcessor作为请求的子项添加,您需要使用CSV文件中的值并将以下代码放入"脚本"面积:

      int user = ctx.getThreadNum();
      String line = bsh.shared.lines.get(user);
      
      String[] tokens = line.split(",");
      
      vars.put("ID", tokens[0]);
      vars.put("pass", tokens[1]);
      vars.put("item", tokens[2]);
      vars.put("product", tokens[3]);
      

    上面的代码将从列表中获取行,根据当前虚拟用户号存储在bsh.shared命名空间中,用逗号分隔并将值存储到JMeter变量中,这样您就可以访问它们为:

    • ${ID}
    • ${pass}
    • ${item}
    • ${product}
  3. 有关在JMeter测试中使用Beanshell脚本的详细信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component指南。