要写出一个健壮的程序必需要有测试,测试能够保证上线的代码功能符合预期,防止上线后出现莫须有的损失。对于咱们一口气写完的api,匆忙上线每每会致使很糟糕的后果。git
那么怎么去写测试来保证咱们的api上线后是没问题且符合预期的呢?一个后台工程师为了避免背锅,如何去须要保证本身的工做完成得没问题呢?github
注意:咱们这里讨论的是api符合预期,对于客户端ui显示,不在咱们讨论范围内。sql
我以为要作好api测试,至少有如下三点:数据库
简单的说就是,充分理解业务的状况下,编写出完整的测试案例集,而后经过测试案例集验证了返回结果以及存储数据的准确性。这就是保证api正确的核心。json
根据这样的想法,因而编写了一个测试框架 Guardian。Guardian 的使用很是简单,你只须要把你的测试案例信息写成固定的json格式,包括请求信息,预期响应信息,预期的数据信息。而后运行命令,guardian 就会帮你跑完全部测试案例,并验证最终的结果返回输出到终端中。api
使用如这个例子:数组
guardian --tests=./example/tests/entrance.json SUIT: users ================================================= 获取用户 Ok ------------------------------------------------- 响应比对 ✓️ 数据比对 ✓️ ================================================= 修改用户 Ok ------------------------------------------------- 响应比对 ✓️ 数据比对 ✓️ ================================================= Ok SUIT: orders ================================================= 获取订单 Ok ------------------------------------------------- 响应比对 ✓️ 数据比对 ✓️ ================================================= 建立订单 Ok ------------------------------------------------- 响应比对 ✓️ 数据比对 ✓️ ================================================= Ok
选项名 | 子选项名 | 描述 | 格式 | 是否必须 | 例子 |
---|---|---|---|---|---|
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"}] } ] |
具体能够参考:bash