为了账号安全,请及时绑定邮箱和手机立即绑定

Travis CI 在尝试测试 Golang HTTP Server 时失败

Travis CI 在尝试测试 Golang HTTP Server 时失败

Go
拉丁的传说 2022-01-17 16:49:55
我对 travis 和 Go 很陌生。我对 https 服务器进行了测试,它在我的本地计算机上运行时运行良好,但由于尝试连接到服务器时出错,go test -v ./...它在 Travis 上的大部分时间都会失败。getsocketopt: connection refused它应该在听https://localhost:8081。我.travis.yml能做些什么来防止这种情况发生吗?这是我的 .travis.ymllanguage: gogo: - 1.6 - tipmatrix:  allow_failures: - go: tipbefore_install: - go get -v github.com/golang/lint/golintinstall: - go get -v -d -t ./...这是我的服务器创建代码:func (webserver *WebServer) Start(keyLocation string, certLocation string) <-chan error {    errors := make(chan error, 1)    go func() {        defer close(errors)        errors <- http.ListenAndServeTLS(fmt.Sprintf(":%v", webserver.config.WebServerPort), certLocation, keyLocation, nil)    }()    return errors}和客户端代码:func createHTTPClient(t *testing.T) *http.Client {    t.Log("Creating a test client...")    tr := &http.Transport {        TLSClientConfig: &tls.Config {InsecureSkipVerify: true},    }    t.Log("Created a test client")    return &http.Client {Transport: tr}}与客户的样品请求request, _ := http.NewRequest(httpmethod, fmt.Sprintf("https://localhost:%d/token", port), nil)client.Do(request)在测试中启动服务器的示例errors := server.Start(testKeyLocation, testCertLocation)//Handle errors from servergo func() {    select {        case err := <-errors:            if err != nil {                t.Fatalf("Error with server: %s", err.Error())            }    }}()
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

您在启动服务器和尝试连接之间没有同步。在启动服务器后添加一个time.Sleep应该突出这个问题。

减少服务器未准备好的窗口的一种方法是net.Listener同步创建,然后http.Server在启动服务器之前将打开的侦听器添加到配置中。可以为您执行此httptest.Server操作,以及绑定到随机端口以防止测试期间发生冲突,并使用本地测试 TLS 证书。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号