在 API 开发和测试的日常工作中,我们常常需要在命令行快速发起 HTTP 请求并验证响应。虽然 curl 是行业标准,但编写复杂的请求链和验证逻辑时,它的命令行语法会变得冗长难读。

hurl 用简洁的纯文本格式解决了这个问题。这款由 Orange 开源的 Rust 工具,让你可以用类似 Markdown 的语法编写 HTTP 请求文件,支持断言、变量、重定向和 Cookie 管理——本质上是用文本文件做自动化 API 测试。

项目速览

属性内容
GitHubOrange-OpenSource/hurl
⭐ Stars18.7k
🔧 语言Rust
⚡ 特点纯文本格式、链式请求、断言验证
📅 更新今天(活跃开发中)

核心功能

1. 纯文本请求定义

hurl 使用直观的文本格式定义 HTTP 请求,无需记忆复杂的命令行参数:

GET https://api.example.com/users
Authorization: Bearer {{token}}

HTTP 200
[Asserts]
jsonpath "$[*].id" exists
jsonpath "$[0].name" == "Alice"

2. 请求链与变量传递

支持从响应中提取数据,传递给后续请求:

# 登录获取 token
POST https://api.example.com/login
{
  "username": "admin",
  "password": "secret"
}

HTTP 200
[Captures]
token: jsonpath "$.token"

# 使用 token 访问受保护资源
GET https://api.example.com/profile
Authorization: Bearer {{token}}

HTTP 200

3. 丰富的断言支持

内置多种断言方式,验证响应状态、头部、体内容:

GET https://api.example.com/products/123

HTTP 200
[Asserts]
header "Content-Type" contains "application/json"
jsonpath "$.name" matches /Product .*/
jsonpath "$.price" isInteger
bytes count == 1024

4. 与 curl 生态兼容

hurl 可以导出为 curl 命令,也可以直接导入现有的 curl 请求:

# 导出为 curl 命令
hurl --curl my_request.hurl

# 生成 HTML 报告
hurl --report-html report/ test.hurl

快速开始

# macOS
brew install hurl

# Linux
curl --location --remote-name https://github.com/Orange-OpenSource/hurl/releases/latest/download/hurl-linux-x86_64.tar.gz
tar xf hurl-linux-x86_64.tar.gz

# 运行测试
hurl test.hurl

适用场景

  • API 测试:编写可版本控制的集成测试用例
  • CI/CD 集成:轻量级的自动化测试工具
  • 开发调试:替代复杂的 curl 命令
  • 文档即代码:将 API 请求作为文档维护

总结

hurl 填补了 curl 和重量级 API 测试工具之间的空白。它保留了命令行工具的轻量特性,同时提供了结构化的测试能力。对于追求简单、可维护测试方案的开发团队来说,这是一个值得关注的选择。