Frank 是一个 HTTP REST API 自动化测试工具, 像 Postman, 但是命令行版

2017-11-23 10:36:23 +08:00
 fuckgfwfuckgfw
# 创建测试用例
$ vim case.frank
url="https://httpbin.org"

// 一个 POST 请求
POST /post Post json data
header["Accept"] = "application/json"
header["Content-Type"] = "application/json"
json.key0 = "value0"
json.key1 = "value1"
list=[]
list.push("value3")
list.push("value4")
json.key2 = list

Response
must(status==200)
j = JSON.parse(body)
myip = j.origin // 创建个新变量

// 一个 GET 请求
GET /etag/:myip Just a GET request
query.key0 = myip // 使用之前创建的变量

Response
must(status==200)
# 运行测试用例
$ frank

Github: https://github.com/txthinking/frank

3539 次点击
所在节点    分享创造
16 条回复
fuckgfwfuckgfw
2017-11-23 10:50:38 +08:00
喜欢 Cli 工具的 Linux 和 MacOS 同学可以一叙
xlvecle
2017-11-23 11:00:34 +08:00
有没有和 curl 或者 httpie 的对比
fuckgfwfuckgfw
2017-11-23 11:08:23 +08:00
主要想哪方面的对比
xwhxbg
2017-11-23 11:14:08 +08:00
https://github.com/marcusolsson/tui-go/blob/master/example/http/screenshot.png

这个才叫类似 postman 吧。。。。你这还要写脚本呢
fuckgfwfuckgfw
2017-11-23 11:14:26 +08:00
### 一开始测试 API,自己是写 curl 的 wrapper。

类似这样 api.sh
```
...
for((i=1;i<=$#;i++))
do
a=$(eval echo \$$i)
# method
if [ $i -eq 1 ]
then
method=$a
case $a in
'get')
m='-G'
;;
'post')
m='-X POST'
;;
'put')
m='-X PUT'
;;
'delete')
m='-X DELETE'
;;
esac
continue
fi
...
```
慢慢的发现还是不太方便

### 于是就用 Postman MacOS Client

但是请求经常卡住,而且不太习惯 GUI 总得点来点去

### 于是 Frank 就出现了

写一个文本,然后自动运行,check
fuckgfwfuckgfw
2017-11-23 11:15:38 +08:00
@xwhxbg You are right.
gstqc
2017-11-23 11:25:18 +08:00
感觉 Python + requests 封装一下,功能、便捷性、可扩展性都更好……

命令行的话,还是写单元测试和回归测试比较靠谱
xionger
2017-11-23 11:30:50 +08:00
JS 语法,不错
iyaozhen
2017-11-23 11:35:49 +08:00
这样的话有个问题,有些业务逻辑的接口不好写吧。比如接口间依赖,需要生成 token 啥的
iyaozhen
2017-11-23 11:37:07 +08:00
@gstqc 我就是这样搞的,实际感觉还行
https://cn.v2ex.com/t/398010#reply6
fuckgfwfuckgfw
2017-11-23 12:32:44 +08:00
@xwhxbg GUI 或者 这个 TUI, 还是 CLI, 看自己习惯吧
xionger
2017-11-23 12:35:28 +08:00
@iyaozhen

正在用,可以这样

POST /api/auth/code 登录发送验证码
header["Accept"] = "application/json"
header["Content-Type"] = "application/json"
json.Mobile = "+8613800138008"

Response
must(status==200)
j = JSON.parse(body)
_Token = j._Token

POST /api/auth 登录
header["Accept"] = "application/json"
header["Content-Type"] = "application/json"
json.Mobile = "+8613800138008"
json._Token = _Token
json._Code = "1111"

Response
must(status==200)
weakish
2017-11-23 12:53:48 +08:00
IntelliJ 也有类似的功能,还可以直接把请求什么的写文件,批量跑。
fuckgfwfuckgfw
2017-11-23 13:00:06 +08:00
@weakish 嗯 属于 IDE。
这个算是给喜欢在纯命令行下工作的同学一个选择吧。
fuckgfwfuckgfw
2017-11-23 13:02:02 +08:00
还可以生成根据 case 文件自动生成 markdown 接口文档

```
# 自动生成 Markdown 接口文档
$ frank -m > api.md
```
fuckgfwfuckgfw
2017-11-24 20:51:35 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/408783

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX