Hurl 入门指南:用纯文本文件运行与测试 HTTP 请求 📅 发布时间:2026/9/13 19:15:39 👁 浏览次数: Hurl 入门指南用纯文本文件运行与测试 HTTP 请求【免费下载链接】hurlHurl, run and test HTTP requests with plain text.项目地址: https://gitcode.com/GitHub_Trending/hu/hurlHurl 是一个用 Rust 编写的命令行工具能以简单纯文本格式定义并运行 HTTP 请求同时支持请求链式调用、值捕获与响应断言一套.hurl文件即可完成数据获取与 HTTP 会话测试。本文基于仓库 docs/home.md 展开结合源码与集成测试系统讲解 Hurl 的定位、核心语法、多协议 API 场景与 CI/CD 集成方式读完你可以直接上手编写并运行自己的 Hurl 测试文件。Hurl 是什么Hurl 是一个命令行工具运行以简单纯文本格式定义的HTTP 请求。它可以链式请求、捕获响应中的值并对响应头和响应体执行查询与断言。Hurl 非常通用既能用来获取数据也能用来测试 HTTP 会话。Hurl 让处理HTML内容、REST / SOAP / GraphQLAPI以及任何基于XML / JSON的 API 都变得简单直接。仓库根目录的 README.md 与 docs/home.md 使用同一套介绍文案将 Hurl 定位为 run and test HTTP requests with plain text。以官网首页的示例为例先访问首页并捕获 CSRF token再携带该 token 完成登录# Go home and capture token GET https://example.org HTTP 200 [Captures] csrf_token: xpath string(//meta[name_csrf_token]/content) # Do login! POST https://example.org/login [Form] user: toto password: 1234 token: {{csrf_token}} HTTP 302这段示例完整展现了 Hurl 的核心三要素请求定义GET/POST加上 URL响应期望HTTP 200/HTTP 302声明期望的状态码变量捕获与复用[Captures]把 XPath 查询结果存入csrf_token随后以{{csrf_token}}模板语法注入下一个请求的表单。链式请求多个请求依次排列即为链式请求Hurl 会按顺序执行并共享会话Cookie 存储、变量等GET https://example.org/api/health GET https://example.org/api/step1 GET https://example.org/api/step2 GET https://example.org/api/step3这种顺序排列即可执行的方式让多步骤的业务流程如 健康检查 → 多阶段任务可以写成可读性极强的文本脚本。从源码结构看串行执行逻辑位于 packages/hurl/src/main.rsrun::run_seq负责按输入文件顺序执行配合--parallel选项时则走run::run_par按--jobs指定的 worker 数并行执行见 packages/hurl/src/main.rs。Hurl 同时也是 HTTP 测试工具Hurl 不仅能发起 HTTP 请求还能测试 HTTP 响应。它支持多种查询query与谓词predicate从对响应体做 [XPath] 与 [JSONPath] 查询到对状态码、响应头做断言覆盖十分全面。REST / JSON API 断言POST https://example.org/api/tests { id: 4568, evaluate: true } HTTP 200 [Asserts] header X-Frame-Options SAMEORIGIN jsonpath $.status RUNNING # Check the status code jsonpath $.tests count 25 # Check the number of items jsonpath $.id matches /\d{4}/ # Check the format of the id这里的要点header X-Frame-Options SAMEORIGIN断言响应头jsonpath $.status RUNNING断言 JSON 字段值jsonpath $.tests count 25用count过滤器断言数组长度jsonpath $.id matches /\d{4}/用matches谓词做正则校验。JSON 响应体断言、状态码断言与所有显式谓词、!、、、startsWith、contains、matches、exists、isInteger等的完整语法与示例参见 docs/asserting-response.md。HTML 内容断言GET https://example.org HTTP 200 [Asserts] xpath normalize-space(//head/title) Hello world!Hurl 内置 XPath 1.0 查询引擎可对 HTML/XML 响应体直接做 DOM 级断言。更复杂的 HTML 断言如count、exists、命名空间支持见 docs/asserting-response.md。GraphQL APIHurl 支持以graphql语言标识符的多行字符串作为请求体发送 GraphQL 查询POST https://example.org/graphql graphql { human(id: 1000) { name height(unit: FOOT) } }HTTP 200关于 GraphQL 请求体可以同时混用 GraphQL 变量variables { ... } 块与 Hurl 模板变量 {{var}}详见 [docs/request.md](https://link.gitcode.com/i/78d15720b7488c27c14f71b0974bc9e8)。 ### SOAP API Hurl 同样可以处理 SOAP/XML 请求直接书写 XML 请求体并通过 Content-Type、SOAPAction 等头部完成协议约定 hurl POST https://example.org/InStock Content-Type: application/soapxml; charsetutf-8 SOAPAction: http://www.w3.org/2003/05/soap-envelope ?xml version1.0 encodingUTF-8? soap:Envelope xmlns:soaphttp://www.w3.org/2003/05/soap-envelope xmlns:mhttps://example.org soap:Header/soap:Header soap:Body m:GetStockPrice m:StockNameGOOG/m:StockName /m:GetStockPrice /soap:Body /soap:Envelope HTTP 200XML 请求体等价于带xml标识符的多行字符串体详见 docs/request.md。集成测试目录中也可找到同类用例例如 integration/hurl/tests_ok/post 下的多种请求体测试。性能测试响应时长断言Hurl 可以用于测试 HTTP 端点的性能通过duration查询断言整个 HTTP 事务发送加接收的总耗时GET https://example.org/api/v1/pets HTTP 200 [Asserts] duration 1000 # Duration in msduration以毫秒为单位既可用于断言见 docs/asserting-response.md也可用于捕获见 docs/capturing-response.md。若需更细粒度的性能分析docs/response.md 还列出了 libcurl 暴露的响应时序指标time_namelookupDNS 解析耗时、time_connectTCP 建连耗时、time_appconnectTLS/SSL 握手耗时、time_starttransfer首字节到达前耗时与time_total总耗时这些时序均以微秒为单位可通过--json结构化输出、--report-html与--report-json报告查看。字节级校验响应摘要Hurl 还可以校验响应内容的字节级特征例如对下载文件做 SHA-256 摘要校验GET https://example.org/data.tar.gz HTTP 200 [Asserts] sha256 hex,039058c6f2c0cb492c533b0a4d14ef77cc0f78abccced5287d84a1a2011cfb81;sha256断言在内容编码解压之后计算因此不受Content-Encoding影响见 docs/asserting-response.md。类似地Hurl 还提供md5、bytes解压后的字节流与rawbytes解压前的原始字节流查询可用于检查文件头魔数、字节数等见 docs/asserting-response.md。为什么选择 Hurldocs/home.md 概括了 Hurl 的三个核心卖点特性说明文本格式Text Format面向 DevOps 与开发者.hurl文件即文档即测试快速 CLIFast CLI一个命令行同时服务于本地开发与持续集成单一二进制Single Binary易于安装无需运行时依赖从仓库看Hurl 还提供了 shell 补全completions 目录下的 bash/fish/ps1/zsh 补全脚本、Vim/Emacs/Sublime Text/IntelliJ 等编辑器的语法高亮插件见 contrib/vim、contrib/emacs、contrib/sublime-text、contrib/intellij这些都降低了日常使用成本。Powered by curl底层引擎Hurl 是一个用Rust编写的轻量二进制程序。底层 HTTP 引擎由libcurl驱动——libcurl 是业界最强大可靠的传输库之一。Hurl 用文本文件格式为运行与测试 HTTP 请求增加了语法糖但底层依然是大家熟悉的 curl 能力快、高效、支持 IPv6 与 HTTP/3。仓库结构印证了这一点packages/hurl 是主 crate含 CLI、runner、HTML/JSON/JUnit/TAP 报告等模块packages/hurl_core 负责 Hurl 语法解析与文本处理packages/hurlfmt 提供格式化工具根目录的 Cargo.toml 与 Cargo.lock 管理着这些 Rust 工作区成员。入口程序 packages/hurl/src/main.rs 定义了完整的退出码约定退出码含义0全部成功1命令行参数错误2输入读取或解析错误3运行期错误4断言失败127未定义错误断言失败4与运行期错误3分开返回正是为了便于 CI/CD 区分测试未通过与运行环境异常计算逻辑见 packages/hurl/src/main.rs。集成 CI/CD多格式测试报告Hurl 可以轻松集成到 CI/CD支持文本、JUnit、TAP 与 HTML 四种报告格式。从 packages/hurl/src/main.rs 可以看到报告导出由--curl、--junit、--tap、--html、--json、--report-json等选项触发分别生成 curl 命令导出、JUnit XML、TAP 流、HTML 报告目录与 JSON 报告目录并在写报告前统一收集运行期产生的 secret 进行脱敏。上图为 Hurl 生成的 HTML 报告效果暗色主题对应 home-waterfall-dark.png。这份报告即为 docs/home.md 中展示的真实运行产物是理解 CI/CD 集成价值的直接参考。在 CI 中典型的用法是# 运行所有 hurl 测试并生成 JUnit 报告供 GitLab CI / Jenkins 解析 hurl --test --report-junit report.xml tests/**/*.hurl结合上文提到的退出码约定测试失败会以非零退出码结束流水线同时 JUnit 报告保留失败详情。仓库的集成测试套件本身也大量使用这些能力例如 integration/hurl/tests_ok/tap、integration/hurl/tests_ok/junit 等目录均有对应报告格式的验证用例。延伸阅读与上手建议学习第一个 Hurl 文件docs/tutorial/your-first-hurl-file.md请求语法全解方法、URL、Headers、Options、Query、Form、Multipart、Cookies、BasicAuth、各类请求体docs/request.md响应期望与隐式/显式断言docs/response.md 与 docs/asserting-response.md捕获响应值并跨请求复用含 secret 脱敏docs/capturing-response.mdHurl 文件规范UTF-8 编码、.hurl扩展名、注释、字符串转义docs/hurl-file.md完整命令行手册docs/manual.md独立文档可下载 HTML / PDF / Markdown动手练习时可以克隆本仓库后在本地编译Rust 工作区见根目录 Cargo.toml也可以直接运行仓库内现成的集成测试用例作为参考例如 integration/hurl/tests_ok/hello/hello.hurl 这类最小可运行示例。【免费下载链接】hurlHurl, run and test HTTP requests with plain text.项目地址: https://gitcode.com/GitHub_Trending/hu/hurl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考