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

动手造轮 | 一款 Bash 脚本 +HTTP 请求工具 +JSON 解析工具组成的测试小工具

  •  
  •   dataman · 2016-11-03 12:04:53 +08:00 · 3916 次点击
    这是一个创建于 2732 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数人云开源一款容器管理工具Crane, Crane 开发过程中,为了保证 API 的健壮性和稳定性, 数人云开发团队自制了一套适合 Crane API 测试的小工具。它也适用于其他接口测试,小数发现很多朋友对它感兴趣,就勤劳地搬运过来,希望能为大家提供一个参考和思路。

    针对 Crane 团队只向外输出 API 的特点, 选择测试工具是秉着以下原则的:

    • 第一, 功能不要太复杂,学习曲线不能太陡, 功能够用就行;
    • 第二, 可编程要好, 最好不要有界面,程序员友好。

    于是一款简单的 Bash 脚本+HTTP 请求工具+JSON 解析工具组成的测试小工具雏形出现了。

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

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

    下面依次给大家介绍一下 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 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 的用法。

    上图演示如何提取一个 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 出错发现不了了。 聪明的同事们把这工具配到了 jenkins 和单元测试一起执行, 出错了还能得到邮件通知, 酷极了。

    2 条回复    2016-11-04 20:07:22 +08:00
    defunct9
        1
    defunct9  
       2016-11-03 17:46:13 +08:00
    图片的问题
    knightdf
        2
    knightdf  
       2016-11-04 20:07:22 +08:00
    curl + jq 不就行了..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   921 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:46 · PVG 03:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.