You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置WireMock动态端口解决Spring Boot集成测试Jenkins端口冲突

实现WireMock动态端口配置方案

1. 移除固定端口配置,启用动态端口

删除@WireMockTest注解中的httpPort固定端口配置,默认会自动分配操作系统空闲端口,通过@WireMockPort注解注入实际启动的端口:

// 不指定httpPort则默认启用动态端口
@WireMockTest
class TestSomething {
    // 注入WireMock实际监听端口
    @WireMockPort
    private Integer wiremockPort;

2. 动态覆盖下游服务配置

使用Spring Boot的@DynamicPropertySource注解,在测试上下文加载时动态替换yml中的下游服务地址,无需修改原有yml配置:

@DynamicPropertySource
    static void setDownstreamServiceUrl(DynamicPropertyRegistry registry) {
        String wiremockBaseUrl = "http://localhost:" + wiremockPort;
        registry.add("downstream.service.getSomeData.url", () -> wiremockBaseUrl);
        registry.add("downstream.service.getAuthToken.url", () -> wiremockBaseUrl);
        registry.add("downstream.service.someOtherClientMethod.url", () -> wiremockBaseUrl);
    }

3. 多测试类复用配置(可选)

如果有3个测试类都需要用到WireMock,可将通用配置抽取为抽象父类,避免重复编码:

@WireMockTest
public abstract class AbstractWireMockIntegrationTest {
    @WireMockPort
    protected Integer wiremockPort;

    @DynamicPropertySource
    static void configureDownstreamUrls(DynamicPropertyRegistry registry) {
        String baseUrl = "http://localhost:" + wiremockPort;
        registry.add("downstream.service.getSomeData.url", () -> baseUrl);
        registry.add("downstream.service.getAuthToken.url", () -> baseUrl);
        registry.add("downstream.service.someOtherClientMethod.url", () -> baseUrl);
    }
}

// 业务测试类直接继承即可
class TestSomething extends AbstractWireMockIntegrationTest {
    // 原有测试逻辑无需修改
}

修改完成后,每次测试启动都会自动获取未被占用的端口,彻底解决Jenkins多任务并行时的端口冲突问题。


内容的提问来源于stack exchange,提问作者Ulukbek Abylbekov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:54:08