gofight 支援檔案上傳測試

栏目: Go · 发布时间: 5年前

gofight 支援檔案上傳測試 gofight 是一套用 Go 語言 撰寫的 HTTP API 測試套件,之前已經寫過一篇介紹用法,當時候尚未支援檔案上傳測試,也就是假設寫了一個 檔案上傳的 http handler 在專案內如何寫測試,底下來看看該如何使用。

準備環境

首先需要一個測試檔案,通常會在專案底下建立 testdata 目錄,裡面放置一個叫 hello.txt 檔案,內容為 world 。接著安裝 gofight 套件,可以用團隊內喜愛的 vendor 工具,我個人偏好 govendor
$ govendor fetch github.com/kardianos/govendor
或
$ go get -u github.com/kardianos/govendor

檔案上傳範例

這邊用 gin 框架當作範例,如果您用其他框架只要支援 http.HandlerFunc 都可以使用。
func gintFileUploadHandler(c *gin.Context) {
    ip := c.ClientIP()
    file, err := c.FormFile("test")
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": err.Error(),
        })
        return
    }
    foo := c.PostForm("foo")
    bar := c.PostForm("bar")
    c.JSON(http.StatusOK, gin.H{
        "hello":    "world",
        "filename": file.Filename,
        "foo":      foo,
        "bar":      bar,
        "ip":       ip,
    })
}

// GinEngine is gin router.
func GinEngine() *gin.Engine {
    gin.SetMode(gin.TestMode)
    r := gin.New()
    r.POST("/upload", gintFileUploadHandler)

    return r
}
上面例子可以發現,測試端需要傳兩個 post 參數,加上一個檔案 (檔名為 test),底下看看 gofight 怎麼寫測試。

檔案上傳測試

gofight 現在支援一個函式叫 SetFileFromPath 此 func 支援三個參數。
  1. 檔案讀取路徑
  2. POST 檔案名稱
  3. POST 參數
第一個就是測試檔案要從哪個實體路徑讀取,假設放在 testdata/hello.txt 那該參數就是填寫 testdata/hello.txt ,請注意這是相對於 *_test.go 檔案路徑,第二個參數就是定義該檔案的 post 參數,請依照 handler 內的 c.FormFile("test") 來決定變數名稱,第三個參數可有可無,也就是檔案上傳頁面,可能會需要上傳其他 post 參數,這時候就要寫在第三個參數,看底下實際例子:
func TestUploadFile(t *testing.T) {
    r := New()

    r.POST("/upload").
        SetFileFromPath("fixtures/hello.txt", "test", H{
            "foo": "bar",
            "bar": "foo",
        }).
        Run(framework.GinEngine(), func(r HTTPResponse, rq HTTPRequest) {
            data := []byte(r.Body.String())

            hello := gjson.GetBytes(data, "hello")
            filename := gjson.GetBytes(data, "filename")
            foo := gjson.GetBytes(data, "foo")
            bar := gjson.GetBytes(data, "bar")
            ip := gjson.GetBytes(data, "ip")

            assert.Equal(t, "world", hello.String())
            assert.Equal(t, "hello.txt", filename.String())
            assert.Equal(t, "bar", foo.String())
            assert.Equal(t, "foo", bar.String())
            assert.Equal(t, "", ip.String())
            assert.Equal(t, http.StatusOK, r.Code)
            assert.Equal(t, "application/json; charset=utf-8", r.HeaderMap.Get("Content-Type"))
        })
}
可以看到上面例子正確拿到檔案上傳資料,並且測試成功。

心得

其實這類測試 HTTP Handler API 的套件相當多,當時就自幹一套當作練習,後來每個 Go 專案,我個人都用自己寫的這套,測試起來相當方便。更多詳細的用法請直接看 gofight 文件 。對於 Go 語言有興趣的朋友們,可以直接參考我的 線上課程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

百度SEM竞价推广

百度SEM竞价推广

马明泽 / 电子工业出版社 / 2017-5 / 59

竞价推广已成为企业昀主要的网络营销方式,《百度SEM竞价推广:策略、方法、技巧与实战》以百度竞价推广为基础,全面阐述了整个竞价推广过程中的重要环节,涉及大量账户操作实战技巧,以及解决各类难点的方法,其中包括搜索引擎营销基础、百度搜索推广介绍、账户结构搭建技巧、关键词与创意的使用技巧、质量度优化与提升、账户工具的使用、百度推广客户端的使用、企业搜索推广方案制作、百度网盟推广、着陆页分析、效果优化与数......一起来看看 《百度SEM竞价推广》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具