前言
Hoppscotch,原名Postwoman,是一个轻量级的,类似于Postman的API测试工具。 我学习它主要是看重它以下几点。
- 它开源,且在github上有很多star
- 它支持在docker里部署,管理起来方便。不用再安装一个套壳浏览器了(一个Electron应用就是一个套壳浏览器)。
- 完全免费
而且它的界面好看。另外,它还使用了我喜欢的Vue 和 Postgres
另外,它的官方文档写的也挺好。这是它的文档docs.hoppscotch.io/
本篇文章,简单介绍一下,如何使用hoppscotch进行Rest接口测试,和Hoppscotch的一些feature。
基础
部署和使用方式
- 最简单的使用方式就是直接进官网首页hoppscotch.io/。直接在操作界面操作即可。这叫Hoppscotch Cloud。
- 自建。这是我看重它的一个点。如果公司需要一个API测试平台,不用花钱买,建一个公用的给大家用,就行了。而且数据可以保存在指定的数据库里。
- Hoppscotch CLI 通过命令行来使用hoppscotch。有了它可以在脚本中使用hoppscotch,比如在CI中。
- Hoppscotch Enterprise 还没公开,不知道具体情况。
如何在浏览器里测试本地服务的接口
本来我觉得,要想再浏览器里进行接口测试,要么得在docker里部署,要么使用内网穿透。但其实不用,因为它可以利用Chrome插件,直接向本地发起请求。
简单的接口测试
如何测试一个http client?
Hoppscotch 也可以看做一个http client。如何测试它?两个方法
自己起一个http service
先写一个脚本,比如这样
from flask import Flask, request
app = Flask(__name__)
@app.route('/<path:any_path>', methods=['GET', 'POST'])
def test(any_path: str):
return {
"path": any_path,
"headers": dict(request.headers),
"method": request.method,
"values": dict(request.values),
}
if __name__ == '__main__':
app.run(debug=True, port=10005)
然后再启动,即可。自由度高但有点麻烦。
使用通用的http请求/响应工具,例如httpbin.org/
httpbin.org 是一个HTTP请求和响应的测试网站,可以用来测试HTTP客户端的请求和响应。它提供了多种HTTP请求和响应的测试功能,包括获取请求头、响应头、请求参数、响应状态码、cookies、重定向等信息,还可以模拟POST、PUT等请求方法,以及上传、下载文件等功能。httpbin.org可以帮助开发人员测试和调试HTTP客户端的请求和响应,以及检查API接口的正确性和可靠性。
如图所示,它支持给出各种响应。你按照它给出的规则,来发送各种请求,如果得到了预期的响应,就可以认为你的请求是对的。
测试
它支持给接口设置
- Parameters
- Body
- Headers
- Authorization
- Pre-request Script
- Tests
其中前3个很简单,对大部分情况,也应该够了。以下是一个例子,我给测试接口的了包括参数,请求体和请求头。
以下是结果。
很简单吧?其实学到这里就已经能进行简单的后端接口测试了。
高级
Authorization
授权。它支持多种授权方式。这里以Bearer Token为例。在飞书开放平台API就是用的这种授权。
github api也支持这种token
这里有Bearer Token的介绍
swagger.io/docs/specif…
简单地说就是发送请求时,给出这样一个Header,
Authorization: Bearer <token>。其中token是一个随机的字符串,应用层用此字符串来鉴权。
尝试了一下
结合httpbin的此接口的源代码,
可知和我预期一致。
通过生成的代码来看,也能看出来。
Environment
Environment 就是一组环境变量。 如果没有环境变量,每个接口的各种设置都得硬编码,那也太麻烦了。 hoppscotch接口的参数、路径等设置,都支持引用环境变量。 举个例子。现在有两套环境变量,
把env设置为它,是向
http://localhost:10005/all发请求。
把env设置为它,是向
https://httpbin.org/anything发请求。
Pre-request script
是一段Js代码。它可以通过设置环境变量,来动态设置请求。 值得注意的是,它对环境变量的设置,会保存到Environment里,而不只是给当前的请求使用。
在这里,你可以使用pw.env.set来设置环境变量。
Post-request tests
也是一段js代码。类似单元测试,它用来测试响应。
管理,协作和账号体系
管理请求
可以把请求保存下载,以备以后的测试。 请求会保存到Collection里。Collection就像一个文件夹,而且,Collection内的文件夹还能嵌套。
每个Workspace可以有多个Collections。 我推测它的schema大概是这样的。
type Request = Record<string, any>;
interface Folder {
requests: Request[],
subFolder: Folder[],
}
interface Collection {
folders: Folder[],
}
interface Workspace {
collections: Collection[],
}
interface Team {
worksapce: Workspace,
}
其中,Team和用户,是多对多的关系。Team和workspace一一对应,官网上把这两个名词混用。 另外,Collection还能通过json导入导出。
账号体系和协作
支持通过Google Microsft Github账号登录,绝大多数开发者都能一键登录吧。
通过邮件邀请,可以让一个Team里有多个用户。且用户按照权限分为了3个级别。
小技巧
导入来自cURL格式的请求
在这里,可以把cURL看做一种把请求序列化为文本的方式。 你可以从chrome中以cURL格式导出请求,再导入hoppscotch.
把请求转化为各种语言的脚本
点击show code
可以转化为各种语言写的,用来发这个请求,使用的脚本。