pyt*_*hon 3 python mocking imposter-pattern mountebank
我正在使用Mountebank创建冒名顶替程序,并希望记录请求和响应.要创建一个http冒名顶替者,我使用了CURL他们的文档中描述的以下命令.
curl -i -X POST -H 'Content-Type: application/json' http://127.0.0.1:2525/imposters --data '{
"port": 6568,
"protocol": "http",
"name": "proxyAlways",
"stubs": [
{
"responses": [
{
"proxy": {
"to": "http://localhost:8000",
"mode": "proxyAlways",
"predicateGenerators": [
{
"matches": {
"method": true,
"path": true,
"query": true
}
}
]
}
}
]
}
]
}'
Run Code Online (Sandbox Code Playgroud)
我有另一台正在运行的服务器正在http://localhost:8000监听到端口6568的所有请求.
现在输出我的服务器:
mb
info: [mb:2525] mountebank v1.6.0-beta.1102 now taking orders - point your browser to http://localhost:2525 for help
info: [mb:2525] POST /imposters
info: [http:6568 proxyAlways] Open for business...
info: [http:6568 proxyAlways] ::ffff:127.0.0.1:55488 => GET /
Run Code Online (Sandbox Code Playgroud)
我想记录所有的请求和响应,现在无法做到.当我进入curl -i -X GET -H 'Content-Type: application/json' http://127.0.0.1:6568/它是给我一个回应,但我如何存储它?
任何人也可以解释我的意思
在代理响应前面的新存根中保存响应:
(来自Mountebank的文件)
小智 9
如何存储代理结果
简短的回答是走江湖已经被存放.您可以通过查看输出来验证curl http://localhost:2525/imposters/6568.真正的问题是如何重放存储的响应?
mountebank代理的常见使用场景是您在一个正在运行的实例上记录代理响应mb,保存结果,然后mb使用这些保存的响应启动下一个实例.你要这样做的方法是让被测系统与你需要的任何条件下通过mountebank代理存根的服务对话,然后通过发送一个来保存响应(及其请求谓词). HTTP GET或DELETE到http://localhost:2525/imposters/6568?removeProxies=true&replayable=true.您mb可以通过REST API 将该响应的JSON主体提供给下一个实例,或者将其保存在磁盘上并使用类似命令启动mountebank mb --configfile savedProxyResults.json.此时,mountebank正在为请求提供完全相同的响应,而无需连接到下游服务.
代理创建新的存根
您的上一个问题围绕着理解proxyAlways模式的工作原理.默认proxyOnce模式意味着当mountebank代理第一次看到唯一满足谓词的请求时,它会查询下游服务并保存响应.下次看起来满足完全相同谓词的请求时,它会避免下游调用,只返回保存的结果.它仅针对同一请求代理下游一次.另一方面,该模式始终向下游发送请求,并保存同一请求的响应列表.proxyAlways
为了更清楚,在这个例子中,你复制我们关心的method,path以及query在请求字段,所以如果我们看到这些人恰恰是三个字段相同的组合两个请求,我们需要知道我们是否应该发送保存回响应或继续代理.想象一下,我们首先发送:
GET /test?q=elephants
Run Code Online (Sandbox Code Playgroud)
的method是GET,该path是/test和query是q=elephants.由于这是第一个请求,我们将它发送到下游服务器,后者返回一个正文:
No results
Run Code Online (Sandbox Code Playgroud)
无论您将mountebank设置为哪种代理模式,都是如此,因为它必须至少向下游查询一次.现在假设,当我们考虑它时,下游服务添加了一个大象,然后我们的测试系统进行相同的调用:
GET /test?q=elephants
Run Code Online (Sandbox Code Playgroud)
如果我们处于proxyOnce模式状态,大象被添加到真实服务中的事实根本无关紧要,我们将继续返回我们保存的响应:
No results
Run Code Online (Sandbox Code Playgroud)
如果您关闭mountebank进程并重新启动它,您会看到相同的行为,如上所述.在您保存的配置文件中,您会看到类似这样的内容(简化一点):
"stubs": [
{
"predicates": [{
"deepEquals': {
"method": "GET",
"path": "/test",
"query": { "q": "elephants" }
}
}],
"responses": [
{
"is": {
"body": "No results"
}
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
只有一个存根.另一方面,如果我们使用proxyAlways,那么第二次调用GET /test?q=elephants会产生新的大象:
1. Jumbo reporting for duty!
Run Code Online (Sandbox Code Playgroud)
这很重要,因为如果我们关闭mountebank进程并重新启动它,现在我们的测试可以依赖于我们将循环通过两个响应的事实:
"stubs": [
{
"predicates": [{
"deepEquals': {
"method": "GET",
"path": "/test",
"query": { "q": "elephants" }
}
}],
"responses": [
{
"is": {
"body": "No results"
}
},
{
"is": {
"body": "1. Jumbo reporting for duty!"
}
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3000 次 |
| 最近记录: |