当前位置: 首页 > 后端技术 > Node.js

开源API测试工具Hitchhikerv0.6更新-改进压力测试

时间:2023-04-04 00:43:27 Node.js

Hitchhiker是一款开源的RestfulApi测试工具,支持多人协作,支持Schedule、数据比对、压力测试、上传脚本自定义请求,可以易于部署去当地与您的团队成员协作测试API。详细介绍见:http://doc.hitchhiker-api.com/cn/introduction.html在线体验:http://www.hitchhiker-api.com/可以使用免登录试试,避免登录(onlinedemo不支持压测和上传js,单核虚拟机不支持)。我们来看看本次更新:重写压测Hitchhiker之前的压测节点是基于Go的Hitchhiker-Node。Hitchhiker前期的脚本功能并不复杂,不支持上传js库、async/await、文件。读取、保存等,Go的高并发非常吸引人。做了一番调研,用otto作为js解释器可以满足当时的脚本运行逻辑,所以选择了Go作为压力测试的节点。在早期,这就足够了。后来Hitchhiker开始支持更复杂的脚本功能,比如自定义js库,因为npm中很多js库都是基于Nodejs的,目前的Go和otto无法满足这种需求,除非再增加一个Node进程来执行脚本,不过这样太复杂了,还是直接用Nodejs写比较好,所以综合考虑后,压力测试点改用Nodejs重写。改写后的压力测试与服务器集成,即无需部署其他程序,支持所有已有的脚本功能。两种方式的优缺点:Go的高并发和goroutine使得写这种压力程序非常容易,性能也有保证。缺点是Hitchhiker的脚本是js,所以Go执行这些脚本。目前基于Go的压点不支持Hitchiker脚本的高级特性。用Nodejs写这种压测程序还是比较费力的。需要自己管理多个进程和进程间通信,无法准确控制每秒的请求数。即压力测试参数QPS对Nodejs的压力点没有用。好在HitchhikerServer也是基于Nodejs的,所以请求处理逻辑可以复用,而且Api压力测试本质上是高IO,所以Nodejs的性能也很好。不过Nodejs程序目前不支持分布式,后续会添加,主要功能已经完成。稍微对比了一下两者的性能,在单机上基本是势均力敌。目前默认使用基于Nodejs的版本,也可以使用Go,但是Go暂时停止维护,除非Go有基于Nodejs的解释器,再考虑搬回去。重新整理请求流程之前的请求流程有点乱,导致了一些不容易发现的问题,比如环境变量没有应用到Test脚本中,所以在改这个bug的时候,重构代码明确了流程:response显示图片这个是github上的朋友提出来的。之前没想到还有人用这个工具求图,所以没关注这块。但是有人用,说明有需求(不止一个人),所以实现了这个功能。如果响应头中有image/*的话,会直接显示图片而不是图片内容(一段乱码)。修改Bugglobal函数中的内容会在切换模块后消失。当schedule中的request返回图片时,会导致JSON.parse失败,导致异常。更改浏览器中压力测试的websocket有时会失败,重试计划的定时运行记录会有1分钟左右的误差。当请求的方法改变时,名称将被重置。后续计划是短期的。主要是增加新的测试功能,比如curl生成请求,request生成代码等,搞了半天,一个是documentation,一个是Mock,以后根据需要确定下一个模块。Github:https://github.com/brookshi/Hitchhiker,如果觉得不错请点个Star支持一下,谢谢。