x-cmd pkg | hurl - 强力的 HTTP 请求测试工具,让 API 测试更加简洁和高效

目录

    • 简介
    • 快速上手
      • 安装 hurl
      • 发送 HTTP 请求
      • Hurl 文件格式
    • 功能特点
    • 竞品和相关项目
    • 进一步探索

简介

hurl 是 [github.com/Orange-OpenSource] 用 Rust 开发的 HTTP 请求处理和测试工具,专注于简化 HTTP 请求的创建、执行以及自动化测试流程,能以简单的纯文本格式定义的 HTTP 请求,特别适用于测试和调试 HTTP 服务。

hurl 这个名字是对 curl 的致敬。该项目在底层采用 libcurl,而上层设计则专注于 HTTP 领域的应用。此外,hurl 在 curl 的基础上主要拓展了两个功能:链接多个请求(Chain several requests)、测试 HTTP 响应(Test HTTP responses)。

在这里插入图片描述

快速上手

安装 hurl

eval "$(curl https://get.x-cmd.com)"        # 安装 x-cmd
x env use hurl                              # 使用 x-cmd 安装 hurl

发送 HTTP 请求

  1. 从 stdin 读取 HTTP 请求。

    echo GET http://httpbin.org/get | hurl
    
  2. 从指定文件或目录中读取 HTTP 请求。hurl 支持在同一个文件中定义多个 HTTP 请求,且在以目录为目标时,hurl 将递归搜索扩展名为 .hurl 的文件。

    echo GET http://httpbin.org/get > test.hurl
    hurl test.hurl                                  # hurl <file>
    hurl ./                                         # hurl <dir>
    
  3. 使用测试模式,如执行当前目录下所有 .hurl 文件的 HTTP 请求并统计结果。

    hurl --test *.hurl
    

Hurl 文件格式

hurl 考虑到了 HTTP 请求的绝大部分场景,在有限的篇幅中笔者无法一一道来,只能简要说明部分内容:

  1. .hurl 文件是一份条目(entry)列表,每个条目包含请求(request)和响应(response)两部分内容,其中请求部分是必需的,而响应部分是可选内容。

  2. 请求(request):指一个 HTTP 请求,包含处理请求方法(method)、URL、标头(headers)、请求配置(如查询字符串、表单参数、cookies 等)和正文(body),其中请求方法和 URL 是必需的。更详细的说明请参考hurl 官方提供的图例。

  3. 捕获响应(Capturing Response):从 HTTP 响应中提取或存储所需的数据,并注入到后续的请求中。这对于在一个请求中使用来自另一个请求数据的场景非常有用。结构如下:

    # 提取或存储数据
    [Captures]
    <variable>: <query># 在另一个请求中使用上述提取的数据
    {{variable}}
    
  4. 断言(Asserts):用于测试 HTTP 响应的各种属性。它可以是隐式的(例如版本、状态、标头),也可以是 [Asserts]部分 中显式标识的。结构如下:

    GET https://api/example.org/cats
    HTTP 200
    Content-Type: application/json; charset=utf-8      # 隐式断言
    [Asserts]                                          # 显示断言
    bytes count == 120
    header "Content-Type" contains "utf-8"
    jsonpath "$.cats" count == 49
    jsonpath "$.cats[0].name" == "Felix"
    jsonpath "$.cats[0].lives" == 9
    

功能特点

  1. 文件格式简单易懂:hurl 提供的格式简单易懂,方便维护,既可用于测试和调试 HTTP 服务,也可以作为文档非技术人员阅读或编写。
  2. 支持捕获响应(Capturing Response):支持从 HTTP 响应中提取或存储所需的数据,并注入到后续的请求中。
  3. 内置响应断言(Asserting Response):提供一系列断言(assertion)功能,允许你定义期望的 HTTP 响应状态码、头信息以及响应体内容,从而自动化地验证 HTTP 请求的响应。

竞品和相关项目

  1. curl:一款非常流行且功能强大的命令行工具,用于从命令行处理 HTTP、HTTPS 等多种协议的请求,支持文件传输、身份认证、代理等,适用于自动化脚本、调试 API、下载文件等多种场景。
  2. httpie:用 Python 实现的命令行 HTTP 客户端,专注于简化与 HTTP/HTTPS 服务的交互,设计更加直观和友好,特别适合开发人员、系统管理员和测试人员使用。
  3. Postman: Postman 是一款图形化的 API 测试工具,提供了丰富的功能管理 HTTP 请求。Postman 主要面提供了可视化的界面和协作功能。

进一步探索

  • hurl 源代码 - hurl 项目的源代码托管在 GitHub,你可以在这里找到最新版本的 hurl 和参与社区贡献。
  • hurl 官方文档 - 学习和使用 hurl 的官方网站,提供了 hurl 的文档、教程和社区资源。

更多内容请查阅 : pkg/hurl

转载请标明原文链接 :https://www.x-cmd.com/pkg/hurl


关注微信官方公众号 : oh my x

获取开源软件和 x-cmd 最新用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148790.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript:模块

一、前言 关于术语的一点说明: 请务必注意一点&#xff0c;TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”&#xff0c;这是为了与 ECMAScript 2015里的术语保持一致&#xff0c;(也就是说 module X { 相当于现…

【C++】8.类和对象(6)

文章目录 5. 内部类6. 匿名对象7. 对象拷贝时的编译器优化 5. 内部类 如果一个类定义在另一个类的内部&#xff0c;这个内部类就叫做内部类。内部类是一个独立的类&#xff0c;跟定义在全局相比&#xff0c;他只是受外部类类域限制和访问限定符限制&#xff0c;所以外部类定义的…

QT菜单之快捷菜单设计

快捷菜单又称为上下文菜单&#xff0c;通常在用鼠标右击的时候弹出。创建快捷菜单的方法和创建菜单栏菜单类似。 效果图&#xff1a; 一、将MainWindow类对象的ContextMenuPolicy属性设置为customContextMenu。 打开mainWindow.ui&#xff0c;在属性视图上找到ContextMenuPoli…

What is the OpenAI Chat Completion API tools/functions property format?

题意&#xff1a;OpenAI 聊天完成 API 的工具/函数属性格式是什么 问题背景&#xff1a; Is there any clear documentation on the format of OpenAIs Chat Completion API tools/functions object format? I understand its JSON, but there appear to be underlying requi…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

数据结构实验二之线性表(下)

实验题5:实现循环双链表的各种基本运算的算法 题目描述 编写一个程序cdlinklist.cpp,实现循环双链表的各种基本运算和整体建表算法 (假设循环双链表的元素类型ElemType为int),并在此基础上设计一个程序exp2-5.cpp 完成以下功能。 (1)初始化循环双链表h。 (2)依次采用尾插法插入…

免费的 H5/PC 地图打卡 —— 功能代码及实现指南/功能代码已上传

在本文中&#xff0c;我们将通过天地图&#xff08;Tianditu&#xff09;实现一个简单的 H5/PC 版地图打卡功能。通过实时获取用户的位置&#xff0c;检测其与打卡点的距离&#xff0c;来决定是否可以完成打卡。代码已上传&#xff0c;本文将逐步介绍如何实现这一功能。 效果图…

EDI简化,两剂初免效果好

EDI简化&#xff0c;两剂初免效果好 大家好&#xff0c;疫苗是防控传染病的重要工具。但对于一些如HIV等病原体&#xff0c;有效疫苗的研发仍面临诸多挑战。在疫苗接种中&#xff0c;生发中心起着关键作用。近期研究表明——《Two-dose priming immunization amplifies humoral…

[数据集][目标检测]基于yolov5增强数据集算法mosaic来扩充自己的数据集自动生成增强图片和对应标注无需重新标注

【算法介绍】 YOLOv5最引人注目的增强技术之一是马赛克增强&#xff0c;它将四张不同的图像拼接成一张图像。 思路&#xff1a;首先&#xff0c;从数据集中随机选择四张图像&#xff0c;然后将它们缩放、随机裁剪&#xff0c;并按马赛克模式拼接在一起。这种方式允许模型看到…

为什么AI不会夺去软件工程师的工作?

▼ 自从AI大模型爆火以来&#xff0c;我每天的工作中&#xff0c;已经有大量的真实代码是通过AI完成的。人工智能辅助下的编程&#xff0c;确实大幅减轻了我的工作负担&#xff0c;大大提高了生产力。 大语言模型是如此成功&#xff0c;以至于无可避免地在开发者社区中引起了…

DesignMode__unity__抽象工厂模式在unity中的应用、用单例模式进行资源加载

目录 抽象工厂模式 思维导图 接口&#xff08;抽象类&#xff09; 工厂接口 抽象产品类 抽象武器接口 抽象人物接口 具体工厂和具体产品 具体工厂 &#xff08;1&#xff09;产品接口&#xff0c;生成具体人物 &#xff08;2&#xff09;武器接口&#xff0c;生成具体…

mapboxGL 离线部署或者说去除token最简单得方法

找到本项目中得node_modules包管理器中得mapbox-gl包 找打dist文件夹下得mapbox-gl-dev.js 相比于mapbox-gl.js得压缩文件 mapbox-gl-dev.js没有压缩&#xff0c;好修改&#xff0c;也无需要编译 在mapbox-gl-dev.js找到 this._authenticate()&#xff0c;注释或者去除即可 最…

【Proteus仿真】基于51单片机的简易电压表制作(可串口远程调控)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;设计一个简易电压表&#xff1a; 采用3位LED数码管显示被测电压值&#xff1a;基本测量范围是 0-5V&#xff1b;测量误差为士0.02V。开机或复位后&#xff0c;在 LED 最…

三角型电动采光排烟天窗的高效排烟设计优势

三角型电动采光排烟天窗的排烟效果在多个方面均展现出了显著的优势&#xff0c;主要体现在以下几个方面。一、设计原理与结构特性 三角型电动采光排烟天窗采用三角形构造&#xff0c;这种设计在结构上具有显著的稳定性&#xff0c;能够抵御不同气候条件及风压的影响。同时减少了…

网站建设合同怎么写

网站建设合同成为企业与网站开发服务提供商之间不可或缺的法律文书。一份明晰而全面的网站建设合同不仅有助于规范双方权责&#xff0c;还能有效防范潜在的合同纠纷。以下是一份网站建设合同的范本&#xff0c;旨在提供参考。 一、合同双方信息 甲方&#xff08;委托方&#x…

QT| “无法粘贴窗口部件”错误以及customplot安装使用

“无法粘贴窗口部件”错误以及customplot “无法粘贴窗口部件”错误customplot下载添加到项目中使用QCustomPlot常用的代码 “无法粘贴窗口部件”错误 情景&#xff1a;使用QT设计界面&#xff0c;很多部分比较类似&#xff0c;可以复制另一个界面的ui&#xff0c;但是粘粘的时…

TS-AI:一种用于多模态个体化脑区划分的深度学习管道,并结合任务对比合成|文献速递-Transformer架构在医学影像分析中的应用

Title 题目 TS-AI: A deep learning pipeline for multimodal subject-specific parcellation with task contrasts synthesis TS-AI&#xff1a;一种用于多模态个体化脑区划分的深度学习管道&#xff0c;并结合任务对比合成 01 文献速递介绍 人类大脑在结构和功能组织上表…

武汉正向科技 格雷母线检测方式 :车检,地检

正向科技|格雷母线原理运用-车检&#xff0c;地检 地上检测方式 地址编码器和天线箱安装在移动站上&#xff0c;通过天线箱发射地址信号&#xff0c;地址解码器安装在固定站&#xff08;地面&#xff09;上&#xff0c;在固定站完成地址检测。 车上检测方式 地址编码器安装在…

单域名、多域名、通配符SSL证书,该如何选择?

随着《网络安全法》《数据安全法》相关法律法规的发布&#xff0c;履行数据保护义务&#xff0c;做好数据安全保护是每个企业的重要工作。其中&#xff0c;SSL证书作为企业网站实现HTTPS加密保护数据传输安全的必备措施&#xff0c;根据域名保护数量&#xff0c;可以分为单域名…

拼团活动开发秘籍:PHP+Redis实现暂存成团信息,提升效率!

在用户发起成团&#xff0c;与用户入团时需要保存其成团信息&#xff08;主要是活动id与团长、团员openid&#xff09;&#xff0c;暂存在redis中&#xff0c;后期需要保存到sql中&#xff0c;以便查询。 tuan_redis.php<?php include_once(/opt/*****ub/redis.php);//red…