前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于websocket接口的jmeter自动化测试实践(1)

基于websocket接口的jmeter自动化测试实践(1)

作者头像
陶辉
发布2019-06-21 14:39:12
1.9K0
发布2019-06-21 14:39:12
举报
文章被收录于专栏:陶辉笔记

自动化测试对于小团队来说非常重要,特别是技术负责人更偏向于用技术解决问题时(习惯用管理解决问题时,可能会用手动+人海方式)。

而在接口测试中,jmeter无疑是一个低成本方案的自动化测试工具。

为什么呢?因为它在整体设计上把业务逻辑、测试框架、测试数据三者分离了。jmeter进程就是测试框架,而通过如csv等文件提供测试数据,jmx提供包含业务逻辑的测试用例。而jmx脚本,则是以可视化的配置方式来编写(且配置时,可以利用内置函数提供多种功能)。这样的方案,无疑是维护成本最低的。

同时,jmeter有大量的第三方插件,得以支持大部分协议。在性能测试方面,jmeter还支持多台机器组成集群对服务器压测,可以部署agent到服务器以拉取服务器指标的监控实时数据,同时还有大量的压测结果分析工具。

从功能测试角度来看,如果jmeter脚本能覆盖大部分接口及组合场景,那么,阅读jmx脚本无疑是最快速了解产品的方法了。

  1. 对产品经理而言,通过它可以了解产品的落地细节;
  2. 对前端而言,既可以看到后端接口的使用方式,也能够获得集成用例场景,还可以借此产生大量数据以验证页面;
  3. 对后端而言,可以自动化回归功能,还可以压测得到性能并验证稳定性;
  4. 对运维而言,可以得到性能基线数据。

基于此,我选用jmeter来测试后端的websocket接口。

1、环境的准备

1)下载最新版的jdk

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,安装。

2)下载最新版的jmeter,例如当前最新版为3.1,可在

http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.zip下载到压缩包,解压到某目录下即可。

3)下载jmeter插件管理器

jmeter要想支持websocket需要安装一堆插件,磨刀不误砍柴功,先装一个插件叫JMeter Plugins Manager,安装方法也很简单,参考https://www.blazemeter.com/blog/how-install-jmeter-plugins-manager文章,只是把jar包放在lib/ext目录下即可。下载地址在

uhttps://jmeter-plugins.org/downloads/all/

4)在options里找到Plugin Manager,在available plugins里找到Websocket protocol support点击选中,安装后jmeter会自动重启。

从可用插件里即可非常方便的得到新的插件。

这个插件可以自动升级,如下:

5)服务基于websocket和json,故点击这两个插件即可获得。

2、使用websocket sampler进行测试

需要注意,虽然这里的WebServer下有Server Name or IP配置,但在HTTP Request Defaults里的Server Name or IP是不支持分享给每个case的,这点很不方便后续维护,一个解决方案是:添加User Defined Variable,其中抽象出Server Name or IP,再把变量testserver放到每个case上!

另外,backlog表示响应中显示几条message,默认是3。

3、使用json解析响应

测试场景中,协议是以websocket+json格式传递数据,然而,这个websocket插件中却会在response里上面加了一行[Message n]这样一个字符串,导致输出不再是标准的json字符串。所以,添加了jmeter json extractor插件后,后置resposne处理器从非标准的response里提取不出值。例如:

代码语言:javascript
复制
[Message 2]
{"msg": "成功:登录", "data": {"user_id": 1, "sid": "61875d286b9a1eb329ab5642812216fe"}, "code": 1000, "command": {"path": "employee.consumer.Login"}}

这样的结果里,用$.data.sid是取不出sid的值的。当然,用正则表达式肯定是能提取出值的,但如果有大量case,且接口返回格式修改的比较频繁,正则表达式就是一个不大不小的坑,调整修改时效率很低下。

目前我使用的解决方案是,先用正则表达式取出第2行开始的json串(前面的[Message 2]信息是插件添加的,非常固定),再把它以jmeter variable的方式传递给json extractor,即可解决。

json返回里会有列表,而列表里取第几个的值,如果序号是固定的当然好办,而如果与某个元素的值有关,则可以用?(@.)这种方式来取,如上图所示。

4、加入内置函数

比如常用的取随机数__Random,或者取当前日期和时间__time,如下所示:

5、加入定时器

随机或者固定定时器,都非常有用,模拟各种用户时间尺度上不同的行为。

注意,对单个sampler有效的话,必须把定时器移至sampler的子元素中。

6、加入逻辑控制

非常好用的逻辑控制器。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年3月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档