zoukankan      html  css  js  c++  java
  • JMeter BeanShell向文件中写入内容

    项目背景

    1. 待压测的业务依赖前置业务的response

    2. 前置业务不在压测范围内

    3. 前置业务的response格式大致如下:

      {"data": "[id1, id2, id3...]"}
      
    4. 待压测业务每次请求消耗一个id,同时希望能把每次用到的id记录下来

    实现方案

    1. 既然前置业务能一次性返回所需的id,那在setUp线程组中完成准备测试数据即可

    2. 使用BeanShell实现写入文件的操作,考虑一下3点:
      ① 写入到文件中的格式要能参数化给待测业务用
      ② id不可重复使用,那就要求文件中的内容每次都是新的id,即旧文件要删除
      ③ 虽然前置业务返回的是JSON,但考虑到Java处理JSON要依赖第3方jar包,脚本移植不方便,就直接操作字符串吧

    具体细节

    1. 在setUp线程组中新建前置业务的Sampler和JSON Extractor

    2. 在Sampler下继续添加后置处理器BeanShell

      import java.io.*;
      
      var idFile = "data/id.csv";  // 定义存放id的文件路径
      
      try{
          File f = new File(idFile);
          f.delete();     // 删除旧的idFile文件
      }catch(Exception e){
          e.printStackTrace();
      }
      
      var idStr = vars.get("data");    // 获取JSON Extractor中提取的data
      idStr = idStr.replace("[","");     // 去掉 "[id1, id2, id3...]" 首尾的中括号
      idStr = idStr.replace("]","");
      String[] temp = idStr.split(",");   // 以"," 分割字符串 "id1, id2, id3...",保存成String类型的数组
      
      FileWriter fstream = new FileWriter(idFile);   //FileWriter("file01.txt",true) 追加模式
      BufferedWriter out = new BufferedWriter(fstream);
      
      for (int i = 0; i < temp.length; i++){
          out.write(temp[i]);
          out.write(System.getProperty("line.separator"));  // 换行
      }
      
      out.close();
      fstream.close();
      
    3. 接下来就可以在待测业务的线程组中新建【CSV数据文件设置】

      • 注意这里有个坑,就是JMeter脚本在执行时,会先检查csv文件是否存在,不存在会报错,所以需要先手动创建一个“id.csv”在data目录下,有无内容无所谓,主要为了检查通过
  • 相关阅读:
    【板子】博弈论
    【洛谷】P1229快速幂
    【洛谷】P1349广义斐波那契
    2018.11.15 Nginx服务器的使用
    2018.11.14 hibernate中的查询优化---关联级别查询
    2018.11.13 Hibernate 中数据库查询中的Criteria查询实例
    2018.11.12 Spring事务的实现和原理
    2018.11.11 Java的 三大框架:Struts+Hibernate+Spring
    2018.11.10 Mac设置Eclipse的 .m2文件夹是否可见操作&&Mac系统显示当前文件夹的路径设置
    2018.11.9 Dubbo入门学习
  • 原文地址:https://www.cnblogs.com/z417/p/13786045.html
Copyright © 2011-2022 走看看