省下重复劳作的时间,坐下来喝一杯茶,工具完善生活。
题图:from Zoommy
一、引子
由于Thrift每个接口都依赖特定IDL结构,因此,针对不同的接口需要编写不同的代码。
也因此,每次开发完成Thrift server端后,如要测试,都要开发对应的client端进行测试。
参考官方文档可以发现,client端代码说简单也不简单(毕竟要写 :) ),重点是这些代码在测试过后即沦为废品,实在是浪费时间精力。
那么,到底能不能找到一种偷懒的方式呢?答案是肯定的。将一切重复劳动工具化,这是程序猿天生的责任。
官方文档:Thrift Java Tutorial、Thrift Python Tutorial、Thrift PHP Tutorial
二、为何使用python client测试
由于只是一个简单的client端开发,因此使用java等重武器总会有牛刀杀鸡的感觉。这种时候当然是选择轻巧灵便的脚本语言——python。(这也要感谢Thrift是跨语言的)
此外,python也有其独有优势。
- MacOS、Linux原生自带python
- python脚本执行简便,一条命令即可
因此选择python来实现测试client端也就是顺理成章的事情了。
三、如何使用python client
参考官方文档:Thrift Python Tutorial
- 搞到IDL文件(由server端提供)
本机装有thrift服务
pip install thrift
Mac如何安装pip:https://pip.readthedocs.io/en/stable/installing/使用thrift命令,生成目标代码
thrift -r --gen py example.thrift
编写python client端代码
编写一个python脚本,接收4个参数:1:server的ip,2:server的端口,3:python脚本中方法名,4:调用的远程方法与参数列表
|
|
- 执行命令调用server端接口
|
|
OK!
到这里我们就完成了测试client的编写。
但是到这里为止,我们还是要为不同的server接口编写不同client代码,完全没有实现工具自动化。
别急,下一步,我们就可以使用shell脚本进行代码的自动生成,将3、4两步的繁琐编码替换执行一条命令。
四、shell脚本自动化生成代码(支持多个IDL文件同时生成)
使用shell脚本是这里的核心,通过shell脚本自动生成代码,可以省去每次编写client端代码的繁琐过程,这样,测试所需步骤即可简化为2步!
- 在thrift文件(IDL)目录下,执行shell脚本生成代码
- 在相同目录下,执行python脚本测试thrift接口
现写好脚本如下,方便大家参考交流
|
|
五、2步测试Thrift接口
通过上边的工具化,现在针对不同的thrift接口,我们都只需要两步即可进行测试。
举个例子:位于目录thrift
下,其内包含test1.thrift
,需要手动操作的过程如下
sh genThriftTest.sh
(即上述shell脚本)python client.py 172.18.201.100 9001 test1_HeartbeatThriftService "getServiceStatus()"
(ip、端口、方法皆为本次测试所用,针对不同测试可以自定义)
六、扩展应用
由于每次调用都简化为一次命令,因此,也可以很容易的编写批量测试脚本,这样也将自动化测试thrift的工作变得更加简单了。