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

带DNS解析的Mock Web服务器搭建:Rust服务端到端集成测试咨询

用Docker/docker-compose实现Rust服务的端到端集成测试(Mock后端+DNS)

完全可以用Docker或docker-compose搭建这套测试环境,下面是落地的具体方案:

一、Mock DNS服务配置

用dnsmasq这类轻量DNS工具做Mock,核心规则:

  • 仅对foo.example.com返回本地Mock后端的容器IP
  • 其他所有DNS请求直接返回错误,避免测试时意外访问真实后端

创建dnsmasq.conf配置文件:

# 把foo.example.com解析到Mock后端的容器IP
address=/foo.example.com/172.20.0.3
# 所有其他域名解析直接返回错误
server=/./#

二、Mock后端服务配置

用简单的HTTP服务实现Mock逻辑,这里用Python Flask举例(也可以用Rust的warp/tower_http快速搭建):

  • 绑定容器内所有IP,监听80端口
  • 仅处理Host头为foo.example.com的/bar请求,返回预定义响应
  • 其他请求直接返回错误,方便校验服务是否只访问了预期路径

编写mock_server.py:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/bar', methods=['GET'])
def bar():
    if request.host == 'foo.example.com':
        return jsonify({"data": "mock-success-data"})
    return "非法Host头", 403

@app.errorhandler(404)
def not_found(e):
    return "未预期的请求路径", 404

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

对应的Dockerfile:

FROM python:3.11-slim
WORKDIR /app
COPY mock_server.py .
RUN pip install flask
CMD ["python", "mock_server.py"]

三、用docker-compose编排测试环境

创建docker-compose.test.yml,把Rust服务、Mock DNS、Mock后端整合到同一个网络,强制Rust服务使用Mock DNS:

version: '3.8'
services:
  mock-dns:
    image: strm/dnsmasq
    volumes:
      - ./dnsmasq.conf:/etc/dnsmasq.conf
    networks:
      test-net:
        ipv4_address: 172.20.0.2

  mock-backend:
    build: ./mock-backend
    networks:
      test-net:
        ipv4_address: 172.20.0.3

  my-rust-service:
    build: ./my-rust-service
    ports:
      - "3000:3000"
    dns: 172.20.0.2  # 强制Rust服务用Mock DNS解析域名
    networks:
      test-net:
        ipv4_address: 172.20.0.4

networks:
  test-net:
    ipam:
      config:
        - subnet: 172.20.0.0/24

四、执行端到端测试

  1. 启动测试环境:
docker-compose -f docker-compose.test.yml up --build -d
  1. 发送测试请求:
curl http://localhost:3000/foo/bar
  1. 验证测试结果:
  • 检查响应内容是否等于Mock后端返回的{"data": "mock-success-data"}
  • 查看Mock DNS日志:确认只有foo.example.com的解析请求,无其他非法查询
  • 查看Mock后端日志:确认只收到Host: foo.example.com的/bar请求,无其他异常请求
  1. 测试完成后清理环境:
docker-compose -f docker-compose.test.yml down

额外优化点

  • 可以用Rust的reqwest+assert_cmd编写自动化测试脚本,集成到CI/CD流程自动执行
  • 如果觉得dnsmasq太重,也可以直接在Rust服务的环境变量里硬指定后端IP,但Mock DNS更贴近真实生产场景
  • 用minikube也能实现,但docker-compose足够轻量,满足测试需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:34:53