接口测试 自制一款简单的 Bash 脚本 +HTTP 请求工具 +JSON 解析工具组成的测试小工具

数人云 · November 01, 2016 · Last by 黑暗之光 replied at November 16, 2016 · 1996 hits

前方高能,文末有彩蛋 :)

近期,数人云开源一款容器管理工具Crane,Crane
开发过程中,为了保证API的健壮性和稳定性, 开发团队自己造轮子捣鼓了一套适合Crane API测试的小工具。
针对Crane团队只向外输出API的特点, 笔者选择测试工具是秉着以下原则的,

  • 第一, 功能不要太复杂,学习曲线不能太陡, 功能够用就行;
  • 第二, 可编程要好, 最好不要有界面,程序员友好。 经过短时间google, 笔者发现还是自己简单造个轮子比较合适。 于是一款简单的Bash脚本+HTTP 请求工具+JSON解析工具组成的测试小工具雏形出现了。

下面给大家展现这款工具的构成

Bash脚本: 测试工具的粘合剂, 不是Java也不是Python, 用Bash简单易用,功能强大。
Httpie: 一款类似curl的http工具, 不过比curl简单的多, 尤其想发个JSON请求时候, 更简单。
jq: jq是一款命令行解析JSON文本的工具, 支持非常多的语法解析构造重组JSON文本。

Bash脚本无需多讲, 下面依次给大家介绍一下httpie和jq的基本用法

1. 例子说明如何使用httpie

httpie在terminal下的命令是http, 先来几个简单的例子给演示一下用法。

http get http://httpbin.org/get header:header-content

其中, http是命令, get是请求method, http://httpbin.org 是请求地址, httpbin是一个http的测试服务; 用冒号相连的参数代表着HTTP请求头, 用等号连接为请求body中的JSON键和值。 httpie默认的请求为json请求, 所以不用过多指明,header已经加上了Content-Type:application/json。

http支持很多命令行选项, 介绍一个有意思的是 --check-status, check-status是把http response的非200值设置成进程的exit code, 比如:

http post http://httpbin.org/post header:header-content json-key=json-value

http支持很多命令行选项, 介绍一个有意思的是 --check-status, check-status是把http response的非200值设置成进程的exit code, 比如:

如上所示, 请求一个不存在的地址时候进程退出符号变成了4。 我们将大量使用这个feature来判断返回值。

2. 例子说明如何使用jq

下面我们用几个例子介绍一下jq的用法。

上图演示如何提取一个json的key。


如何提取一个嵌套的key。

提取数组中的元素。

篇幅关系我们不过多展示jq的高级功能, 除了基本的解析和构造以外,jq支持大量的filter, 如有兴趣可参考 https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions

3. Crane测试工具的几个场景

场景一: 我期望测试API的HTTP测试的返回状态比如200, 404, 500
首先bash造了几个基本的函数来输出错误, 和判断状态

使用方法

场景二: 登录过程测试

更多的测试例子可参考https://github.com/Dataman-Cloud/crane/tree/master/api_test

至此,一款可用的测试工具出炉了, 虽然很简陋,不过功能恰到好处,非常适合我们的场景, 再也不怕API出错发现不了了。 聪明的同事们把这工具配到了jekins和单元测试一起执行, 出错了还能得到邮件通知, 帅的不行不行的。

同时,数人云容器管理工具Crane期待大家贡献Star&Fork,凡贡献Star并在下方评论的同学,6#,36#,66#可获得《大话APP测试2.0 : 移动互联网产品测试实录》,重复评论和讨论只计算一次噢:)

共收到 17 条回复 时间 点赞

看阅读数挺高的,但评论数为0,我坐沙发算了.不知道#1评论楼主是否也含有一个隐藏奖----.我已经点赞,mark,star了github项目.😀 😀 😀 😀

这个工具不错,简单实用,可以用于接口测试,我用的比较多的是curl,jq格式化json.都还挺好用的.

不错,省了自己去封装了,而且还蛮清晰的

我最近也在想接口测试的时候, 生成的测试用例支持curl+jq的组合. 没想到你们竟然做了尝试了. 不错

#1楼 @langmu 如果十天之内还是没有产生第6个评论,那就送你一本喽:)

#3楼 @seveniruby 谢谢大神夸奖😝

弱弱的问一句,msg命令是啥?我怎么没有搜到linux有这个命令?

#6楼 @zhouhuang msg是个bash函数

#7楼 @shurenyun 是需要安装么?我执行脚本三个地方都报错了,我之前没有用过shell

#5楼 @shurenyun 如果么有广告, 我就加精华帖了 😅

#9楼 @seveniruby 你可以先加,等书送完我就把活动去掉,好不好🙋

#10楼 @shurenyun 名利双收的事情哪有这么多... . 等以后再写好文章吧.

#11楼 @seveniruby 那现在直接撤销吧,还好没有到6个人评论

#12楼 @shurenyun 我是不是在六楼哇

#12楼 @shurenyun 别撤销 .文章重发也不算的. 以后再写好文章吧. 这文章里面的技术还是有改进空间的.

#4楼 @shurenyun 如果十天之内还是没有产生第66个评论,那就送你一本喽:)😀 😀 😀 😀

简单易懂,厉害,对健壮性和稳定性来说,$? == 0就够了。还在纳闷为啥不加精呢?😂

开源的小工具

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up