不论是做接口测试还是性能测试,本质上都是在和协议打交道。除了最常见的Http协议外,当遇到其它的通信协议时,我们要如何快速学习它,以便能够更好地测试它呢?
01
什么是通信协议呢?通信协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。简单而言,就是机器之间的“语言”。区别于编程语言(JAVA、C等,那是人机之间的语言)。如图1-1所示,在不同的系统层级中,存在着各类不同的通信协议。
图1-1不同系统层级中的协议分布
协议是由三个要素组成: 语义:表示要做什么; 语法:表示要怎么做;时序:表示做的顺序。所以,我们在学习协议时,只要弄清楚这三个信息,就可以快速掌握并使用它。我们需要关注:1.通讯协议的基本原理 ;2.了解协议的特点及应用场景;3.学会如何发起一个对应请求并接收数据。
02
注意观察下图1-1,细心的你可能会发现,为什么没有我们常见的Socket协议?
Socket是对TCP/IP协议的封装,它本身并不是协议,而是一个调用接口(API)。TCP/IP是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口,提供给程序员做网络开发所用的接口,这就是Socket编程接口。Socekt协议位于应用层和传输层之间。它有个说法叫“万能协议”,有些系统在应用层使用的是混合协议时,可以统一转换成Socket来处理。
03
小陈同学遇到了一个场景,系统接口是通过tcp长链接来实现的,现在需要针对这个接口进行性能压测,那么他将如何开展工作呢?
首先,要了解下tcp长链接是什么东西(可以通过检索资料、和开发沟通、和组内其他成员沟通来获取这方面的信息,先知道是什么),正常情况下,tcp链接在数据传输完成后,就会主动释放,而在某些场景下,我们需要保持这个链接,这样做的好处是减少连接建立过程的耗时,同时,基于长链接,两端可以很方便地Push数据,做交互,典型的场景就是聊天窗口。而保持长链接的方式通常有两种:系统层的KeepAlive机制,和应用层的心跳检测。
在了解了什么是tcp长链接后,就要想办法把这个东西模拟出来,进一步去理解它的原理,那么有哪些工具可以模拟这类的tcp长链接呢?我们以测试人员最常用的Jmeter工具来说明:在TCP Sampler中,有个Re-use connection,如果选中,连接会一直处于打开状态。了解到这个信息后,小陈就知道如何开展这个测试了(TCP的报文如何获取,就在不本篇展开,具体可以查找Wireshark工具的使用)。
图1-2Jmete中的长链接选项
04
通常情况下,小陈的工作可以正常开展,这个话题也就结束了。但小陈毕竟不是普通的小陈,他有自己的思考。还记得我们前面提到的关于通信协议学习的三个内容吗?我们知道了tcp长链接的原理,也清楚了如何去模拟一个长链接。但是忽略了长链接的特点和应用场景了。经过查阅相关资料,小陈总结了长连接和短链接各自的优缺点:
1、长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间,但是一直连接对于客户端来说比较耗电; 2、对于频繁请求资源的客户来说,较适用长连接; 3、客户端与服务端之间的连接如果一直不关闭的话,会存在一个问题; 4、随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致服务端服务受损; 5、一次TCP连接和断开需要7个来回,如果客户端请求频繁,将在TCP的建立和关闭操作上浪费大量时间和带宽;
通过总结这些特点,小陈又梳理出了关于这次测试的其他需要关注的测试点:
1. 关注服务器建立长链接的数量,避免过多无用的长链接; 2. 和开发沟通长链接保持的时间和检测机制,避免有用的长链接失效; 3. 它的释放机制是如何保障的(毕竟不能一直长链接)
05
事情好像告一段落了。小陈奇奇怪怪的知识又增加了一些。但小陈又进一步做了思考:Jmeter中Re-use connection是如何实现的呢?它的心跳检测机制是如何实现的?研发使用长链接的场景是否合理?是否是必要的?嗯,其实还是有很多东西可以去探讨的。
测试人员的成长,就是在这些一步步的思考中沉淀下来了。遇到一个问题,有的人解决了眼前的问题,有的人思考了问题背后的原因(5Why),有的人会进一步地联想和总结。1年,2年,N年之后,差距就逐步体现了。
不要被测试这个角色所限制,你应该有更大的发挥空间。
往期推荐:
用心维护自己的职场标签
微服务的测试策略
微服务间的测试策略
单体微服务的测试策略
你还记得测试策略么
END
标星、点赞、关注三连走起,感谢支持。
如果想阅读更多文章,请关注我的公众号。