如何从存根生成动态响应而又不重新生成它?

时间:2018-10-12 06:22:52

标签: stub spring-cloud-contract

我知道Groovy DSL能够生成随机值。 我已经使用了存根运行程序服务器,以便可以从服务器中找到存根并获得响应。但是,当我刷新浏览器时,我再次得到相同的响应。 Groovy DSL只是生成一个静态存根,并且总是返回与我请求相同的响应。

在这种情况下,如何在不重新生成存根的情况下获得随机响应?

一年前,有人曾问过类似的问题,它的答案是不可能的。还是不可能,还是现在有办法做到?

1 个答案:

答案 0 :(得分:0)

您将必须创建自己的WireMock扩展。检查文档的这一部分:https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#_registering_your_own_wiremock_extension

  

95.5.6注册自己的WireMock扩展WireMock允许您注册自定义扩展。默认情况下,Spring Cloud Contract   注册转换器,以便您引用来自   响应。如果您想提供自己的扩展名,可以注册   的实现   org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions   接口。由于我们使用spring.factories扩展方法,因此您   可以在META-INF / spring.factories文件中创建类似于   以下:

org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions=\
org.springframework.cloud.contract.stubrunner.provider.wiremock.TestWireMockExtensions
org.springframework.cloud.contract.spec.ContractConverter=\
org.springframework.cloud.contract.stubrunner.TestCustomYamlContractConverter
  

以下是自定义扩展的示例:

TestWireMockExtensions.groovy.

package org.springframework.cloud.contract.verifier.dsl.wiremock

import com.github.tomakehurst.wiremock.extension.Extension

/**  * Extension that registers the default transformer and the custom one  */ class TestWireMockExtensions implements WireMockExtensions {     @Override   List<Extension> extensions() {      return [
                new DefaultResponseTransformer(),
                new CustomExtension()       ]   } }

class CustomExtension implements Extension {

    @Override   String getName() {      return "foo-transformer"    } }

您必须创建一个扩展程序,以修改响应并生成响应。该扩展必须在消费者和生产者端均可用。