接口测试入门课
15
15
1.0x
00:00/00:00
登录|注册

07 | WebSocket接口:如何测试一个完全陌生的协议接口?

归入框架
站在自己的技术栈之上,完成技术积累
借力开发工程师
结合现有技术栈,寻求解决方案
丰富自己的测试手段
不断扩充框架的测试能力
将陌生接口合并到自己的框架中
掌握对应的理论基础
利用自己的测试框架和编码基础
使用熟悉的测试工具、测试平台
寻求解决方法
直接使用开发工程师的客户端代码
三步快速完成测试任务
将WebSocket接口封装进框架
使用Python的WebSocket协议库
分析WebSocket接口
使用熟悉的工具尝试解决问题
获取开发工程师的客户端代码
留言区中留下疑问和做法
工作中解决陌生协议接口测试任务的做法
面对WebSocket的接口测试任务
归入框架
站在自己的技术栈之上,完成技术积累
借力开发工程师
保持敏锐的测试嗅觉
总结
自己写WebSocket测试代码
第一次接触WebSocket接口
思考题
面对陌生协议接口测试任务
WebSocket接口测试
总结

该思维导图由 AI 生成,仅供参考

你好,我是陈磊。很高兴你又来和我一起探寻接口测试的奥秘了。
我们在前面一起学习了怎么分析和完成一个 HTTP 协议的接口测试,又一起学习了如何封装接口测试框架,以及如何搭建接口测试平台。我相信,现在你已经完全掌握了 HTTP 协议的接口测试了。
但是,这还不能说明你已经能独立完成接口测试了,为什么这么说呢?这是因为数据在网络传输上都是依靠一种协议来完成的,在上学的时候,你肯定学过包括 TCP、UDP、HTTP 等在内的一堆协议,但是如果你遇见了一个全新的协议,你知道怎么从零开始,完成接口测试吗?
今天我就以 WebSocket 为例,告诉你当你第一次接触一个完全陌生的协议接口时,你要如何开始完成接口测试工作。

未知的新协议接口并不可怕

作为一名测试工程师,在面对一个陌生协议的接口测试时,你是不是会常常感到很无助?面对这样的任务时,你的第一反应肯定是向开发工程师求助,因为开发工程师基于新协议已经完成了接口开发,向开发工程师求助显然是最好的办法。
我在工作中就遇见过类似的事情。记得那是在我参加工作的前几年,有一个被测项目的接口是一个私有协议,当我看到接口文档的时候,第一反应就是找开发工程师,向他求教一下这个私有协议。这个开发工程师人很好,他给了我一个学习脉络,其中包含了协议的说明文档、代码开发文档、实现代码等内容,我拿到这些资料后,马上按照上面他给出的学习顺序投入学习。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了作者在面对陌生协议接口时的测试经历,以WebSocket接口测试为例,分享了作者的测试思路和方法。作者强调了在面对新协议接口时,测试工程师应该以自己熟悉的技术栈为出发点,寻找解决问题的方法。文章以Python为例,展示了如何通过编写WebSocket测试代码来解决接口测试问题,并提出了将WebSocket接口封装进自己的框架的建议。通过作者的经历,读者可以了解到面对新协议接口时的测试思路和方法,以及如何利用已有的知识和工具进行测试。总结了面对陌生协议接口测试难题的三步解决方法,并提出了思考题,鼓励读者分享自己的解决方案。整体而言,本文为读者提供了面对新协议接口测试的实用指导和思考启发。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《接口测试入门课》
新⼈⾸单¥29
立即购买
登录 后留言

全部留言(22)

  • 最新
  • 精选
  • happychap
    我的尝试的一般顺序:现成工具,工具现成插件,测试框架+项目组封装或采用的api库(如:junit +对应的协议开源库)。 个人觉得遇到这种情况,要会点编程,孰练测试框架胜算才大ʘᴗʘ 工作中有突然遭遇xmpp和mqtt协议性能测试的经历,最终jmeter+开源插件+厂商client jar包+demo+api手册搞定了任务。

    作者回复: 谢谢您的支持,xmpp和mqtt协议确实不容易遇见,看到您的解决思路可真棒,借力打力得方法会让我们事半功倍。谢谢您的留言,解决方法特别棒,也帮我提供了思考。

    2020-02-15
    16
  • 蔡森冉
    年前刚好公司年会,然后开发了个聊天小程序,就给我测。当时完全不知道怎么搞,就去看这个协议。然后就想先抓包,结果抓不到,捣鼓了修改fiddler抓到了包,然后也是看抓到的数据好像跟平时不一样,然后各种搜索,平时使用的jmeter,就在jmeter中按往常的来试试,正常取样器不行,最后看到jmeter中有个websocket取样器,开心完成压测。

    作者回复: 谢谢您的留言,一个解决问题的完美过程。加油

    2020-02-14
    7
    12
  • 罗春南_Nancy
    self.ws='null'--加个定义好点 if api_type=='ws': self.ws = create_connection(url_root) elif api_type=='http': self.url_root = url_root ------------------------------------------ # common类的析构函数,清理没有用的资源 def __del__(self): ''' :return: ''' if self.ws!='null':------加个判断好点 self.ws.close() 不然测http的时候websocket会报错。

    作者回复: 完美 谢谢您的建议。

    2020-02-19
    7
  • 🐾
    像微服务接口,一般都是使用特殊协议如dubbo、protobuf进行通信的,这种情况应该怎么做测试呢?只能用自己擅长的编程语言写一个客户端模拟调用来进行测试?这种还需要连接配置中心什么的。而且会不会存在有些协议是不跨语言的,比如仅限Java语言,不支持python。

    作者回复: 您好,无论您说的dubbo、protobuf还是springcloud,gRPC等都不会受到语言的限制而无法调用的,但是也不能断定没有这个情况,那么就只能靠你自己依据自己的技术栈完成协议的封装了,目前您说的dubbo,protobuf使用各种语言都有对应的解决办法,protobuf可以参考https://www.jianshu.com/p/58513863b491;dubbo可以使用https://blog.csdn.net/cyjs1988/article/details/82495136。

    2020-02-14
    3
    7
  • VeryYoung
    好巧,websocket协议也是我遇到的第一个陌生协议,那个时候测试工期短,用的是java技术栈,就用了netty框架来封装,后面有时间了就进行回顾,发现还有有个websocket.jar开源包,后面又相继遇到了amqp、mqtt等非http协议!

    作者回复: 好巧啊,你遇见了很多陌生协议。很宝贵的经验啊

    2020-02-15
    3
    5
  • 孟见大侠
    其实根本就不要加api_type这个参数,根据url_root 就可以知道协议类型了。ws://echo.websocket.org 是ws协议,https://echo.websocket.org是https协议。根据协议头,截取出来就可以了。这样可以少传一个参数。

    作者回复: 可以,这样写和很棒的,我加了type是为了简单明了,string的比较比截取后比较会少一步操作,节省了cpu的计算。 课程中代码我做了整理:https://github.com/crisschan/api_geektime。

    2020-03-07
    3
  • 夜歌
    from websocket import create_connection,请问websocket是您自己封装的类吗?试着运行代码,发现没有websocket这个模块,然后pip install websocket 后也没有 create_connection 这个方法。所以是自己封装的吗?

    作者回复: 在库里面,不是自己封装的

    2020-04-27
    6
    1
  • shadow
    这里Common里增加了一个入参api_type『def __init__(self,url_root,api_type)』,用于标记请求协议类型,这实际相当于框架底层方法重构,一个方法是给这个入参加默认传参,就是之前的http,不知道还有没有别的方法? 还有一个就是,框架开发,会多多少少的涉及到底层重构,然后可能影响的就是所有的用例都需要修改,这种情况,不知道有没有什么好的规避方法?

    作者回复: 您说的实在框架迭代过程中必须经历的,因此为了能够兼容老框架技术栈,我建议在构造函数中给两个参数默认值,默认值就是最开始的uri和api_type的类型,已解决前后兼容的问题。谢谢您这个好问题

    2020-02-15
    1
  • April Gao
    不懂就问,self.ws='null',python中没有null,请问这个写法是正确的吗?

    作者回复: 不是为了让他是None,是给他一个语义的空

    2021-09-01
  • -_-
    elif api_type=='http': self.ws='null'这边为啥要加self.ws='null'这边不加有什么影响吗既然是http为什么要写这一行是为了迎合析构函数吗

    作者回复: 你去掉后写一个http协议的测试case试一次就知道了

    2020-07-30
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部