ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

通过 npm 在 JavaScript 项目中使用 Hurl:安装、配置与 HTTP 测试实战

通过 npm 在 JavaScript 项目中使用 Hurl:安装、配置与 HTTP 测试实战 通过 npm 在 JavaScript 项目中使用 Hurl安装、配置与 HTTP 测试实战【免费下载链接】hurlHurl, run and test HTTP requests with plain text.项目地址: https://gitcode.com/GitHub_Trending/hu/hurl本篇技术指南围绕仓库contrib/npm/hurl/下的 npm 发行包orangeopensource/hurl展开讲解如何把用 Rust 编写的 Hurl 命令行工具集成到 JavaScript 项目的 npm scripts 中用它以纯文本格式运行并测试 HTTP 请求。读完本文你将掌握 Hurl 的安装原理平台检测、二进制下载与校验、Hurl 文件的核心语法链式请求、变量捕获、REST/GraphQL/SOAP/HTML 断言以及如何将其接入package.json的测试流程。Hurl 是什么一个纯文本格式的 HTTP 请求与测试工具Hurl 是用 Rust 编写的一款命令行工具其核心设计是用简单的纯文本格式定义并运行 HTTP 请求。它既可以像 curl 一样获取数据也可以作为 HTTP 测试工具对响应进行断言既能链式地串联多个请求也能在请求之间捕获变量值并对响应头与响应体执行查询与断言。orangeopensource/hurl这个 npm 包的存在正是为了让 JavaScript 开发者能够在 npm scripts 中直接调用 Hurl无需手动下载二进制或配置 PATH。其官方描述见 contrib/npm/hurl/package.json为Run and Test HTTP Requests with plain text and curlkeywords 包括cli、http、curl、integration-testing、api-testing等可见其定位面向 API 的集成测试与 HTTP 客户端工具。Hurl 覆盖面很广可用于 HTML 内容、REST / SOAP / GraphQL API以及其他任意基于 XML / JSON 的 API。它非常适合REST / JSON API的自动化测试同时也支持 HTML 响应、GraphQL 查询与 SOAP 请求的完整测试。npm 包与原生二进制的桥接安装原理与源码解析与普通纯 JS 包不同orangeopensource/hurl是围绕原生二进制的薄封装thin wrapper见 contrib/npm/README.md。理解其安装机制有助于排查安装失败或平台不兼容等问题。包结构bin 与 postinstall查看 contrib/npm/hurl/package.json 可以发现两个关键声明{ name: orangeopensource/hurl, version: 8.0.4, hurlBinaryVersion: 8.0.1, bin: { hurl: hurl.js, hurlfmt: hurlfmt.js }, scripts: { postinstall: node ./install.js } }bin字段声明了两个可执行入口hurl与hurlfmt分别指向 hurl.js 和 hurlfmt.js。这两个入口文件内容极简都是调用bin.run(...)将参数转发给对应原生二进制。postinstall脚本在npm install时自动执行 install.js负责下载与解压对应平台的 Hurl 二进制。hurlBinaryVersion当前为 8.0.1指明了要下载的二进制发布版本。平台检测与二进制下载install.js 通过os.type()与os.arch()获取当前操作系统类型与架构然后遍历 platform.json 中声明的受支持平台列表进行匹配。当前支持的平台矩阵如下操作系统架构Rust 目标三元组归档类型Windows_NTx64x86_64-pc-windows-msvc.zipLinuxx64x86_64-unknown-linux-gnu.tar.gzLinuxarm64aarch64-unknown-linux-gnu.tar.gzDarwinx64x86_64-apple-darwin.tar.gzDarwinarm64aarch64-apple-darwin.tar.gz如果当前系统不在列表中安装脚本会输出支持平台清单并终止安装。匹配成功后脚本按https://.../releases/download/${hurlBinaryVersion}/hurl-${hurlBinaryVersion}-${rust_target}${archive_extension}构造下载地址并交给 archive.js 完成下载与解压。SHA256 校验与解压archive.js 实现了完整的安装流程通过fetch下载归档文件到包内的dist目录校验归档类型Windows 为.zip类 Unix 为.tar.gz不支持的归档类型直接报错退出用crypto计算下载文件的 SHA256 校验和并与platform.json中预置的 checksum 比对verifyCheckSumSync不一致即中止安装——这保证了下载的二进制未被篡改校验通过后Windows 平台用extract-zip解压类 Unix 平台用tar解压。安装完成后包内会生成dist目录存放原生二进制。命令转发bin.jshurl.js 与 hurlfmt.js 都会调用 bin.js 的run(name)方法。bin.js根据平台拼接二进制路径Windows 下为dist/name.exe类 Unix 下为dist/bin/name用child_process.spawnSync以stdio: inherit方式同步执行并将命令行参数原样转发最后以子进程的退出码作为 npm 命令的退出码。这保证了npx hurl ...或npm test的行为与直接运行原生二进制完全一致。如果二进制缺失bin.js会提示请确保 postinstall 脚本在安装时已执行。快速开始安装 orangeopensource/hurl在任意 JavaScript 项目中以开发依赖方式安装即可npm install --save-dev orangeopensource/hurl安装时会自动为当前平台下载对应的 Hurl 二进制同时也会安装hurlfmt二进制。hurlfmt可用于将 Hurl 文件导出为 JSON 格式例如供 Hurl 之外的工具链消费。安装完成后即可在命令行直接验证npx hurl --version npx hurlfmt --version编写 Hurl 文件核心语法与完整示例Hurl 文件以.hurl为扩展名一个文件内可以包含多个顺序执行的请求每个请求后可跟响应断言。下面完整演示原包 README 中的五类典型场景。链式请求与变量捕获登录场景Hurl 允许在请求之间串联数据先通过[Captures]从响应中提取值再以{{变量名}}模板在后续请求中引用# Get home: GET https://example.net HTTP 200 [Captures] csrf_token: xpath string(//meta[name_csrf_token]/content) # Do login! POST https://example.net/login?usertotopassword1234 X-CSRF-TOKEN: {{csrf_token}} HTTP 302这里先用 XPath 从首页 HTML 的 meta 标签中捕获 CSRF token再将其放入登录请求头。注意请求之间用空行分隔HTTP 302是第一个请求的状态码断言。REST / JSON API 断言Hurl 支持对响应状态码、响应头、JSONPath 表达式进行断言非常适合 REST 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[Asserts]节中的每条断言都包含一个查询header、jsonpath、xpath等与一个谓词、matches、count等可对 JSON 响应体与响应头做细粒度校验。HTML 内容断言对 HTML 响应使用 XPath 查询即可校验文档结构GET https://example.org HTTP 200 [Asserts] xpath normalize-space(//head/title) Hello world!GraphQL 查询Hurl 原生支持 GraphQL 请求体直接以graphql代码块形式内联查询POST https://example.org/graphql graphql { human(id: 1000) { name height(unit: FOOT) } }HTTP 200### SOAP API 对于 SOAP 请求通过 Content-Type 与 SOAPAction 头声明 SOAP 信封请求体直接内联 XML 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 200Hurl 对查询与谓词的支持非常广泛从响应体上的 XPath、JSONPath 查询到状态码与响应头的断言覆盖了 HTTP 测试的绝大多数场景。更完整的 Hurl 文件语法与配置项说明可参见仓库内的 docs/manual/hurl.1 手册。在 npm scripts 中集成 Hurl安装完成后可在package.json的scripts中直接引用hurl命令。原包 README 给出的典型用法是在测试脚本中以--test模式配合 glob 通配符运行一批 Hurl 文件{ name: sample-app, scripts: { test: hurl --test --glob test/*.hurl } }几点说明--test是 Hurl 的测试模式逐条执行断言并汇总结果失败时返回非零退出码便于 CI 判断构建是否通过--glob test/*.hurl用于匹配多个 Hurl 测试文件也支持直接传入目录Hurl 会递归查找.hurl文件由于bin.js会把子进程退出码透传给 npm因此断言失败会正确导致npm test失败从而在 CI/CD 管道中阻断发布流程。若想在命令行单独体验也可以直接npx hurl --test test/*.hurl。使用 hurlfmt 导出 Hurl 文件包内同时提供了hurlfmt二进制入口见 hurlfmt.js可将 Hurl 文件转换为 JSON 等结构化格式便于在 Hurl 之外的系统中复用测试定义。完整用法参见 docs/manual/hurlfmt.1 手册。例如npx hurlfmt --out json input.hurl包维护视角如何发布新版本若你是包的维护者仓库 contrib/npm/README.md 记录了发布流程将docs/manual/下的手册复制进包目录、运行 check_publish.py 校验版本一致性Hurl 二进制版本与 npm 包版本、清理构建产物后执行npm publish。手册文件hurl.1与hurlfmt.1同时被声明在包的man字段中安装后可直接通过man hurl查看。小结orangeopensource/hurl以一种对 JavaScript 生态友好的方式把 Rust 编写的 Hurl 二进制交付给前端/Node 开发者postinstall自动完成平台检测、二进制下载、SHA256 校验与解压bin.js完成参数转发与退出码透传。在此之上Hurl 文件用纯文本同时描述了请求与断言天然适合写入package.json的 scripts 作为 API 集成测试。如需深入学习 Hurl 文件语法、全部命令行选项与退出码可继续阅读仓库内的 docs/manual/hurl.1、docs/manual/hurlfmt.1以及 docs/index.md 下的入门教程如 docs/tutorial/your-first-hurl-file.md。【免费下载链接】hurlHurl, run and test HTTP requests with plain text.项目地址: https://gitcode.com/GitHub_Trending/hu/hurl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表