HTTP 集成测试
HTTP integration tests
我有一个用 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)
我有一个用 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)