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

如何用WireMock对硬编码外部API进行集成测试?

解决WireMock拦截硬编码API的方案

核心逻辑

项目B硬编码了https://store-platform-dev/items,直接用WireMock的代理配置无效——因为请求会直接发向真实域名,根本不会经过WireMock。必须先把请求的目标域名导向WireMock服务,再由WireMock处理存根响应。

具体实现步骤

1. 本地Hosts映射(最简本地测试方案)

修改系统hosts文件,把硬编码域名指向WireMock所在的本地地址:

  • Windows路径:C:\Windows\System32\drivers\etc\hosts
  • Linux/macOS路径:/etc/hosts
    添加一行配置:
127.0.0.1 store-platform-dev

这样项目B发起的请求会被强制转到本地WireMock服务。

2. 启动WireMock并开启HTTPS

因为目标API是HTTPS协议,WireMock需要配置HTTPS端口,可直接用自带的自签名证书启动:

java -jar wiremock-jre8-standalone.jar --https-port 443 --print-all-network-traffic

如果443端口被占用,可替换为8443等其他端口,后续需同步调整相关配置。

3. 编写WireMock存根规则

现在请求会流向WireMock,直接编写匹配/items路径及对应请求头的存根即可,无需代理相关配置:

stubFor(get(urlEqualTo("/items"))
        .withHeader("X-Your-Request-Header", equalTo("Expected-Value")) // 匹配项目B带的请求头
        .willReturn(aResponse()
                .withStatus(200)
                .withHeader("Content-Type", "application/json")
                .withBody("{\"id\":1,\"name\":\"Mocked-Item\"}")));

4. 处理SSL证书验证问题(可选)

由于用了自签名证书,项目B可能抛出SSL信任错误,可二选一解决:

  • 将WireMock的自签名证书导入项目B的信任存储
  • 测试环境临时禁用SSL证书验证(仅用于测试,生产绝对禁止)

替代方案:CI环境用反向代理

如果本地Hosts映射不适用(比如CI/CD流水线),可使用Nginx做反向代理,将store-platform-dev的请求转发到WireMock:

server {
    listen 443 ssl;
    server_name store-platform-dev;
    ssl_certificate /path/to/wiremock/cert.pem;
    ssl_certificate_key /path/to/wiremock/key.pem;

    location /items {
        proxy_pass http://your-wiremock-server:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

同时在CI环境配置DNS解析,把store-platform-dev指向Nginx服务器即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:24:27