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
相关产品推荐
相关产品推荐

