jmeter 04jmeter做websocket协议的接口测试

查了好多资料,踩了好多坑终于把脚本调试通过了,记录一下:

(1)、首先,我们需要准备Jmeter的WebSocket协议的支持插件

JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar

这插件依赖一下几个jar包

1、jetty-http-9.1.2.v20140210.jar

2、jetty-io-9.1.2.v20140210.jar

3、jetty-util-9.1.2.v20140210.jar

4、websocket-api-9.1.1.v20140108.jar

5、websocket-client-9.1.1.v20140108.jar

6、websocket-common-9.1.1.v20140108.jar

共7个包,我们准备好这些jar包后,讲它们拷贝到Jmeter目录的\lib\ext\目录下。

其次,启动Jmeter,鼠标右键选择测试计划->添加->Threads(users)->线程组。

jmeter 04jmeter做websocket协议的接口测试_第1张图片

jmeter 04jmeter做websocket协议的接口测试_第2张图片

(2)websocket协议脚本编写和调试:

1、首先介绍一下我们要测试的接口的业务流程:(1)http协议登录,登录成功获取一个clientsessionid,时效30Min (2)用这个clientsessionid+登陆的用户名建立连接socket (3)通过socket协议发送一个获取token的请求(当然也是登陆成功的情况下)(4)通过socket协议,使用步骤(3)拿到的token做下单操作,下单操作才是我们需要测试的接口;

2、介绍一下通过chrome抓包:

我们的程序是C/S架构的,本来是无法通过chrome抓包的

(1)开发让我在chrome的属性中的目标值后面加了一串字符

(2)输入了一个ip和端口与在jmeter上websocket脚本中设置的不一样

(3)上图吧:

建立socket连接:

jmeter 04jmeter做websocket协议的接口测试_第3张图片

这条请求的完整显示如下图,也是我们建立socket连接需要的信息:

jmeter 04jmeter做websocket协议的接口测试_第4张图片

双击上图这一样信息跳转到2Frames中,或者直接点击1ws可以看到websocket请求的具体内容,3为建立链接成功后的返回信息

jmeter 04jmeter做websocket协议的接口测试_第5张图片

建立连接对应的jmetere脚本:

jmeter 04jmeter做websocket协议的接口测试_第6张图片

这个建立socket请求的返回信息:

jmeter 04jmeter做websocket协议的接口测试_第7张图片

请求token,从开发给的接口文档中可以看出,请求tonken就发送了一个getInsertOrderToken的请求,我们在chrome的frame里找到这个请示:

jmeter 04jmeter做websocket协议的接口测试_第8张图片

将以上这个请求的内容复制到jmeter脚本中:

jmeter 04jmeter做websocket协议的接口测试_第9张图片

返回内容:

jmeter 04jmeter做websocket协议的接口测试_第10张图片

下图是jmeter脚本返回的:

jmeter 04jmeter做websocket协议的接口测试_第11张图片

下单的请求:

先看chrome上面的数据:

jmeter 04jmeter做websocket协议的接口测试_第12张图片

 Jmeter下单脚本:

jmeter 04jmeter做websocket协议的接口测试_第13张图片

请求的响应:

jmeter 04jmeter做websocket协议的接口测试_第14张图片

到这里这个接口脚本就调试通过了,以下记录几点测试过程中遇到的问题:

1、刚开始没有抓包,开发给了一个地址怎么也调不通过,后面发现是因为没有建立连接,这个网上讲的也很少可以参考这一篇:https://blog.csdn.net/heart_1014/article/details/53606337

2、建立连接成功了,发现获取token又出了问题,最后是因为两个原因:(1)没有勾选streaming connection,如果一个socket连接中有多个请求,必须勾选这个,不然每发送一个请求就建立一次连接,具体参考这一篇:http://www.cnblogs.com/yuanchunli/articles/5265738.html     (2)返回token需要一定的时间,之间没有设置等待时间一直获取不到,后面加了一个固定等待时间终于获取到了;

3、登陆获取的clientsessionid和下单前获取的token都需要添加后置处理器中的正则表达式提取器进行,将这两个参数时行提取放在后面的接口中作为入参,具体的可以参考这一篇:http://www.cnblogs.com/fengpingfan/p/4755410.html

增加1:

脚本调试好以后,发现有点小问题,如果我们后面的脚本需要取前面脚本的响应内容,那后面脚本的性能会受前面脚本的影响,为了避免这个影响,需要把前面脚本的响应结果写到一个文件中然后再参数化到后面的脚本中:

(1)在本地新建一个空的csv后缀的文件

(2)在Jmeter中加一个后置处理器-BeanShell PostProcessor,在里面编程,其实就是简单的几句java代码

jmeter 04jmeter做websocket协议的接口测试_第15张图片

生成的CSV文件如下 :

jmeter 04jmeter做websocket协议的接口测试_第16张图片

接下来就可以用这些值参数化后面的脚本啦!

你可能感兴趣的:(性能测试)