如何存储代理结果
简短的回答是江湖骗子已经is存储它。您可以通过查看输出来验证这一点curl http://localhost:2525/imposters/6568
。真正的问题是如何重放存储的响应?
mountebank 代理的常见使用场景是您在一个正在运行的实例上记录代理响应mb
,保存结果,然后启动下一个实例mb
与那些保存的回复。这样做的方法是让被测试的系统在您需要的任何条件下通过 mountebank 代理与您尝试删除的服务进行对话,然后通过发送一个HTTP协议GET
or DELETE
to http://localhost:2525/imposters/6568?removeProxies=true&replayable=true
。您将该响应的 JSON 正文提供给下一个mb
实例,可以通过 REST API,也可以将其保存在磁盘上并使用类似命令启动 mountebankmb --configfile savedProxyResults.json
。此时,mountebank 对请求提供完全相同的响应,而无需连接到下游服务。
代理创建新存根
你的最后一个问题围绕着理解如何proxyAlways
模式有效。默认proxyOnce
模式意味着,当 mountebank 代理第一次看到唯一满足谓词的请求时,它会查询下游服务并保存响应。下次似乎有一个满足的请求完全一样谓词,它避免了下游调用并简单地返回保存的结果。它仅代理下游once为了same要求。这proxyAlways
另一方面,模式始终向下游发送请求,并保存同一请求的响应列表。
为了清楚起见,在您复制的示例中,我们关心method
, path
, and query
请求中的字段,因此如果我们看到两个请求具有这三个字段的完全相同的组合,我们需要知道是否应该将保存的响应发送回或继续代理。想象一下我们第一次发送:
GET /test?q=elephants
The method
is GET
, the path
is /test
,以及query
is q=elephants
。由于这是第一个请求,我们将其发送到下游服务器,该服务器返回以下内容:
No results
无论您将 mountebank 设置为哪种代理模式,这都是正确的,因为它必须至少向下游查询一次。现在假设,当我们正在考虑这个问题时,下游服务添加了一头大象,然后我们的测试系统进行了相同的调用:
GET /test?q=elephants
如果我们在proxyOnce
模式下,大象被添加到实际服务中这一事实并不重要,我们将继续返回我们保存的响应:
No results
如果您如上所述关闭江湖骗子进程并重新启动它,您会看到相同的行为。在您保存的配置文件中,您会看到类似这样的内容(稍微简化一下):
"stubs": [
{
"predicates": [{
"deepEquals': {
"method": "GET",
"path": "/test",
"query": { "q": "elephants" }
}
}],
"responses": [
{
"is": {
"body": "No results"
}
}
]
}
]
只有一个存根。另一方面,如果我们使用proxyAlways
,然后第二次调用GET /test?q=elephants
会产生新的大象:
1. Jumbo reporting for duty!
这很重要,因为如果我们关闭江湖骗子进程并重新启动它,现在我们的测试可以依赖于我们将循环执行这两个响应的事实:
"stubs": [
{
"predicates": [{
"deepEquals': {
"method": "GET",
"path": "/test",
"query": { "q": "elephants" }
}
}],
"responses": [
{
"is": {
"body": "No results"
}
},
{
"is": {
"body": "1. Jumbo reporting for duty!"
}
}
]
}
]