【问题标题】:Spring Cloud Contract Stub Runner : how to configure Wiremock server?Spring Cloud Contract Stub Runner:如何配置 Wiremock 服务器?
【发布时间】:2020-06-22 18:36:04
【问题描述】:
package com.example.stubrunner;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.contract.stubrunner.server.EnableStubRunnerServer;
import org.springframework.cloud.contract.wiremock.WireMockConfigurationCustomizer;
import org.springframework.context.annotation.Bean;


@SpringBootApplication
@EnableStubRunnerServer
public class StubRunnerApplication {

    public static void main(String[] args) {
        SpringApplication.run(StubRunnerApplication.class, args);
    }


    @Bean
    public WireMockConfigurationCustomizer optionsCustomizer() {

        WireMockConfigurationCustomizer customizer = new WireMockConfigurationCustomizer() {
            @Override
            public void customize(com.github.tomakehurst.wiremock.core.WireMockConfiguration config) {
                config.jettyHeaderBufferSize(16384);
            }
        };

        return customizer;
    }

}

上面的customizer bean 似乎没有任何作用。此功能没有太多文档。使用安全令牌标头,Wiremock (jettty) 的默认值太少了。

我使用 start.spring.io 和(当前)默认值:spring boot 2.5.5。和春云Hoxton.SR3。

java -jar wiremock-standalone-2.26.3.jar --jetty-header-buffer-size 16384

工作得很好。

编辑:

package com.example.wiremockrunnerlatest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.contract.stubrunner.server.EnableStubRunnerServer;
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner;

@SpringBootApplication
@EnableStubRunnerServer
@AutoConfigureStubRunner(httpServerStubConfigurer = HeaderSizeConfigurer.class)
public class WiremockRunnerLatestApplication {

    public static void main(String[] args) {
        SpringApplication.run(WiremockRunnerLatestApplication.class, args);
    }

}

...然后:

public class HeaderSizeConfigurer extends WireMockHttpServerStubConfigurer {

    @Override
    public WireMockConfiguration configure(WireMockConfiguration httpStubConfiguration, HttpServerStubConfiguration httpServerStubConfiguration) {

        return httpStubConfiguration.jettyHeaderBufferSize(16384);
    }
}

【问题讨论】:

  • 我们现在的答案是,单独使用普通的 Wiremock,忘记 SCC 存根运行器。 “stub runner”的想法很好,但在配置选项方面并不完整。
  • 您使用了错误的定制器。请查看cloud.spring.io/spring-cloud-contract/reference/html/…,我们在其中描述了如何使用带有wiremock 配置的stub runner。 " 附带一个可以为 WireMock 扩展的实现:org.springframework.cloud.contract.stubrunner.provider.wiremock.WireMockHttpServerStubConfigurer。在 configure 方法中,您可以为给定的存根提供自己的自定义配置。用例可能是在 HTTPS 端口上为给定的工件 ID 启动 WireMock。"
  • 编辑后添加:没有帮助。是否有任何工作示例、测试或我可以检查的东西?

标签: wiremock spring-cloud-contract


【解决方案1】:

您是否尝试过使用@AutoConfigureStubRunner 注解?

只需在您的测试中添加以下注释:

@AutoConfigureStubRunner(
    stubsMode = StubRunnerProperties.StubsMode.CLASSPATH,
    ids = "com.org:servicename:+:stubs")

这里的 stubsmode 是类路径,这意味着存根将在类路径中可用。

为此添加:

testCompile("com.org:servicename:+:stubs") { transitive = false }

如果您使用 gradle 或添加来自 maven 的等价物,请在您的构建中。 这将自动从远程下载应用程序并配置wiremock服务器以使存根可用。

运行 Spring Boot 测试的完整配置如下:

@RunWith(SpringRunner.class)
@SpringBootTest(
    webEnvironment = SpringBootTest.WebEnvironment.MOCK,
    classes = HiltiIntegrationApplication.class)
@AutoConfigureStubRunner(
    stubsMode = StubRunnerProperties.StubsMode.CLASSPATH,
    ids = "com.ict:organization-management:+:stubs")
@DirtiesContext 

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2019-06-23
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多