如何在JMeter中使用带有ForEach控制器的csv文件

时间:2014-08-24 12:47:14

标签: jmeter

我在JMeter做老师工具测试。我在.csv文件中有30个条目。我想通过任何逻辑控制器迭代前10个条目用于第一个线程,其他10个条目用相同的控制器迭代第二个线程,这个过程应该重复3个线程。 在逻辑控制器里面我有http采样器。

线程组(3) -     csv配置文件 -     foreach控制器(1-10) -          http sampler -

repeat foreach loop controller(11-20)

2 个答案:

答案 0 :(得分:7)

据我了解您的问题,您需要以下内容:

  1. 从CSV文件中读取所有值
  2. 对于第一个线程迭代前10个条目
  3. 对于第二个线程迭代第二个10个条目
  4. 等。
  5. 为了实现这一点,您需要以下测试计划结构:

    • 线程组 - 定义虚拟用户线程,循环,加速等。
      • Beanshell Sampler - 将CSV文件读入JMeter变量
      • 如果控制器1(第一线程条件)
        • ForEach Controller 1
        • HTTP请求
      • 如果控制器2(第二线程条件)
        • ForEach Controller 2
        • HTTP请求
      • 等。

    关于详细配置

    Beanshell Sampler

    将以下代码放入Beanshell Sampler Script区域:

    BufferedReader br = new BufferedReader(new FileReader("/path/to/your/file.csv"));
    String line;
    int counter = 1;
    while ((line = br.readLine()) != null) {
       vars.put("VAR_" + counter, line);
       counter++;
    }
    br.close();
    

    上面的代码将读取file.csv中的所有行并将其存储到JMeter变量中,如:

    VAR_1=first line of your CSV file
    VAR_2=second line of your CSV file
    VAR_3=....
    

    如果控制器1

    如果您希望此控制器下的任何内容适用于第一个用户,请仅设置以下条件:

    ${__threadNum}==1
    

    ForEach Controller 1

    如果您希望第一个帖子从CSV文件中读取前10行,请按如下方式配置ForEach控制器1:

    • 输入变量前缀:VAR
    • 启动循环索引:0
    • 循环结束索引:10
    • 输出变量名称:任何有意义的内容,即CURRENT_VAR

    HTTP请求1

    在需要时将当前行引用为${CURRENT_VAR}

    希望它足够清楚。

    参考文献和操作方法:

答案 1 :(得分:0)

将Loop控制器添加到线程(Forever = True),然后将“ CSV数据集Config”作为子级添加到线程。当所有“ CSV数据集”行都运行完后,Jmeter将停止。

例如:

  

线程

     
    

循环控制器

         
      

CSV数据集配置       HTTP请求

    
  

Jmeter版本= 5。