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

如何在Cucumber测试类中启动虚拟REST端点以测试回调流程

在Cucumber测试中启动虚拟REST端点处理服务器回调的方案

要在Cucumber测试里搭建可被目标服务器调用的虚拟回调端点,最常用的工具是WireMock——它能快速启动轻量级HTTP服务器,模拟REST接口并记录请求。下面是具体实现步骤:

1. 添加依赖

在项目构建文件中引入WireMock依赖(以Maven为例):

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8</artifactId>
    <version>2.35.0</version>
    <scope>test</scope>
</dependency>

2. 用Cucumber Hooks管理WireMock生命周期

创建Hook类,在测试场景前后启动/停止WireMock,确保每个场景环境干净:

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

public class WireMockHooks {
    private static WireMockServer wireMockServer;

    @Before
    public void startWireMock() {
        // 启动WireMock,监听8081端口
        wireMockServer = new WireMockServer(8081);
        wireMockServer.start();
        com.github.tomakehurst.wiremock.client.WireMock.configureFor("localhost", 8081);
    }

    @After
    public void stopWireMock() {
        if (wireMockServer != null) {
            wireMockServer.stop();
        }
    }
}

3. 定义虚拟回调端点的行为

在Step Definitions类中,提前定义回调端点的预期响应逻辑:

import com.github.tomakehurst.wiremock.client.WireMock;
import io.cucumber.java.en.Given;

public class CallbackStepDefinitions {

    @Given("一个可接收回调的虚拟端点已准备好")
    public void setupCallbackEndpoint() {
        // 模拟POST /callback端点,返回200成功响应
        WireMock.stubFor(WireMock.post(WireMock.urlEqualTo("/callback"))
                .willReturn(WireMock.aResponse()
                        .withStatus(200)
                        .withHeader("Content-Type", "application/json")
                        .withBody("{\"status\":\"success\"}")));
    }
}

4. 构造回调URL并调用服务器API

在测试步骤中,将WireMock的地址作为回调URL传入目标服务器API:

import io.cucumber.java.en.When;
import org.springframework.web.client.RestTemplate;

public class ServerApiStepDefinitions {
    private RestTemplate restTemplate = new RestTemplate();

    @When("调用服务器的API并传入回调URL")
    public void callServerApiWithCallback() {
        // 构造回调URL:WireMock地址 + 端点路径
        String callbackUrl = "http://localhost:8081/callback";
        // 假设服务器API为POST请求,携带回调URL参数
        ServerRequest request = new ServerRequest("test-data", callbackUrl);
        restTemplate.postForObject("http://target-server:8080/api/trigger", request, String.class);
    }
}

5. 验证服务器是否正确调用回调

在断言步骤中,检查WireMock是否收到预期的回调请求:

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

public class CallbackVerificationStepDefinitions {

    @Then("服务器应该成功调用回调端点")
    public void verifyCallbackWasCalled() {
        // 验证是否有1次符合条件的POST请求发送到/callback
        WireMock.verify(1, WireMock.postRequestedFor(WireMock.urlEqualTo("/callback"))
                .withHeader("Content-Type", WireMock.equalTo("application/json")));
    }
}

替代方案:使用OkHttp的MockWebServer

如果项目已依赖OkHttp,也可使用MockWebServer实现相同逻辑,核心流程一致:启动临时服务器、定义响应规则、验证请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:30