【问题标题】:Can WireMock play and record be used at the same time?WireMock 可以同时播放和录音吗?
【发布时间】:2016-11-22 13:49:29
【问题描述】:

我有一个连接到外部第三方 API 的应用程序,最近 API 的测试实例并不是特别可靠。这会停止开发进度并将我们的构建管道变为红色,因此我想添加一个 HTTP 记录代理来阻止这种情况发生。

我已经推荐了WireMock,并尝试了它的record and play features,它似乎非常好——它几乎是开箱即用的。我们只需将配置好的 URL 更改为外部服务,然后像这样记录:

java -jar wiremock-standalone-2.3.1.jar \
    --port 8080 \
    --proxy-all="https://test-api.example.com/" \
    --record-mappings \
    --verbose

这会在当前工作目录中创建缓存文件夹,然后可以通过杀死记录器并切换到播放来切换到播放模式:

java -jar wiremock-standalone-2.3.1.jar \
    --port 8080 \
    --verbose

但是,要在实践中使用它,我需要设置一个通过测试回归包运行的应用程序实例,以记录大量 API 使用情况,并开始使用,比如每天一次。然后我需要停止记录器并将缓存文件复制到播放过程中,然后重新启动播放过程。

这可能会奏效,但感觉就像很多活动部件,理想情况下我希望同时运行播放和录制。如果需要新的 API 调用(由于自然项目更改),这将允许自动刷新缓存,但默认情况下会在找到匹配项时播放。

这可能吗?我不是 Java 程序员,但假设如果要编写一个 WireMock 插件,它可能是可用的。如果这可以在控制台上完成,那就太好了,但是手册的措辞表明,维护者将播放和记录视为独立的东西。

我确实想知道是否可以切换到Mountebank,它看起来像it might support this,但结果是that play and record are separate modes here too。无论如何,我喜欢 WireMock 上手的容易程度,所以如果可能的话,我想坚持下去。

【问题讨论】:

    标签: java http-caching wiremock


    【解决方案1】:

    但是,WireMock 目前无法完全满足您的要求:

    1) 回放时可以使用--proxy-all 参数而不是--record-mappings。这将导致任何与现有存根映射(记录或其他方式)不匹配的请求都被代理到实际服务。

    2) 在收集到一些新记录的映射之后,将POST 发送到/__admin/mappings/reset 端点的解决方法可以让您非常接近您的目标。这会导致文件系统被扫描并(重新)加载所有映射。

    【讨论】:

    • 谢谢汤姆,这很有帮助。我目前只是处于调查阶段,但我会向同事指出这一点,以便我们实施。我正在考虑一个 Docker 容器,它提供一个记录器来刷新 API 缓存(每天运行一次),然后是一个回放模式来缓存真实的东西。重启提示很有用——我想在这里使用带有自动重启功能的 Supervisord,但你的方法感觉更优雅。
    • 不用担心。我正在考虑尽快完全重写记录器,所以我会牢记这个用例。
    • 太好了,我希望这通常很有用。
    • Tom,如果你有时间,你愿意接受look at this new question吗?我一直在构建一个需要 WM 从多个站点播放的系统,最近我担心如果不进行大量修改它就无法做到这一点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2011-05-12
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多