当前位置: 首页 > 面试题库 >

WireMock可以播放来自多个域的请求吗?

颛孙越
2023-03-14
问题内容

我正在构建一个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方法的下拉列表。