使用GAE测试时如何获取主机名?

时间:2018-07-16 18:55:39

标签: unit-testing google-app-engine go

使用本地开发服务器时,默认服务的端口始终默认为8080。但是,当我使用aetest时,端口号始终会更改。单元测试指定--port=0时用于启动本地服务器的命令。但是,由于它位于应用程序引擎软件包中,因此我不想对其进行修改。我也无法手动指定端口号,因为测试是使用go test而不是dev_appserver.py运行的。

我需要的

我正在测试的代码需要来自其他微服务的特定响应才能成功继续执行。为了继续对此微服务进行测试,我试图建立一个伪造的端点来向我提供所需的响应。

正在测试的代码示例

func Sample(c *gin.Context) {
    ...
    url := os.Getenv("some_service") + "/some-endpoint"
    req, err := http.NewRequest("POST", url, r.Body)
    if err != nil {
        // error handling
    }
    ...
}

我需要测试当前服务的主机,以便能够为其与之交互的另一个微服务设置虚拟环境变量。主机网址应为当前正在测试的服务的网址。通过这种方式,我可以使用工厂响应,因为我没有在这组测试中测试其他服务。

我尝试过的事情

  • 使用appengine.DefaultVersionHostname(),但这将返回一个空字符串
  • 使用我创建的http请求从中获取url,但是它不包含所需的主机(只是路径)

问题

在GAE中运行单元测试时,是否有任何方法可以获取本地开发服务器的主机?或者,是否可以指定用于App Engine测试的端口号?

1 个答案:

答案 0 :(得分:1)

我能够通过首先获取模块列表来实现自己的目标。 (很可能是 您要查找的服务名称为default,但是我仍然选择使用列表中的名字)。使用模块名称,我得到了模块的默认版本。使用这两个(以及一个空的实例名称),我能够获得提供了我想要的值的模块主机名。

代码示例如下所示:

    ml, - := module.List(ctx)
    mv, _ := module.DefaultVersion(ctx, ml[0])
    hn, _ := appengine.ModuleHostname(ctx, ml[0], mv, "")

感谢Dan为我指出正确的方向。