V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brookshi
V2EX  ›  程序员

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

  •  
  •   brookshi · 2017-12-19 07:58:11 +08:00 · 3512 次点击
    这是一个创建于 2515 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持 Schedule, 数据对比,压力测试,支持上传脚本定制请求,可以轻松部署到本地,和你的 team 成员一起协作测试 Api。

    详细介绍请看: http://doc.hitchhiker-api.com/cn/introduction.html

    在线体验: http://www.hitchhiker-api.com/, 可以用 try without login 来免登录使用 (在线演示不支持压力测试和上传 js,虚拟机单核的,撑不住)。

    下面来看看这次的更新:

    重写压力测试

    Hitchhiker 之前的压力测试节点是一个基于 Go 的 Hitchhiker-Node,早期阶段 Hitchhiker 的脚本功能并不复杂,不支持上传 js 库,async/await,以及文件读取保存等,而 Go 的高并发非常有吸引力,做了下调研后,使用 otto 做为 js 解释器,是可以满足那时的脚本运行逻辑的,所以选用了 Go 做压力测试的节点,在早期是够用的。

    后来 Hitchhiker 开始支持更多复杂的脚本功能,比如自定义 js 库,因为 npm 里的很多 js 库都基于 Nodejs,而目前的 Go 以及 otto 满足不了这种需求,除非再加一个 Node 进程来执行脚本,然而这样又过于复杂,还不如直接使用 Nodejs 来写,所以综合考虑后还是使用 Nodejs 重写了压力测试点。

    重写之后的压力测试是集成在 Server 一起的,也就是不用再部署其他的程序,而且支持现有所有的脚本功能。

    两种方法的优劣:

    Go 的高并发以及 goroutine 使得写起这种压力程序时非常之轻松,性能也很有保障,缺点还是在于 Hitchhiker 的脚本是 js,所以 Go 执行这些脚本比较费劲,也因此目前基于 Go 的压力点不支持 Hitchiker 脚本的高级特性。

    Nodejs 写这种压力测试程序就比较费劲,需要自己管理多进程,以及进程间通信,还没法精确控制 1 秒的请求数,也就是压力测试的参数 QPS 对 Nodejs 的压力点是没用的,不过好在 Hitchhiker Server 也是基于 Nodejs 的,所以可以重用请求处理的逻辑,而且 Api 的压力测试本质上是高 IO 的,所以 Nodejs 的性能也很不错。不过 Nodejs 的程序目前还不支持分布式,稍后会加上去,主体功能已经完成。

    稍微比较了下两者的性能,在单机上基本旗鼓相当。

    目前是以基于 Nodejs 的版本为默认的,也可以选用 Go 的,不过 Go 的暂时会停止维护,除非 Go 有了基于 Node 的 js 解释器,那时再考虑移回来。

    图片

    重新整理请求流程

    之前的请求流程有点乱,导致有些问题不容易发现,比如环境变量没应用到 Test 脚本里,所以在改这个 bug 时重构了下代码,把流程理清下:

    图片

    response 展示图片

    这个是有朋友在 github 上提出来的,之前我是想不到有人会用这个工具来请求图片,所以也没关注这块,不过有人使用,说明有需求(不止一人),所以实现了这个功能,如果 response header 有image/*的话就直接展示图片而不是图片内容(一片乱码)

    修改 Bug

    1. global function 里的内容在切换模块后会消失
    2. schedule 里的请求返回是图片时,会造成 JSON.parse 失败,导致异常,改了图片只保存链接,不保存内容
    3. 浏览器里压力测试的 websocket 有时会失败,加了重试
    4. schedule 的定时跑的记录会有 1 分钟左右的误差
    5. 改请求的 method 时 name 会被重置

    后续计划

    短期内还是以增加测试新功能为主,比如 curl 生成请求,请求生成代码等,长期的一个是文档,一个是 Mock,开始根据需求来决定下一个模块。

    Github: https://github.com/brookshi/Hitchhiker, 觉得不错的话麻烦 Star 支持下,谢谢。

    16 条回复    2017-12-19 18:57:06 +08:00
    torbrowserbridge
        1
    torbrowserbridge  
       2017-12-19 07:59:50 +08:00 via Android   ❤️ 1
    马克
    naiba
        2
    naiba  
       2017-12-19 08:30:40 +08:00 via Android   ❤️ 1
    界面做的不错就仔细看了一下,确实不错。
    Keyes
        3
    Keyes  
       2017-12-19 08:47:17 +08:00 via Android   ❤️ 1
    好东西,到公司 star
    LaudOak
        4
    LaudOak  
       2017-12-19 09:12:12 +08:00   ❤️ 1
    不错,马
    lihuazhang
        5
    lihuazhang  
       2017-12-19 09:20:28 +08:00 via iPhone   ❤️ 1
    老板来 testerhome 介绍下呀。
    yuhuan66666
        6
    yuhuan66666  
       2017-12-19 10:14:07 +08:00   ❤️ 1
    好东西 好东西
    seaswalker
        7
    seaswalker  
       2017-12-19 10:29:36 +08:00   ❤️ 1
    长得和 postman 很像
    blueskit
        8
    blueskit  
       2017-12-19 10:45:00 +08:00 via Android   ❤️ 1
    记录下,以后来看。不知道与 postman 有何差别
    brookshi
        9
    brookshi  
    OP
       2017-12-19 12:48:34 +08:00
    brookshi
        10
    brookshi  
    OP
       2017-12-19 12:49:00 +08:00
    @lihuazhang testerhome 早就有了哦,一直在更新:[https://testerhome.com/topics/9884]( https://testerhome.com/topics/9884)
    brookshi
        11
    brookshi  
    OP
       2017-12-19 12:50:00 +08:00
    @seaswalker
    @blueskit
    UI 上是模仿 postman 的,功能上的差别有详细列出,可以参考文档: http://doc.hitchhiker-api.com/cn/introduction.html
    sensui7
        12
    sensui7  
       2017-12-19 12:56:18 +08:00
    GPL-2.0 + Commercial use prohibited
    mikuazusa
        13
    mikuazusa  
       2017-12-19 12:57:43 +08:00   ❤️ 1
    点赞!很稳定可靠!迭代开发很高效
    blackfire
        14
    blackfire  
       2017-12-19 13:15:14 +08:00   ❤️ 1
    最近在弄 XXL 和 RAP,先插个眼,一会研究下
    brookshi
        15
    brookshi  
    OP
       2017-12-19 18:56:38 +08:00
    @mikuazusa 多谢兄台多次捧场了:)
    brookshi
        16
    brookshi  
    OP
       2017-12-19 18:57:06 +08:00
    @blackfire 嗯,欢迎使用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:11 · PVG 21:11 · LAX 05:11 · JFK 08:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.