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

开源 API 集成测试工具 Hitchhiker v0.2 更新 - 压力测试

  •  
  •   brookshi · 2017-10-16 07:33:59 +08:00 · 4555 次点击
    这是一个创建于 2585 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Hitchhiker 是一款开源的 Restful Api 集成测试工具,支持 Schedule, 数据对比,压力测试,可以轻松部署到本地,和你的 team 成员一起管理 Api。

    详细介绍请看: http://www.cnblogs.com/brookshi/p/7440663.html

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

    这次发布的算是一个大版本,主要增加一个重磅功能 - 压力测试:

    压力测试

    双 11 快到了,经常会有整点秒杀的活动,秒杀就是一个典型的压力场景,所以建了一个简单的 Case 来表现这种场景,来展示 Hitchhiker 压力测试功能:

    Hitchhiker 使用一个基于 Golang 的分布式压力节点,这是一个单独的项目:Hitchhiker-Node。得益于 Golang 的交叉编译,轻松跨平台生成文件,所以只有一个可执行文件和一个配置文件,没有环境依赖,直接执行。

    使用时在release 页面先选择对应平台的 zip 文件下载下来,解压后会有两个文件,一个可执行文件和一个配置文件 config.json,打开配置文件,把Address的值从 localhost 改为部署 Hitchhiker 机器的 ip,然后再执行 Hitchhiker-Node 文件,这样就弄好了一个压力点。

    如果想压出很大的请求就可以考虑部署到多台机器上,Hitchhiker 会自动根据机器的 CPU 核数来分配任务,当然,一般情况下直接部署到 Hitchhiker 同一台机器就够用了。

    压力测试用的也是CollectionRequest,可以选择性的挑出合适的Request用来做 Case,压力测试的参数有:

    • Repeat: 运行整套请求的次数
    • Concurrency: 并发个数
    • QPS: 1 秒内限制单个节点请求的个数,默认为 0,即没有限制
    • Timeout: 请求的超时时间设置,单位为秒,默认为 0,即没有超时设置
    • Keeplive: 设置请求是否使用 Keeplive

    运行压力测试任务时会实时显示运行状态,包括节点的状态(闪烁表示正在工作),当前任务及任务的数量,下方有三个图表,分别表示

    1. 当前的运行进度,包括完成的数量及 TPS
    2. 各个Request的请求消耗时间,包括 DNS, Connect, Request, Min, Max 这五个
    3. 请求失败的状态,包括 No Response, Server Error(500), Test 失败 这三种情况

    其他改动

    1. 源码部署时支持改端口,之前固定用的 8080,要改需要改 js 文件,现在只需在部署文件时改就好了。

    2. 改正 Schedule 空跑时的异常。

    后续计划

    压力测试在国庆后总算做出来,后来又花了一些时间来测试,0.2 这个版本算是告一段落。 接下来版本计划要改下,涉及新功能的都是大版本,bug 是小版本。 下个模块功能是支持 API 文档,希望能是一个自定义的,所见即所得,支持导出常用格式的 API 文档系统。 小功能和 bug 会持续改进。

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

    21 条回复    2017-10-17 12:45:26 +08:00
    beyondsoft
        1
    beyondsoft  
       2017-10-16 08:02:01 +08:00   ❤️ 1
    看着不错! 支持一下!
    LensAclrtn
        2
    LensAclrtn  
       2017-10-16 08:20:18 +08:00   ❤️ 1
    看着还行,前排马克
    GuryYu
        3
    GuryYu  
       2017-10-16 08:35:23 +08:00   ❤️ 1
    看上去挺好的, 支持
    lxrmido
        4
    lxrmido  
       2017-10-16 08:52:54 +08:00   ❤️ 1
    已 star
    jpyl0423
        5
    jpyl0423  
       2017-10-16 09:01:09 +08:00   ❤️ 1
    正好要做压力测试, 已 star
    a1044634486
        6
    a1044634486  
       2017-10-16 09:52:57 +08:00   ❤️ 1
    已 star,默默问下,用公有云机器装这个,测我的站点,会不会被封公有云的机器。
    wuliao49
        7
    wuliao49  
       2017-10-16 09:53:17 +08:00   ❤️ 1
    这个和 AB 相比的话 有什么区别呢
    ragnaroks
        8
    ragnaroks  
       2017-10-16 11:13:26 +08:00   ❤️ 1
    能否导出文档?
    itaotao
        9
    itaotao  
       2017-10-16 12:00:31 +08:00   ❤️ 1
    跟 postman 界面和功能是高度相似啊
    YzSama
        10
    YzSama  
       2017-10-16 12:02:10 +08:00   ❤️ 1
    哈哈,基本全都失败
    mikuazusa
        11
    mikuazusa  
       2017-10-16 12:15:03 +08:00   ❤️ 1
    TypeError: Network request failed
    本地 Windows 开 docker,try without login 出错
    evlos
        12
    evlos  
       2017-10-16 14:02:25 +08:00 via iPhone   ❤️ 1
    不错,赞
    brookshi
        13
    brookshi  
    OP
       2017-10-16 20:52:13 +08:00   ❤️ 1
    @a1044634486
    最多会被你站点那边封公有云机器
    brookshi
        14
    brookshi  
    OP
       2017-10-16 20:54:00 +08:00
    @wuliao49
    多压力节点,多请求模拟整套流程,图表展示
    brookshi
        15
    brookshi  
    OP
       2017-10-16 20:55:01 +08:00
    @ragnaroks
    是 API 文档还是压力测试结果文档呢,API 文档还在计划中,压力测试结果貌似也没什么好导出的
    brookshi
        16
    brookshi  
    OP
       2017-10-16 20:57:29 +08:00
    @itaotao
    用过一些测试工具,就 Postman 比较易用,但说到功能上高度相似这点是不对的,只有建立请求这块是相似的,这里多人协作,原生支持 Schedule, 数据对比,压力测试,参数化请求,本地部署,Postman 可没有这些
    brookshi
        17
    brookshi  
    OP
       2017-10-16 21:00:34 +08:00
    @mikuazusa
    windows 下的 docker 经常有些问题,可以看下浏览器控制台下的具体错误
    wwek
        18
    wwek  
       2017-10-16 22:39:33 +08:00   ❤️ 1
    大家会不会觉得域名不好记
    andyangyu
        19
    andyangyu  
       2017-10-17 10:30:00 +08:00   ❤️ 1
    0|index | [2017-10-17 01:59:21.631] [ERROR] console - (node:47) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: connect ECONNREFUSED 172.18.0.2:3306
    0|index | [2017-10-17 01:59:21.632] [ERROR] console - (node:47) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.


    mac docker 版本,注册不了,try without login 也进不去
    brookshi
        20
    brookshi  
    OP
       2017-10-17 12:42:01 +08:00
    @wwek
    哈哈,这个是演示地址,域名不太重要,知道 github 地址就好了
    brookshi
        21
    brookshi  
    OP
       2017-10-17 12:45:26 +08:00
    @andyangyu
    看起来是数据库没连上,sudo docker ps 看看数据库的容器是否运行起来,有运行的话用 sudo docker exec -it hitchhiker bash 来进到容器里执行 pm2 restart index 试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5737 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 03:18 · PVG 11:18 · LAX 19:18 · JFK 22:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.