要写出一个健壮的程序必须要有测试,测试可以保证上线的代码功能符合预期,防止上线后出现莫须有的损失。对于我们一口气写完的api,匆忙上线往往会导致很糟糕的后果。

那么怎么去写测试来保证我们的api上线后是没问题且符合预期的呢?一个后台工程师为了不背锅,如何去需要保证自己的工作完成得没问题呢?

注意:我们这里讨论的是api符合预期,对于客户端ui显示,不在我们讨论范围内。

我觉得要做好api测试,至少有以下三点:

  1. 测试案例的返回结果符合预期
  2. 测试案例覆盖了所有代码条件
  3. 测试案例的结果数据符合预期

简单的说就是,充分理解业务的情况下,编写出完整的测试案例集,然后通过测试案例集验证了返回结果以及存储数据的准确性。这就是保证api正确的核心。

根据这样的想法,于是编写了一个测试框架 Guardian。Guardian 的使用非常简单,你只需要把你的测试案例信息写成固定的json格式,包括请求信息,预期响应信息,预期的数据信息。然后运行命令,guardian 就会帮你跑完所有测试案例,并验证最终的结果返回输出到终端中。

使用如这个例子:

guardian --tests=./example/tests/entrance.json

SUIT:  users
=================================================
获取用户                                    Ok
-------------------------------------------------
响应比对                                    ✓️
数据比对                                    ✓️
=================================================
修改用户                                    Ok
-------------------------------------------------
响应比对                                    ✓️
数据比对                                    ✓️
=================================================

Ok

SUIT:  orders
=================================================
获取订单                                    Ok
-------------------------------------------------
响应比对                                    ✓️
数据比对                                    ✓️
=================================================
创建订单                                    Ok
-------------------------------------------------
响应比对                                    ✓️
数据比对                                    ✓️
=================================================

Ok

json文件格式

入口文件

选项名 子选项名 描述 格式 是否必须 例子
database port 端口 字符串 3306
user 用户 字符串 root
password 密码 字符串 root
charset 字符集 字符串 utf8
host 地址 字符串 127.0.0.1
database 数据库名 字符串 guardian
tables 案例集 对象 {
"users": [ "users/get.json", "users/post.json" ],
"orders": ["orders/get.json","orders/post.json"]
}
vars 全局变量 对象 { "host": "http://127.0.0.1:1235" }
debug 设置为true则会
打印所有返回结果
与数据库查询结果
布尔 false

测试案例

选项名 子选项名 描述 格式 是否必须 例子
info title 标题 字符串 这是一个标题
description 描述 字符串 这是一个描述
concurrent 并发数 整数 1
request url url 字符串 {{host}}/user
method 方法有:json, get, post, delete, options, formget, formpost 字符串 get
params 参数 对象或数组 {"id": 1}
header 头部 对象 {"token": "1231313"}
response body 返回body数据,对象中可以有
通配符,如"*",表示不匹配
字符串或对象 123
header 头部 对象 {"token": "1231313"}
data 验证数据 数组 [
{
"sql": "select name from user where id = 1",
"result": [{"name": "jack"}]
}
]

具体可以参考:


cg33
114 声望25 粉丝