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

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

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

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 : 移动互联网产品测试实录》,重复评论和讨论只计算一次噢:)


↙↙↙阅读原文可查看相关链接,并与作者交流