Hurl 是一款定义脚本,用于测试 HTTP 请求的工具,提供了命令工具 helix 和格式化工具 hurlfmt。
简单的 Hurl 文件
创建文件 get.hurl
, 追加下面的内容。
# test httpbin.org
GET https://httpbin/org/get
# 响应
HTTP/2 200 # 判定响应
[Asserts] # 判定内容
jsonpath "$.url" == "https://httpbin/org/get"
使用 hurl
命令执行脚本,具体可以对比下面的四种执行方式。
# 请求接口,默认返回响应的主体
hurl get.hurl
# 测试接口,只有 `[Asserts]` 部分的判定通过后 sucess
hurl --test get.hurl
# 测试接口,显示请求的详情
hurl --test -v get.hurl
# 测试接口,显示请求的详情, 显示响应的详情
hurl --test --very-verbose get.hurl
其中使用 --test
参数的时候,会返回 [Asserts]
断言结果。
❯ hurl --test get.hurl
get.hurl: Running [1/1]
get.hurl: Success (1 request(s) in 2238 ms)
--------------------------------------------------------------------------------
Executed files: 1
Succeeded files: 1 (100.0%)
Failed files: 0 (0.0%)
Duration: 2240 ms
hurl 命令
使用 hurl -h
查看命令详情
常用的参数
--cookie <FILE>
-o
--output <FILE>
输出结果到文件-x
--proxy <PROTOCOL>
使用代理--test
测试模式-u
--user <USER:PASSWORD>
basic 验证--variable <NAME=VALUE>
变量--variables-file <FILE>
变量文件-v
--verbose
详情--very-verbose
包括响应详情
Hurl 脚本
Hurl 文件默认使用utf-8。
hurl 的脚本是由一个或多个请求(entry)组成,每个请求的结构大概是由下面几个元素组成。
- 注释说明, 以
#
开始标记注释 - 接口请求 Request
- query
- header
- 参数 [Options]
- 接口响应 Response
- 捕捉数据 [Captures]
- 判定数据 [Asserts]
- 过滤器支持 [Filters]
条目 Entry
hurl 文件多个 Entry 组成,这些请求条目在执行的时候共用同个 cookies 以及变量等环境。
大概结构是:
# Request 请求
# Method URL Query
PUT https://sample.net
# headers
x-powered-by: Express
# 参数
[Options]
...
# Query
[QueryStringParams]
...
# 表单
[FormParams]
...
# 身份验证
[BasicAuth]
...
[Cookies]
...
# body
{
"type": "FOO",
"value": 356789,
"ordered": true,
"index": 10
}
# Response 响应处理
# o code
HTTP/2 200
# 捕捉变量
[Captures]
...
# 断言测试
[Asserts]
...
下面我们详细介绍这些结构。
比如登录验证:
# Create a new job
GET https://httpbin.org/basic-auth/user1/passwd1
Content-Type: application/json
[Options]
very-verbose: true
[BasicAuth]
user1: passwd1
HTTP/2 200
[Captures]
[Asserts]
jsonpath "$.user" == "user1"