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"