前言
准备上架一款聊天app,上架之前准备做一些测试工作,模拟用户进入房间,维持心跳,房间送礼,发言等行为(因为用的第三方im以及声网,这些都是基于http的),也不是很懂测试,听老大说过一嘴,可以用jmeter,就尝试了下。
安装
直接去官网下载下载地址下载完成之后直接解压。
点击这个文件就可以打开了。
使用
默认会有一个测试计划testplan,可以改名也可以不改,我是懒得改。
创建一个ThreadGroup
一个线程组其实就可以用来测一个接口了。
numberofthreads可以定义开多少个线程(模拟的用户数量),Ramp-upPeriod(inseconds):达到指定线程数所需要的时间。举例:线程数设置为50,此处设置为5,那么
每秒启动的线程数 =线程数50/5=10。loopcount循环次数。
创建一个HTTPRequest
线程组定义了策略,而httprequest就是具体执行的方法了。
protocol定义协议,ip定义域名,port指定端口,post这个下拉框指定请求方法,path指定访问路径,encoding指定编码,bodydata因为指定post的body。
遇到的问题
不同的用户有不同的token,怎么给不同的用户分配不同的token
设置请求头
接口有签名校验,怎么通过java代码传递签名
加密的jar包怎么引入
通过csv文件
把需要模拟的用户的token放进去
基本上看下配置就知道怎么回事了,filename指定文件位置,encoding指定编码,variablenames变量名(用分隔符区分--基本上csv文件有多少个字段,定义多少个变量)Delimiter分隔符csv文件一般用,,sharemode就是共享模式了allthread可以分配给所有的线程。
我定义了两个字段,下面我的csv文件。
定义好了变量,我们直接使用${token}的方式就可以获取token了。
设置请求头
最重要的info:G={sign}&s={token},这里的${token}就是上面csv文件里分配的token了,sign一会再解释。
加密签名
使用java代码来执行加密操作。
下面的script提供了一些全局变量,分别ctx估计是context,var就是变量了,log就是日志。
import com.x.x.x.x.x.EncryptUtils;String body="roomId=123456";String token=vars.get("token");String apiKey="abcdef";String info="s="+token+"&t="+client;String key=info+body+apiKey;log.info("key="+key);String sign=EncryptUtils.md5(key);String header="G="+sign+"&"+info;log.info("sign="+header);vars.put("sign",header);
这里就把上面header需要的sign给回填进去了,这样就可以完成验签的工作了,当然我这里写的比较简单。
引入jar包
上面的脚本里面有我们自己写的jar包,需要import进jmeter才能被import。流程如下:
请求结果归档
定时发送
比如我们的心跳接口是需要client每隔5s访问一次,需要定时发送。
我这里写的是30s。
结束语
jmeter有很多功能,我这里只是用来测试接口。
链接:https://juejin.im/post/6869255992992464910
本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除
推荐阅读点击阅读☞入门必会:小白必看的Jmeter负载测试实例
点击阅读☞JMeter也可以实现自动化测试啦!
点击阅读☞Jmeter压力测试中关于Http的那些事儿
点击阅读☞Jmeter实现接口压测的完整流程,不要再说你不会了!
点击阅读☞现在比任何时候都需要这个接口自动化实例说明!
戳