记录性能测试脚本开发的过程

上一篇 / 下一篇  2019-07-10 10:53:24 / 个人分类:软件测试

  场景:一个社交电商的支付场景
  考虑的链路:大量的用户+选择不同商品+不同用户进行下单+选择自己平台支付(余额)+查看不同订单列表+进行售后
  需要的技术支持:验证码需要废掉,用户支付密码写死
  设计如下:
  1.分三个步骤,设计三个线程组;第一个步骤制造大量的登录用户,并产生token;第二个这么多用户选择商品,进行下单;第三个进行支付,并后期的退款;
  2.由于我有三个线程组,所有我在testplan,勾选独立运行每个线程组,我不希望同时进行,导致可能的失败;
  造数据,造大量的登录**用户,获得数万计的token,电话号码的制造,我不管你们有多少方法,我就简单实现,jmeter自带的函数助手,random函数${__Random(13111111111,15999999999,)},
  提取token,常用的方法是正则匹配,json提取器,那个用的liu,你就用哪个吧,这个就不用贴图比较简单;
  在制造大量的数据的时候,我接到了一个任务需求,就是这些token我需要存在csv文件中,存在本地文件中。。。,拿到需求我有点懵逼,如果我用python写,很容易写到本地呀,仔细想了下,beanshell应该可以,他就是Java,应该可以提供方法,果然可以,添加一个beanshell后置处理器,脚本如下:
   import java.io.BufferedWriter;
  import java.io.FileWriter;
  import java.io.IOException;
  String token=bsh.args[0];
  try {
  FileWriter fstream=new FileWriter("E:\\test\\token.csv",true);
  BufferedWriter ut=new BufferedWriter(fstream);
  out.write(vars.get("token")+"\n");
  out.close();
  fstream.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  
  6.当时想到有多个线程组,如果跨线程合作,就想到全局变量,这里也记录下;设置全局变量暂时记录2种方法,一种beanshell取样器,一种beanshell后置处理器,都会使用函数__setproperty函数
  然后拷贝出来,把它放在beanshell取样器脚本里面,然后使用__P函数,引用全局变量,
  现在就可以在任何线程里面引用token了(全局我暂时只能传递一个,鸡肋了,后期再研究下),另外一种是beanshell后置处理器,脚本如下:
   String userId=bsh.args[0];
  print (token);
  ${__setProperty(token,${token},true)}

  7.在压测过程中,发现每次启动脚本,token等值就会追加在csv文件后面,我希望每次数据都是干净,发放如下,在保存数据之前,添加一个beanshell取样器,脚本如下,
   String path = "E:\\test";
  File file = new File(path);
  if (!file.exists()) {
  System.out.println("目录不存在" + "the dir is not exists !");
  return false;
  }
  String[] content = file.list();//取得当前目录下所有文件和文件夹
  for (String name : content) {
  File temp = new File(path, name);
  if (temp.isDirectory()) {
  //判断是否是目录
  temp.delete();
  //删除空目录
  } else {
  if (!temp.delete()) {
  //直接删除文件
  System.err.println("Failed to delete " + name);
  }
  }
  return true;
  log.info("删除成功 ");
  }
  
  每次启动前,就可以把我之前文件夹下的文件全部删除了。
  8.之前产生了csv,自然我要读数据,有很多方法,有csvdata读取-路径是绝对路径,我习惯用stringFromFile函数"${__StringFromFile(E:\test\order.csv,order,,)}";
  9.我在获取订单列表的时候,总会有翻页,而且页码有规律的增加,这个时候就用到counter这个配置元件或者函数都可以,我喜欢函数${__counter(True;1,)}
  10.基本线程都完成了,这个时候你就需要定时器,我选择两种,固定/聚集定时器,至于原理这里就不在赘述简单,还有目前是脚本的开发,至于调试,和业务也需要挂钩,漏斗模型或者线程的比例后期再研究
  11.最后贴一张我的成果

       以上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8 052),我们将立即处理。






      了解更多课程内容及课程安排,可咨询QQ 2852509883 或致电客服 400-821-0951(工作日9:00-17:30)
【看这里】技术交流、拓展人脉、领取福利欢迎加入博为峰网校大课堂>>>



TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar