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

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

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

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

同时,jmeter有大量的第三方插件,得以支持大部分协议。在性能测试方面,jmeter还支持多台机器组成集群对服务器压测,可以部署agent到服务器以拉取服务器指标的监控实时数据,同时还有大量的压测结果分析工具。 从功能测试角度来看,如果jmeter脚本能覆盖大部分接口及组合场景,那么,阅读jmx脚本无疑是最快速了解产品的方法了。

对产品经理而言,通过它可以了解产品的落地细节;

对前端而言,既可以看到后端接口的使用方式,也能够获得集成用例场景,还可以借此产生大量数据以验证页面;

对后端而言,可以自动化回归功能,还可以压测得到性能并验证稳定性;

对运维而言,可以得到性能基线数据。

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

环境的准备在options里找到Plugin Manager,在available plugins里找到Websocket protocol support点击选中,安装后jmeter会自动重启。

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

25056c8e9e32a6b82cab1c955b5246b9.png 这个插件可以自动升级,如下:

jmeter-plugins-manager%E5%8F%AF%E5%8D%87%E7%BA%A7-1-1.jpg 5)服务基于websocket和json,故点击这两个插件即可获得。

使用websocket sampler进行测试

websocket%E8%AF%B7%E6%B1%82%E8%AE%BE%E7%BD%AE-1-1.jpg

需要注意,虽然这里的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。

使用json解析响应

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

1

2[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%E6%95%B0%E7%BB%84%E5%8F%96%E5%80%BC-1-1.jpg json返回里会有列表,而列表里取第几个的值,如果序号是固定的当然好办,而如果与某个元素的值有关,则可以用?(@.)这种方式来取,如上图所示。

加入内置函数

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

3fe29ef8de21dc7d02f442a6aed6d564.png

加入定时器

98d68849d41d26fff591ad894b1e047d.png 随机或者固定定时器,都非常有用,模拟各种用户时间尺度上不同的行为。 注意,对单个sampler有效的话,必须把定时器移至sampler的子元素中。

加入逻辑控制

jmeter%E9%80%BB%E8%BE%91%E5%88%A4%E6%96%AD-2.jpg 非常好用的逻辑控制器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值