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

Wiremock重置方法:如何在Cucumber测试开始时重置Mock

在Cucumber测试中重置WireMock以准确统计Stub调用次数

要在Cucumber测试开始时重置WireMock,确保每次场景的Stub调用次数统计不受之前测试的影响,有两种常用实现方式:

方法一:利用Cucumber的@Before Hook直接调用WireMock API

在Cucumber的钩子类里添加前置方法,每次测试场景启动前重置WireMock的请求记录(或全部状态)。

Java示例代码

import io.cucumber.java.Before;
import com.github.tomakehurst.wiremock.WireMockServer;

public class WireMockTestHooks {
    private final WireMockServer wireMockServer;

    // 这里假设WireMockServer实例通过依赖注入或单例方式获取
    public WireMockTestHooks(WireMockServer wireMockServer) {
        this.wireMockServer = wireMockServer;
    }

    @Before
    public void resetWireMockBeforeScenario() {
        // 仅重置请求调用记录,保留已配置的Stub(推荐用于复用Stub的场景)
        wireMockServer.resetRequests();
        
        // 如果需要完全重置Stub配置+请求记录,用下面的方法:
        // wireMockServer.resetAll();
    }
}

方法二:通过WireMock管理HTTP API重置(适合远程WireMock服务)

如果你的WireMock是独立部署的远程服务,无法直接调用Java API,可以通过发送HTTP请求到WireMock的管理端点完成重置。

Java示例代码

import io.cucumber.java.Before;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class WireMockRemoteHooks {
    private static final String WIREMOCK_ADMIN_URL = "http://your-wiremock-host:port/__admin";

    @Before
    public void resetRemoteWireMock() throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        
        // 仅重置请求记录的接口
        HttpRequest resetRequest = HttpRequest.newBuilder()
                .uri(URI.create(WIREMOCK_ADMIN_URL + "/requests/reset"))
                .POST(HttpRequest.BodyPublishers.noBody())
                .build();
        
        client.send(resetRequest, HttpResponse.BodyHandlers.discarding());
        
        // 如果要完全重置Stub+请求记录,调用这个接口:
        // URI.create(WIREMOCK_ADMIN_URL + "/reset")
    }
}

验证调用次数

重置完成后,在测试步骤里就可以准确统计当前场景的Stub调用次数了:

import io.cucumber.java.en.Then;
import static com.github.tomakehurst.wiremock.client.WireMock.*;

public class TestStepDefinitions {
    @Then("the stub for path {string} should be called {int} times")
    public void checkStubInvocationCount(String targetPath, int expectedTimes) {
        verify(expectedTimes, getRequestedFor(urlEqualTo(targetPath)));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:05:33