我正在构建一个Dockerised记录回放系统来帮助我记录网站,因此我可以在本地版本而非真实版本上设计刮板。这意味着我不会用自动请求来淹没网站,并且具有我不需要连接到网络即可工作的附加优点。
我在内部使用了基于Java的WireMock,它使用Wget从队列中的站点刮擦队列中进行记录。我正在使用WireMock
API
从它记录的映射中读取各种片段信息。
但是,我从映射响应中发现似乎未记录域信息(除非偶然在响应头中记录了域信息)。请参阅以下响应__admin/mappings
:
{
"result": {
"ok": true,
"list": [
{
"id": "794d609f-99b9-376d-b6b8-04dab161c023",
"uuid": "794d609f-99b9-376d-b6b8-04dab161c023",
"request": {
"url": "/robots.txt",
"method": "GET"
},
"response": {
"status": 404,
"bodyFileName": "body-robots.txt-j9qqJ.txt",
"headers": {
"Server": "nginx/1.0.15",
"Date": "Wed, 04 Jan 2017 21:04:40 GMT",
"Content-Type": "text/html",
"Connection": "keep-alive"
}
}
},
{
"id": "e246fac2-f9ad-3799-b7b7-066941408b8b",
"uuid": "e246fac2-f9ad-3799-b7b7-066941408b8b",
"request": {
"url": "/about/careers/",
"method": "GET"
},
"response": {
"status": 200,
"bodyFileName": "body-about-careers-GhVqy.txt",
"headers": {
"Server": "nginx/1.0.15",
"Date": "Wed, 04 Jan 2017 21:04:35 GMT",
"Content-Type": "text/html",
"Last-Modified": "Wed, 04 Jan 2017 12:52:12 GMT",
"Connection": "keep-alive",
"X-CACHE-URI": "/about/careers/",
"Accept-Ranges": "bytes"
}
}
},
{
"id": "def378f5-a93c-333e-9663-edcd30c936d7",
"uuid": "def378f5-a93c-333e-9663-edcd30c936d7",
"request": {
"url": "/about/careers/feed/",
"method": "GET"
},
"response": {
"status": 200,
"bodyFileName": "body-careers-feed-Fd2fO.xml",
"headers": {
"Server": "nginx/1.0.15",
"Date": "Wed, 04 Jan 2017 21:04:45 GMT",
"Content-Type": "application/rss+xml; charset=UTF-8",
"Transfer-Encoding": "chunked",
"Connection": "keep-alive",
"X-Powered-By": "PHP/5.3.3",
"Vary": "Cookie",
"X-Pingback": "http://www.example.com/xmlrpc.php",
"Last-Modified": "Thu, 06 Jun 2013 14:01:52 GMT",
"ETag": "\"765fc03186b121a764133349f8b716df\"",
"X-Robots-Tag": "noindex, follow",
"Link": "<http://www.example.com/?p=2680>; rel=shortlink",
"X-CACHE-URI": "null cache"
}
}
},
{
"id": "616ca6d7-6e57-4c10-8b57-f6f3dabc0930",
"uuid": "616ca6d7-6e57-4c10-8b57-f6f3dabc0930",
"request": {
"method": "ANY"
},
"response": {
"status": 200,
"proxyBaseUrl": "http://www.example.com"
},
"priority": 10
}
]
}
}
URL的唯一清晰记录是在的最后一个条目中proxyBaseUrl
,并且鉴于我必须在控制台调用中指定一个URL,我现在担心,如果我在另一个域中进行记录,则每个域都将来自该域。
这意味着在回放模式下,WireMock将只能从一个域进行回放,而我必须重新启动它并将其指向另一个缓存才能回放不同的站点。这对于我的用例来说是行不通的,那么有没有办法解决这个问题?
(尽管我发现WireMock通常更易于使用,但我已经对Mountebank进行了一些工作,并且愿意切换到它。我对Mountebank的有限理解是,它也遇到相同的单域问题,尽管我很乐意(如果删除WireMock是前进的唯一方法,我很乐意交换到任何可靠的开放源代码API驱动的记录器HTTP代理)。
通过在请求中添加Host标头条件,可以为多个域提供WireMock存根。假设您的DNS
/主机文件将所有相关域都映射到WireMock服务器的IP,那么这将使其表现得像普通Web服务器上的虚拟主机。
主要问题是记录器不会将主机标头添加到您的映射中,因此您以后需要自己执行此操作,或者直接破解记录器以进行操作。
我一直在考虑为此添加更好的支持,因此请留意这个空间。
我还建议您检查一下Hoverfly,它似乎已经很好地解决了这个问题。
错误:未能通知依赖项解析侦听器。图书馆网站。谷歌。Androidgms:play services measurement base是由[15.0.2,15.0.2]、[15.0.4,15.0.4]]上的各种其他库请求的,但解析为15.0.4。禁用插件并使用检查依赖关系树/gradlew:app:dependencies。
我将WireMock作为独立进程启动: Java-jar wiremock-standalone-2 . 6 . 0 . jar-port 8080-v 还行。 当超文本传输协议请求内容后缀时 /api/profile/Favorite/WireMock必须返回存根响应。对所有其他请求必须通过WireMock忽略,并且必须转发到正式服。 我必须如何配置WireMock?
我正在使用Spring云合同创建集成测试。从配置到将存根jar添加到项目,一切都正常工作。因此,我发现尽管所有参数和标头都相同,但请求不匹配。 这是API测试 这是API调用的合约 即使我从合同请求中删除用户名,仍然收到相同的错误。 我需要为X-B3-ParentSpanId等创建标题来使其匹配吗?
我最近一直在玩WireMock(Standalone),觉得它很棒。今天,我注意到,据我所知,WireMock在记录模式下播放已经保存的响应的行为。 我想我可能弄错了,因为知道这一点非常重要,但我在文档中看不到它,除了这个: 笔记 记录器将忽略与已捕获的请求匹配的任何请求。 不清楚这是否意味着: 请求将被路由到第三方服务,并将返回实时响应。或 保存的响应将被返回,在这种情况下,第三方服务将不会受到
我想播放一首特定的歌曲取决于发送的参数。 在我的项目中,我有不同的播放列表,所以我想发送参数(它是一个数字,对应一个播放列表),然后只听那个播放列表中的歌曲。有什么想法可以这样做吗?提前道谢!
我正在使用最新版本的JMeter,并试图从JMeter发出POST请求,但我无法看到更改HTTP方法的下拉列表。你能告诉我为什么我看不到下拉列表吗? 请在下面找到JMeter的屏幕截图。它没有用于指定HTTP方法的下拉列表。