07 | WebSocket接口:如何测试一个完全陌生的协议接口?
该思维导图由 AI 生成,仅供参考
未知的新协议接口并不可怕
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了作者在面对陌生协议接口时的测试经历,以WebSocket接口测试为例,分享了作者的测试思路和方法。作者强调了在面对新协议接口时,测试工程师应该以自己熟悉的技术栈为出发点,寻找解决问题的方法。文章以Python为例,展示了如何通过编写WebSocket测试代码来解决接口测试问题,并提出了将WebSocket接口封装进自己的框架的建议。通过作者的经历,读者可以了解到面对新协议接口时的测试思路和方法,以及如何利用已有的知识和工具进行测试。总结了面对陌生协议接口测试难题的三步解决方法,并提出了思考题,鼓励读者分享自己的解决方案。整体而言,本文为读者提供了面对新协议接口测试的实用指导和思考启发。
《接口测试入门课》,新⼈⾸单¥29
全部留言(22)
- 最新
- 精选
- happychap我的尝试的一般顺序:现成工具,工具现成插件,测试框架+项目组封装或采用的api库(如:junit +对应的协议开源库)。 个人觉得遇到这种情况,要会点编程,孰练测试框架胜算才大ʘᴗʘ 工作中有突然遭遇xmpp和mqtt协议性能测试的经历,最终jmeter+开源插件+厂商client jar包+demo+api手册搞定了任务。
作者回复: 谢谢您的支持,xmpp和mqtt协议确实不容易遇见,看到您的解决思路可真棒,借力打力得方法会让我们事半功倍。谢谢您的留言,解决方法特别棒,也帮我提供了思考。
2020-02-1516 - 蔡森冉年前刚好公司年会,然后开发了个聊天小程序,就给我测。当时完全不知道怎么搞,就去看这个协议。然后就想先抓包,结果抓不到,捣鼓了修改fiddler抓到了包,然后也是看抓到的数据好像跟平时不一样,然后各种搜索,平时使用的jmeter,就在jmeter中按往常的来试试,正常取样器不行,最后看到jmeter中有个websocket取样器,开心完成压测。
作者回复: 谢谢您的留言,一个解决问题的完美过程。加油
2020-02-14712 - 罗春南_Nancyself.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-197 - 🐾像微服务接口,一般都是使用特殊协议如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-1437 - VeryYoung好巧,websocket协议也是我遇到的第一个陌生协议,那个时候测试工期短,用的是java技术栈,就用了netty框架来封装,后面有时间了就进行回顾,发现还有有个websocket.jar开源包,后面又相继遇到了amqp、mqtt等非http协议!
作者回复: 好巧啊,你遇见了很多陌生协议。很宝贵的经验啊
2020-02-1535 - 孟见大侠其实根本就不要加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-073 - 夜歌from websocket import create_connection,请问websocket是您自己封装的类吗?试着运行代码,发现没有websocket这个模块,然后pip install websocket 后也没有 create_connection 这个方法。所以是自己封装的吗?
作者回复: 在库里面,不是自己封装的
2020-04-2761 - shadow这里Common里增加了一个入参api_type『def __init__(self,url_root,api_type)』,用于标记请求协议类型,这实际相当于框架底层方法重构,一个方法是给这个入参加默认传参,就是之前的http,不知道还有没有别的方法? 还有一个就是,框架开发,会多多少少的涉及到底层重构,然后可能影响的就是所有的用例都需要修改,这种情况,不知道有没有什么好的规避方法?
作者回复: 您说的实在框架迭代过程中必须经历的,因此为了能够兼容老框架技术栈,我建议在构造函数中给两个参数默认值,默认值就是最开始的uri和api_type的类型,已解决前后兼容的问题。谢谢您这个好问题
2020-02-151 - 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