Go语言怎么做端到端测试_Go语言E2E端到端测试教程【实用】

张开发
2026/4/15 0:54:02 15 分钟阅读

分享文章

Go语言怎么做端到端测试_Go语言E2E端到端测试教程【实用】
TestMain 统一启停服务用 localhost:0 自动分配端口并轮询健康检查mock 外部依赖用 httptest.NewServerE2E 优先选 httptest 而非浏览器工具并行测试需隔离数据库与状态。TestMain 里启动服务别在每个 test 函数里重复启停Go 的 E2E 测试不是写几个 http.Get 就完事——它必须真实跑起服务、走完整链路。如果每个 func TestXXX(t *testing.T) 都自己 http.ListenAndServe轻则端口冲突报 address already in use重则并发测试全挂。用 TestMain 统一管理生命周期一次启动、所有测试复用、退出时统一关掉绑定 localhost:0让系统自动分配空闲端口避免硬编码 :8080启动后必须轮询就绪比如 http.Get(srv.Addr /health)不能 time.Sleep(2 * time.Second) —— 本地快不代表 CI 快尤其 Docker 环境下冷启动可能超 1.5 秒记得最后调 os.Exit(code)否则 go test 可能卡住不返回mock 外部依赖别调真实 Stripe / Slack / 支付宝接口线上第三方 API 响应慢、限流、结构突变、甚至维护下线都会让 E2E 测试随机失败。这不是你代码的问题是测试设计错了。用 httptest.NewServer 替代真实下游它返回的是真实 *http.Serverhttp.Client 能直接访问无感知替换把 mock 地址注入你的服务比如通过构造函数参数 NewApp(WithPaymentAPI(mock.URL)) 或环境变量别试图在 httptest.NewServer 里读请求 body 做动态响应——它只支持预设返回需要逻辑分支得自己写个简易 handler 判断 path 或 query用 httptest.Server 而不是 selenium/rod除非真要测 UI 渲染90% 的 Go 后端 E2E 测试根本不需要打开浏览器。只要验证 HTTP 接口行为、状态码、JSON 结构、上下游数据流转是否正确httptest.Server 就够了且稳定、快、无依赖。httptest.NewServer 是标准库零额外安装CI 里开箱即用如果非要用 rod 或 selenium比如测登录页跳转、OAuth 回调、JS 表单提交注意Page.MustNavigate 后不能立刻 Page.MustElement得加 page.WaitLoad() 或 page.WaitStable()rod 的 MustElement 是“查不到就 panic”不是“等不到就重试”真正可靠的是 page.Element(...).WaitE(rod.EvalOnStart)并行测试时数据库和状态必须隔离E2E 测试一旦涉及写数据库t.Parallel() 就会互相污染——A 测试删了用户B 测试紧接着查就 404或者 A 插入 ID1B 也插 ID1 报唯一键冲突。 VWO 一个A/B测试工具

更多文章