当前位置: 首页 > 知识库问答 >
问题:

Wiremock模板固定延迟毫秒

曾苗宣
2023-03-14

我正在尝试在延迟后在wiremock中生成响应,其中延迟来自传入的请求。e、 g请求中用户的姓氏是“delay_10000”,然后延迟10000毫秒,或者delay_20000,然后延迟20000。。。。。

{
  "request": {
    "method": "POST",
    "headers": {
      "SOAPAction": {
        "matches": "http://redacted"
      }
    },
    "bodyPatterns": [
      {
        "matchesXPath": {
          "expression": "//*[local-name()=\"family-name\"]/text()",
          "matches": "^delay_([0-9]+)$"
        }
      }
    ]
  },
  "response": {
    "status": 200,
    "bodyFileName": "verify.xml",
    "fixedDelayMilliseconds": "{{soapXPath request.body 'number(substring-after(//*[local-name()=\"family-name\"]/text(), \"delay_\"))'}}"
  }
}

谁能确认哪些字段可以模板化吗。doco建议使用“响应头和正文”,其他地方建议使用bodyFileName(我正在使用),但它没有说明其他响应字段是否可以模板化。

现在我看到了

 
2020-09-22 02:43:24.441 Verbose logging enabled
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" com.github.tomakehurst.wiremock.standalone.MappingFileException: Error loading file /home/wiremock/./mappings/equifax_generic_verify_identity_delay.json:
Cannot deserialize value of type `java.lang.Integer` from String "{{soapXPath request.body 'number(substring-after(//*[local-name()="family-name"]/text(), "timeout_"))'}}": not a valid Integer value
    at com.github.tomakehurst.wiremock.standalone.JsonFileMappingsSource.loadMappingsInto(JsonFileMappingsSource.java:121)
    at com.github.tomakehurst.wiremock.core.WireMockApp.loadMappingsUsing(WireMockApp.java:204)
    at com.github.tomakehurst.wiremock.core.WireMockApp.loadDefaultMappings(WireMockApp.java:200)
    at com.github.tomakehurst.wiremock.core.WireMockApp.<init>(WireMockApp.java:103)
    at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:73)
    at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.run(WireMockServerRunner.java:65)
    at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.main(WireMockServerRunner.java:134)
stream closed           

首先,我可以看到它在哪里被捕获,但不清楚它在哪里被抛出https://github . com/tomakehurst/wire mock/blob/master/src/main/Java/com/github/tomakehurst/wire mock/standalone/jsonfilemappings source . Java # L121

其次,我不清楚我是否只是驱动了电线,这不可能通过响应变压器,但可以通过扩展和“响应定义转换”(http://wiremock.org/docs/extending-wiremock/)

我可以用一组固定的延迟来解决这个问题——但是如果它是动态的,那就更好了。

感谢帮助!

共有2个答案

顾靖
2023-03-14

因此,我最初的假设是这是不可能的,因为模板的任何使用都将解析为字符串,但是 fixedDelayMillise秒需要一个数字,因此WireMock会将错误抛:(

我认为您可以使用自定义转换器来扩展WireMock,该转换器将解析响应正文中的延迟并将其添加为响应中的数字。有关更多信息,请查看扩展WireMock留档。编辑:我现在看到您已经达到了这个假设。我认为您是对的:D-这是通过转换器最容易实现的。

师谦
2023-03-14

我有一个类似的问题,我创建了一个响应定义扩展,它在提供时从标题中获取它。


class InjectDelayFromHeader : ResponseDefinitionTransformer() {
  override fun getName() = "InjectDelayFromHeader"

  override fun transform(
    request: Request,
    response: ResponseDefinition,
    files: FileSource, 
    parameters: Parameters
  ): ResponseDefinition {
    val delay = request.getHeader("X-WIREMOCK-DELAY")
    if (delay.isNullOrBlank()) {
      return response
    }
    return ResponseDefinitionBuilder.like(response).withFixedDelay(Integer.valueOf(delay)).build()
  }
}
 类似资料:
  • 我正在使用Wiremock删除移动客户端的一些API调用。 难以从请求中获取模板文件名。 有人能确认这是否甚至应该与Wiremck独立工作吗? 我有静态文件要返回,看起来不喜欢模板。 示例: 我使用以下Json配置wm: 然后当我尝试url时,http://localhost:9696/users/D8428899330我得到以下错误, HTTP错误:500访问问题/users/D84288993

  • 我有一个主题,它发出不同的和值 我想延迟值。如果发出了-值,而延迟是“延迟”,那么什么都不应该发生(应该是“无值更改”)。 考虑这张桌子 我希望情况很清楚。

  • 主要内容:实例,实例,实例,实例关键词: 分布延迟, 集总延迟, 路径延迟 之前大部分仿真都是验证数字电路功能的正确性,信号传输都是理想的,没有延迟。但是实际逻辑元器件和它们之间的传输路径都会存在延迟。因此,必须检查设计中的延迟是否满足实际电路的时序约束要求。可以用时序仿真的方法来检查时序(timing),即在仿真时向元件或路径中加入和实际相符的延迟信息,并进行相关计算来确定时序是否满足。 静态时序分析 (Static Timi

  • 其中surl是播放音乐的span元素的声音和音乐的url。有人知道如何播放声音而不延迟整个程序吗? 我尝试了一个相当大的文件,结果发现,虽然它确实在后台播放,但在启动声音和继续游戏之间仍有相当大的延迟。

  • 为了显示这种关系,让我们开始定义一个简单的模块,作为我们的示例应用程序的根模块。 app/app.module.ts 到目前为止,这是一个非常常见的模块,依赖于,有一个路由机制和两个组件:AppComponent和EagerComponent。 现在,让我们专注于定义导航的应用程序(AppComponent)的根组件。 app/app.component.ts import { Component

  • 问题内容: 我正在尝试使用新的React Lazy和Suspense创建后备加载组件。这很好用,但后备时间仅显示几毫秒。有没有办法增加额外的延迟或最短时间,因此我可以在渲染下一个组件之前显示该组件的动画? 现在懒导入 等待组件: 我可以做这样的事情吗? 问题答案: 函数应该返回对象的承诺,该对象由具有默认导出功能的模块返回。不会返回承诺,也不能那样使用。尽管任意承诺可以: 如果目标是提供 最小的