首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确测试go中的http路由

正确测试go中的http路由
EN

Stack Overflow用户
提问于 2017-07-24 18:51:56
回答 1查看 166关注 0票数 0

我有5个端点,其中有方法,如GET,POST,和DELETE来测试。我在构建的测试包中使用go编写了测试用例。我担心我错过了一些在我看来并不引人注目的案例,我已经在代码审查中为我的测试用例进行了评审,但是我没有得到任何响应。我还跟踪了这篇文章在golang中测试HTTP路由。所有这些测试用例都在检查响应代码。

问题是,我的大多数测试用例都遵循类似的模式,在这种模式下,我以不同的格式发布数据并检查响应代码。我强烈地感到,当我将API推到prod时,我遗漏了一些会破坏API的东西。我需要一些关于测试这些路线的洞察力,这样我才能有信心推动api去刺激。

main_test.go

代码语言:javascript
复制
func TestSigHandler(t *testing.T){

    test_cases := []string{"2021205"}  
    // GET Testing
    for _, method := range test_cases{
        usersUrl = fmt.Sprintf("%s/1/sig/id/%s", server.URL, method) //Grab the address for the API endpoint
        request, err := http.NewRequest("GET", usersUrl, nil)
        res, err := http.DefaultClient.Do(request)

        if err != nil {
            t.Error(err) //Something is wrong while sending request
        }

        if res.StatusCode != 200  {
            t.Errorf("Something went wrong : ", res.StatusCode) //Uh-oh this means our test failed
        }
    }

    // POST Testing
        sig := []byte( `{
        "raw": "a new sig"
    }`)
        usersUrl = fmt.Sprintf("%s/1/sig/id/2021205", server.URL) //Grab the address for the API endpoint
        request, err := http.NewRequest("POST", usersUrl, bytes.NewBuffer(sig))
        if err != nil{
            t.Error(err)
        }
        request.Header.Set("Content-Type", "application/json")
        res, err := http.DefaultClient.Do(request)

        if err != nil {
            t.Error(err) //Something is wrong while sending request
        }

        if res.StatusCode != 200  {
            t.Errorf(" Something Went Wrong: ", res.StatusCode) //Uh-oh this means our test failed
        }

        // DELETE Testing

        sigs_delete_cases := []string{ "1000345"}
        for _, sig_to_be_deleted := range sigs_delete_cases{
            usersUrl = fmt.Sprintf("%s/1/sig/id/%s", server.URL, sig_to_be_deleted) //Grab the address for the API endpoint
            request, err := http.NewRequest("DELETE", usersUrl, nil)
            res, err := http.DefaultClient.Do(request)

            if err != nil {
                t.Error(err) //Something is wrong while sending request
            }

            if res.StatusCode != 200  {
                t.Errorf("Tried to delete a reserved Id : ", res.StatusCode) //Uh-oh this means our test failed
            }
        }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 18:06:38

我喜欢这样做:

  1. 建立持续集成。如果您的项目是开放源码的,您可以使用像特拉维斯CI这样的服务--它的安装非常容易。这有助于您了解更改如何影响代码。
  2. 设置代码测试覆盖范围。它允许您查看哪些源代码行包含了测试,哪些不是,哪些地方会出现非常可能的bug。当然,代码覆盖率工具不是万灵药。如果行被选中,这并不意味着它是绝对安全的,而且它不会在其他输入中失败。但是它对维护好的代码和寻找bug有很大帮助。对于开放源码,您可以使用coveralls.io。它有一个特殊的格韦尔斯插件。
  3. 为了帮助解决上述问题,您可以使用所谓的模糊测试--随机输入的探索性测试来找出根本原因。有标准的https://golang.org/pkg/testing/quick/包和非标准的包https://github.com/dvyukov/go-fuzz

然后我尝试测试,它们都是阳性的和阴性的。我试着用错误、超时、不正确的答复来检查情况。

在我的测试中,我像往常一样使用了客户机http,所以使用了httptest包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45287975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档