使用BeanShell后处理器时清空csv文件

使用BeanShell后处理器时清空csv文件,csv,testing,jmeter,Csv,Testing,Jmeter,我正在尝试使用BeanShell后处理器将变量保存到csv文件中,代码: String id = "${userID}"; FileWriter fstream = new FileWriter("JmeterBean.csv",true); fstream.write(id+"\n"); fstream.close(); 测试计划: HTTP请求GetUsersById=>返回所有ID Json提取器=>来自我的响应 {"@class":"com.test.dto.userDTO",

我正在尝试使用BeanShell后处理器将变量保存到csv文件中,代码:

String id = "${userID}";
FileWriter fstream = new FileWriter("JmeterBean.csv",true);
fstream.write(id+"\n");
fstream.close();
测试计划:

  • HTTP请求GetUsersById=>返回所有ID

  • Json提取器=>来自我的响应

    {"@class":"com.test.dto.userDTO",
          "author":"John",
          "id":"89BC331D723F",  },
    
    
    {"@class":"com.test.dto.userDTO",
          "author":"Alex",
          "id":"FTH7JBDRF567",
       }
    
    • 变量名称:userID
    • JSON路径表达式:
      $.[?(@@class=='com.test.dto.userDTO')].id
    • 匹配号码:
      -1
  • 比恩希尔后处理器

  • 但我的csv文件始终为空,如下所示:

    用于获取变量

    String id = vars.get("userID");
    
    变量-(JMeterVariables)-提供对变量的读/写访问权限:
    vars.get(键)

    并且更喜欢使用
    JSR223后处理器
    而不是
    Beanshell后处理器

    String id  = vars.get("userID");
    FileWriter fstream = new FileWriter("JmeterBean.csv",true);
    fstream.write(id+"\n");
    fstream.close();
    
    我这样做了,但我在csv文件中得到了与
    null
    相同的结果:

  • 如果JSON提取器产生超过1个匹配项,那么您没有
    userID
    变量,您将有如下内容:

    userID_1=89BC331D723F
    userID_2=FTH7JBDRF567
    userID_matchNr=2
    
    因此,我建议使用组合对JSON提取器生成的内容进行双重检查

  • 假设以上所有内容都添加(确保它位于JSON提取器之后),并使用以下代码:

    1.upto(vars.get('userID_matchNr') as int, { number ->
        new File('JmeterBean.csv') << vars.get('userID_' + number) << System.getProperty('line.separator')
    })
    
    1.upto(vars.get('userID_matchNr')作为int,{number->
    
    新文件('JmeterBean.csv')可能您没有设置
    userID
    ,显示如何定义/设置变量我添加了一个调试采样器,它显示:“userID_1=89BC331D723F”和“userID_2=FTH7JBDRF567”,所以使用
    userID_1
    ,但在这种情况下,它将只编写第一个用户,然后通过此链接找到解决方案()这不是答案,应该是对你的问题的编辑