当前位置: 首页 > 面试题库 >

如何在Go中测试HTTP调用

钮瀚
2023-03-14
问题内容

我有以下代码:

// HTTPPost to post json messages to the specified url
func HTTPPost(message interface{}, url string) (*http.Response, error) {
    jsonValue, err := json.Marshal(message)
    if err != nil {
        logger.Error("Cannot Convert to JSON: ", err)
        return nil, err
    }
    logger.Info("Calling http post with url: ", url)
    resp, err := getClient().Post(url, "application/json", bytes.NewBuffer(jsonValue))
    if err != nil {
        logger.Error("Cannot post to the url: ", url, err)
        return nil, err
    }
    err = IsErrorResp(resp, url)
    return resp, err
}

我想为此编写测试,但不确定如何使用httptest包。


问题答案:

在这里看看:

https://golang.org/pkg/net/http/httptest/#example_Server

基本上,您可以使用httptest.NewServer函数创建一个新的“模拟” http服务器。

您可以让模拟服务器返回测试所需的任何响应,还可以让模拟服务器存储HTTPPost函数发出的请求以对其进行断言。

func TestYourHTTPPost(t *testing.T){

    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, `response from the mock server goes here`)
        // you can also inspect the contents of r (the request) to assert over it
    }))
    defer ts.Close()

    mockServerURL = ts.URL

    message := "the message you want to test"

    resp, err := HTTPPost(message, mockServerURL)

    // assert over resp and err here
}


 类似资料:
  • 问题内容: 我正在Go中运行一个带有打印内容的语句的测试(即用于测试的调试),但是它不打印任何内容。 当我对此文件运行go test时,输出为: 据我所知,真正使其打印的唯一方法是通过t.Error()进行打印,如下所示: 哪个输出: 我已经用Google搜索并浏览了手册,但没有找到任何东西。 问题答案: 结构和都具有和方法,这听起来似乎是您想要的。和分别类似于和。 在此处查看更多详细信息:htt

  • 我在Go中运行一个测试,用一个语句打印一些东西(例如,用于测试的调试),但是它没有打印任何东西。 当我对此文件运行go测试时,输出如下: 据我所知,真正让它打印出来的唯一方法是通过t.Error()打印出来,如下所示: 其输出如下: 我用谷歌搜索并查看了手册,但没有找到任何东西。

  • 我想查看在Chrome中发送的HTTP POST数据。 数据现在在内存中,我有能力重新提交表单。 我知道如果我重新提交,服务器将抛出一个错误。我是否可以查看Chrome内存中的数据?

  • 问题内容: 是否有合法的方式写下我打算以后编写完整测试功能的测试用例?就像即将进行的mochajs测试一样? 问题答案: 软件包文档使用以下示例描述了这样的示例: 如果不适用于调用 T和 B的Skip方法,则可以跳过测试和基准测试: 如果您启动带有标志的消息,则将打印您提供的消息(在此示例中,您还需要提供标志以查看跳过消息)。

  • 问题内容: 我从其他地方的日志中附带了http响应标头。在我的日志文件中,我有类似以下内容: 给定上面的字符串,我如何将其解析为net / http中所述的Header对象。一种方法是自己分割字符串并映射键,值…但是我希望避免手动操作,而使用标准的(或维护良好的第3方)库来解析它…任何指针? 问题答案: 内置的解析器位于textproto中。您可以直接使用它,也可以添加伪造的HTTP请求标头并在h

  • 问题内容: 在某些情况下,我具有记录错误的功能: 现在,在测试文件中,我想检查此函数的输出错误: 如何访问日志?我试图放置一个缓冲区,但是没有用。在不更改我的readByte函数代码的情况下捕获此日志的正确方法是什么? 问题答案: 例如, : 输出: