HTTP集成测试



我有一个用Go写的小服务。我已经用httptest等进行了测试,但是,我正在模拟数据库等…

我想做什么:

  • 启动我在生产中使用的相同服务器,使用空数据库
  • 使用HTTP
  • 对它运行测试
  • 获取这些测试的覆盖率

空数据库部分不是问题,因为我通过环境变量使一切都可配置。

向它发出请求也不是问题,因为它只是标准的Go代码…

问题是:我不知道如何以一种可以测量它(及其子包)覆盖率的方式启动服务器。此外,主服务器代码在main函数中…我甚至不知道我是否可以从其他地方调用它(我尝试了标准的方式,但没有使用反射和类似的东西)。

我刚开始使用Go,所以,这可能是无稽之谈。

您可以在测试中启动http服务器,并向它发出请求。

为了更方便,您可以在测试中使用httptest.Server,并将主http.Handler赋给它。httptest.Server有一些方法来更好地控制服务器的启动和停止,并提供了一个URL字段来给您服务器的本地地址。
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, client")
}))
defer ts.Close()
res, err := http.Get(ts.URL)
if err != nil {
    log.Fatal(err)
}
greeting, err := ioutil.ReadAll(res.Body)
res.Body.Close()
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%s", greeting)

最新更新