模拟响应与断点
规则让你无需改动服务器,就能改变应用收到的响应:自己应答请求、让它变慢、让它失败,或者暂停它并手动编辑。规则位于代理中,因此对 Network 工具所连接的每台设备都有效。
规则#
一条规则有一个匹配器(匹配哪些请求)和一个动作(做什么)。第一条匹配的已启用规则生效。
| 匹配器字段 | 匹配 |
|---|---|
methods | 这些方法中的任意一个。为空表示任意方法。 |
host | 一个模式:api.example.com、*.example.com。* 表示任意长度的字符,? 表示任意一个字符。 |
path | 针对不含查询的路径的模式:/v1/users/*。 |
urlContains | 完整地址(主机、路径和查询)必须包含的文本。 |
每个已设置的字段都必须匹配。
| 动作 | 会发生什么 |
|---|---|
Answer(mock) | 代理在可选的延迟之后,用你指定的状态、标头和正文进行应答。服务器完全不会被请求。 |
| Delay | 请求先等待,然后继续。用它来试验慢速网络。 |
| Block | 应用收到网关错误,就像网络失败了一样。没有任何内容会到达服务器。 |
Hold(breakpoint) | 请求、响应或两者都会暂停,等待你处理。 |
另有四个动作,可以把请求发送到文件或另一台服务器、根据 OpenAPI 文件检查响应,或运行 WebAssembly 脚本;规则还可以让它下面的规则也生效:请参阅网络规则和规则脚本。
被规则处理过的流程会在列表和详情中显示 MOCK 或 RULE 徽标。
规则针对的是你选定的某一件事。若要用录制内容应答所有请求,请参阅回放录制。规则仍然优先于录制内容。
在应用中#
打开 Network,然后打开 Rules。选择一个预设(JSON 应答、500、慢速网络、阻止、断点),或者从一个请求开始:选中它并点击 Mock,得到一条与服务器应答方式相同、可直接编辑的规则。规则对下一个请求生效,并保存在 EmuLabZip 数据文件夹的 net-rules.json 中。
断点#
被暂停的请求或响应会出现在 Network 视图底部的抽屉中。你可以编辑标头(每行一个 name: value)、正文(文本时)以及响应的状态。Continue 会带着你的修改把它发出去,Abort 会让它失败,Continue all 会放行所有内容。响应以解码后的形式显示,并以未压缩的形式继续发送。如果没有人处理,被暂停的消息会在 2 分钟后原样继续,因此应用不会永远挂起。
在命令行中#
emulabzip net --rules rules.json
[
{
"name": "stub the profile",
"matcher": { "host": "api.example.com", "path": "/v1/profile" },
"action": { "type": "mock", "status": 200,
"headers": [["content-type", "application/json"]],
"body": "{\"name\": \"Ada\"}" }
},
{ "name": "slow uploads", "matcher": { "methods": ["POST"] }, "action": { "type": "delay", "ms": 3000 } },
{ "name": "no analytics", "matcher": { "host": "*.analytics.example.com" }, "action": { "type": "block" } }
]
模拟响应可以带有二进制正文:设置 "base64": true,并以 base64 提供正文。断点需要有人来继续它们,因此命令行会跳过这类规则,并给出提示。
限制#
- 模拟响应的正文最大 5 MB,延迟最长 60 秒。
- 规则看到的是解密后的请求,因此 HTTPS 需要安装证书。被直接放行的主机(固定证书的应用)无法修改。
- WebSocket 升级与任何请求一样被匹配,但只有握手可以被模拟或阻止。