记录性能测试脚本开发的过程
上一篇 / 下一篇 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: