开源测试工具 [开源] API 接口测试工具 , v0.8 更新 - 自动化测试结果统计

brookshi · 2017年08月30日 · 最后由 wjstesting 回复于 2018年06月09日 · 1767 次阅读
本帖已被设为精华帖!

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

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

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

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

自动化测试的统计视图

Schedule默认展示的视图是每次跑Collection的结果,这个表可以很方便看到每次测试的结果,有哪些成功,有哪些失败,失败的response,数据对比的结果等。 但是有时我们可能希望看到Collection下面每个请求在这一段时间内的运行状况,哪些request比较稳定,哪些会经常有问题,然后改进。

所以这次把自动化测试后每个请求的统计视图做出来了。

exculde depredated request选项, 默认是true,如果false的话会把曾经在这个Collection现在已经被删掉的记录也包含进来。

一次跑多个Schedule

有时做代码上做了更改之后想跑下这些测试,每个Schedule都点一下的话还是略显麻烦,现在给Schedule前面加了个checkbox,勾上的话会有一个Run Selected Schedules的按钮在上面显示出来,点这个按钮会一次跑所有勾上的Schedule,方便使用。

中断压力测试

因为可能在压力测试过程中服务端已经暴露出了问题,不需要再跑下去,这时可以停止当前压力测试。

Step by step安装

Hitchhiker的部署一直是个头痛的问题,虽然支持docker很方便的部署,不过并不是所有人都会或者说愿意使用docker,毕竟很大一部分受众是测试,需要从他们角度来思考下,怎样简化部署。

这次先把包打好了,然后加了个setup的脚本在服务端运行,通过浏览器就可以完成一步一步部署了。

其他小功能及bug fix

  1. Schedule表某些列支持过滤。

  2. Duplicate出来的environment的改动变影响到原始的environment

后续计划

短期内还是以继续增加测试新功能为主,比如基于UI的断言测试等。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 65 条回复 时间 点赞

完全仿照Postman写的?

意义何在呀

完成度挺高的一个轻量级接口测试工具,对于简单的单接口测试来说还是挺方便的。

项目已 star

chenhengjie123 将本帖设为了精华贴 09月01日 00:18


拼写有错误啊,😂

_long 回复

谢谢兄台提醒 :)

chenhengjie123 回复

谢谢

lxs1314520 回复

还是有些意义的,比如team一起协作维护API,比如不同环境的数据对比,对Regression Test比较有用,再比如有些公司不想API数据存到别人的服务器上

Goodboy 回复

UI上是模仿Postman的,因为Postman用起来最舒服,功能上还是有不少差异化的

支持下,希望把性能测试快点加进来,哇哈哈

mzmb 回复

谢谢支持,性能测试在开发中了

虽然跟postman类似,还是希望这个做些postman pro的功能😄

xiaobeiying 回复

是的,目前已经具备pro的基本功能了

body没有表单格式的啊

leo126 回复

暂时还不支持,不过在计划中,现阶段需要自己添加content-type以及body

postman已有,为啥要重写?
postman + newman 还可以写API test case在jenkins上跑

532589730 回复

很多人问了,也说了很多次:

  1. 不同环境的数据对比,这点很重要,很多api的返回数据并不是固定的,不是时间返回不同的数据,光用test校验解决不了动态数据的准确性问题,所以要有个基准,比如用线上的数据做benchmark,来进行比对,这也是我们QA想要的
  2. 多人协作,这个postman pro倒是有,不过不是很方便且按人头收费
  3. 本地部署保证数据安全性,当然这块大多数人是不在意的,也有不少在意的,比如金融公司之类 另外,我开源,想加功能随便加,2周一个版本,明天会发布一个重要功能,参数化请求,这也是postman没有的。
brookshi 回复

I C,
thanks for your sharing.
第3点,倒是挺符合我的观点的,本地部署。
期待更精彩的功能。

brookshi 回复

明天会发布一个重要功能,参数化请求,这也是postman没有的。

postman 可以参数化。
试了下Hatchhiker, docker版的,v0.1.3,参数化是什么格式?

使用postman的参数化格式不行,在url上,json里面的body,parameter里也不行
postman是{{parameter_name}}

532589730 回复

postman那个是环境变量,Hitchhiker也支持环境变量,另外还支持运行时变量,用来解决API之前依赖关系的,比如B依赖A的返回值,就可以在A的test里写一个变量获取值,在B里用这个变量。 这里所谓的参数化请求是指与环境无关的,请求里的可变点,请求通常有很多参数,比如query string, body里的变化点等,这些参数可能会有不止一个值,每个都要覆盖的话需要写很多request,用参数化请求就一个request就可以了。其实上面文章里写得比较清楚了,可以再看下,特别是那个gif,展示了参数化请求的用处。

v0.2发布,支持压力测试

v0.3发布,支持自动同步更新

继续支持 功能越来越强大的

Innocence 回复

谢谢Innocence兄支持

v0.4发布,超强脚本功能,支持Pre Request Script,使用require调用任何上传的js库

666, 0.4开始完全具备api单一接口测试全覆盖的能力了

已star 做的确实好。

是用js 写的么

推荐一下eoLinker,也是很好用的!

shenkai600 回复

嗯,接口测试和自动化这块差不多了,压力测试有待改进

谢谢支持

qjcslg 回复

typescript,当然也可以说是js 😄

wardennn 回复

谢谢推荐,确实不错,不过个人认为接口在云上测试还是有些短处,比如开发或测试环境未必对外网开放,信息安全等

这个目前版本是不是还没有对单个接口的历史执行记录?
还是我没有找到呢?

michael_wang 回复

这个确实还没有,现在同事确实也有这样的需求,后面会加进来

brookshi 回复

那目前也有在线下自己部署的版本,把数据上传到自己的服务器上,能确保数据安全,开源版本是:https://www.eolinker.com/#/os/download,你可以看看

services:
  hitchhiker_online:
    image: brookshi/hitchhiker:v0.4.2
    container_name: hitchhiker_online
    environment:
      - HITCHHIKER_DB_HOST=hitchhiker-mysql
      - HITCHHIKER_APP_HOST=http://localhost:8080/ # should change in run time.
    ports:
      - "8080:8080"
      - "11010:11010"
    #volumes:
    #  - /my/hitchhiker/public:/usr/src/Hitchhiker/build/public
    links:
      - hitchhiker-mysql:hitchhiker-mysql

请教下,主机的端口必须和 container 的端口一致吗?
我尝试使用不同的端口,服务启动后,页面能打开,但是无法登录、注册

michael_wang 回复

应该是不用的,只是端口映射,当然HITCHHIKER_APP_HOST的端口必须要和容器的端口保持一致。
无法登录注册可否看下浏览器的控制台。

brookshi 回复

HITCHHIKER_APP_HOST=http://localhost:8080/
ports:
- "8081:8080"

端口号这样配置,理论上这样应该是正确的吧?

brookshi 回复

下面是控制台报错信息:

WebSocket connection to 'ws://192.168.31.148:8080/stresstest' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
value @ stress.ts:34
i @ store.ts:27
(anonymous) @ store.ts:40
t @ bootstrap 6e1377ac9cb7affffdb3:19
(anonymous) @ index.tsx:4
t @ bootstrap 6e1377ac9cb7affffdb3:19
(anonymous) @ main.dc94fc45.js:71
t @ bootstrap 6e1377ac9cb7affffdb3:19
(anonymous) @ bootstrap 6e1377ac9cb7affffdb3:39
(anonymous) @ bootstrap 6e1377ac9cb7affffdb3:39
stress.ts:59 stress test server error Event {isTrusted: true, type: "error", target: WebSocket, currentTarget: WebSocket, eventPhase: 2, …}
socket.onerror @ stress.ts:59
stress.ts:56 socket closed, stress test server error
socket.onclose @ stress.ts:56
request_manager.ts:48 OPTIONS http://192.168.31.148:8080/api/user/me net::ERR_CONNECTION_REFUSED
value @ request_manager.ts:48
value @ request_manager.ts:32
S @ proc.js:506
w @ proc.js:434
u @ proc.js:316
n @ proc.js:388
(anonymous) @ proc.js:492
n @ scheduler.js:26
a @ scheduler.js:67
r @ scheduler.js:40
(anonymous) @ channel.js:193
t @ channel.js:38
(anonymous) @ middleware.js:73
getUserInfo @ index.tsx:160
value @ loading_screen.tsx:31
e.notifyAll @ CallbackQueue.js:76
close @ ReactReconcileTransaction.js:80
closeAll @ Transaction.js:206
perform @ Transaction.js:153
s @ ReactMount.js:126
perform @ Transaction.js:140
batchedUpdates @ ReactDefaultBatchingStrategy.js:62
o @ ReactUpdates.js:97
_renderNewRootComponent @ ReactMount.js:320
_renderSubtreeIntoContainer @ ReactMount.js:401
render @ ReactMount.js:422
(anonymous) @ index.tsx:10
t @ bootstrap 6e1377ac9cb7affffdb3:19
(anonymous) @ main.dc94fc45.js:71
t @ bootstrap 6e1377ac9cb7affffdb3:19
(anonymous) @ bootstrap 6e1377ac9cb7affffdb3:39
(anonymous) @ bootstrap 6e1377ac9cb7affffdb3:39
michael_wang 回复

:)看起来像是在调试代码,因为看到了ts编译前的文件。
端口是这么写的,不过从信息看起来有个问题,压力测试的端口也用了8080,这样会有问题。
另外yaml里写的写的是localhost:8080,然后信息里看到的是ip: 192.168.31.148,不 一致可能会导致跨域问题,最好还是统一用ip比较好。

如果使用 docker 部署,以后要升级了版本,是直接修改下 docker-compose.yml 文件中的版本号,然后启动就行了吗?

brookshi 回复

我使用时都是写的 IP 地址的。
这个问题先这样吧,主机和容器端口号一致的话能用。之后使用过程中再有问题的话再分析吧。

michael_wang 回复

是的,改下版本号再sudo docker-compose up -d 就可以了

michael_wang 回复

好的,有问题或需求欢迎到github上提issue

注册和登录都遇到这个错

使用 docker 的部署方式,链接服务器上的现有的 mysql,现在的版本能实现吗?

taurusbb 回复

看下浏览器控制台的错误信息,可能是跨域,也可能是数据库没配好

michael_wang 回复

可以的,数据库部分参考代码部署方式,docker-compose.yml需要改下:

version: '2'
services:
  hitchhiker:
    image: brookshi/hitchhiker:v0.5
    container_name: hitchhiker
    environment:
      - HITCHHIKER_DB_HOST=hitchhiker-mysql
      #  数据库的环境变量参数
      - HITCHHIKER_APP_HOST=http://localhost:8080/ 
    ports:
      - "8080:8080"

数据库相关的环境变量参考:配置

brookshi 回复

感谢感谢,可以连上,能用
Attaching to hitchhiker ing 以为没成功呢,后来试了下,再浏览器中是可以用的了

➜  hitchhiker sudo docker-compose up
Recreating hitchhiker ...
Recreating hitchhiker ... done
Attaching to hitchhiker
michael_wang 回复

不客气, attach这个确实有点怪,不过docker-compose up不加 -d 关掉终端不会结束吗

brookshi 回复

目前还处于再本地 Mac 上调试阶段,没有正式部署呢
之后部署到 Linux 上去,可能还会遇到问题

michael_wang 回复

应该还好吧, www.hitchhiker-api.com 就是部署在linux上的,没什么问题

v0.5更新:改进细节

再 Test 里面,用 hitchhiker 能读取 HITCHHIKER_APP_HOST、HITCHHIKER_DB_USERNAME、MYSQL_ROOT_PASSWORD这些环境变量吗?

或者读取 Environments 下设置的变量。

尝试了 {{}} 这种格式,Test 下不起作用的。

michael_wang 回复

找到了:
hitchhiker.environment

michael_wang 回复

要读取HITCHHIKER_APP_HOST、HITCHHIKER_DB_USERNAME、MYSQL_ROOT_PASSWORD这些变量干嘛呢?
hitchhiker.environment只是表示当前环境,Environment下设置的变量选择右上角的环境后可以用{{key}}直接访问到

我们的测试,预上线,生产环境的域名是相同的。
环境之间的切换是通过切换 hosts 来实现的,而且是禁止IP地址直接访问的。
因此,我是启动了三个容器,分别绑定不同的host,设置不同的端口,指向到同一个数据库,来实现的数据共享和环境切换的。

那么不同环境请求的url中的参数、返回值都是可能有差异的。
之前是想在启动docker时分别设置一个env变量,并设置不同环境的值,然后前台读取docker中的这和变量来区分。

详细读过文档后,发现有hitchhiker.environment方法可以读取,可以解决这个问题

brookshi 回复

Test 下面不支持{{key}}这种用法

michael_wang 回复

通过host更改的环境确实就比较麻烦了,也亏你想到这个办法。不过还是觉得不是很好,有很多约束,特别是对测试,建议还是搞几个二级域名做这些事比较好。我们公司之前也是用host,后来都改成域名了。
Test下面的变量确实有点问题,我本意是要支持来的,应该说是一个bug吧,下个版本会修正。现在如果想用的Environment下面的变量的话可以在Pre Request Script里写到运行时变量里,然后这个变量在Test里就可以直接使用{{host}}。

hitchhiker.setEnvVariable("host", "{{host}}")
michael_wang 回复

另外,有什么建议或者想改进的觉得不够方便的都可以去github提issue,非常欢迎。

brookshi 回复

好的好的

v0.6 更新:改进压力测试

v0.7更新 - Schedule的对比diff

v0.8 更新 - 自动化测试结果统计

有没有QQ群呢?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册