用 htest 給 go 寫 http 測試
最近在寫 rady 時候,想整合一個 http 測試庫,一搜發現 go 自帶一個 httptest
然後給出的例子是這樣的
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestHealthCheckHandler(t *testing.T) {
handler := func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "<html><body>Hello World!</body></html>")
}
req := httptest.NewRequest("GET", "http://example.com/foo", nil)
w := httptest.NewRecorder()
handler(w, req)
resp := w.Result()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(resp.StatusCode)
fmt.Println(resp.Header.Get("Content-Type"))
fmt.Println(string(body))
}
emmm,總感覺寫了一些不必要的程式碼 於是我把 httptest 和 testify/assert 封裝了一下,寫了 htest 專案
它用起來大概長這樣,感受一下
package myapp
import (
"io"
"net/http"
)
func NameHandler(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, `{"name": "hexi"}`)
}
// example/basic_mock_client_test.go
package myapp
import (
"testing"
"github.com/Hexilee/htest"
)
func TestNameHandlerFunc(t *testing.T) {
htest.NewClient(t).
ToFunc(NameHandler).
Get("").
Test().
StatusOK(). // Assert Status Code
JSON().
String("name", "hexi") // Assert response data as JSON
}
也可以測試 http.Handler (http.ServeMux, echo.Echo 等 )
*http.ServeMux
// example/basic_mock_client.go
package myapp
import (
"io"
"net/http"
)
var (
Mux *http.ServeMux
)
func init() {
Mux = http.NewServeMux()
Mux.HandleFunc("/name", NameHandler)
}
func NameHandler(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, `{"name": "hexi"}`)
}
// example/basic_mock_client_test.go
package myapp
import (
"testing"
"github.com/Hexilee/htest"
)
func TestNameHandler(t *testing.T) {
htest.NewClient(t).
To(Mux).
Get("/name").
Test().
StatusOK().
JSON().
String("name", "hexi")
}
*echo.Echo
// example/basic_mock_client.go
package myapp
import (
"io"
"github.com/labstack/echo"
)
var (
server *echo.Echo
)
func init() {
server = echo.New()
server.GET("/name", NameHandlerEcho)
}
func NameHandlerEcho(c echo.Context) error {
return c.String(http.StatusOK, `{"name": "hexi"}`)
}
// example/basic_mock_client_test.go
package myapp
import (
"testing"
"github.com/Hexilee/htest"
)
func TestNameHandlerEcho(t *testing.T) {
htest.NewClient(t).
To(server).
Get("/name").
Test().
StatusOK().
JSON().
String("name", "hexi")
}
更多功能看 htest
相關文章
- 寫給測試小白:怎麼快速找到bug?怎麼寫測試用例?
- 用Go語言寫HTTP中介軟體GoHTTP
- Go 單元測試之HTTP請求與API測試GoHTTPAPI
- 深入學習用 Go 編寫 HTTP 伺服器GoHTTP伺服器
- 如何寫好測試用例以及go單元測試工具testify簡單介紹Go
- 寫給測試同學的福利 | 招募
- Go測試開發(一) 怎麼寫Go程式碼Go
- 如何在 Go 專案內寫測試Go
- postman寫測試用例Postman
- [轉載]用 Go 寫一個輕量級的 ldap 測試工具GoLDA
- 怎樣寫測試用例?
- 測試用例編寫方法
- 給你講講編寫“高質量軟體測試用例”祕訣
- 使用go優雅地撰寫單元測試Go
- Go Web 程式設計入門--深入學習用 Go 編寫 HTTP 伺服器GoWeb程式設計HTTP伺服器
- 介面測試用例編寫和測試關注點
- 萬能測試用例及測試用例編寫方法(待更新)
- go test 測試用例那些事(二) mockGoMock
- 寫好測試,提升應用質量
- IDEA中用junit寫基本測試用例Idea
- 如何優雅編寫測試用例
- 跟我一起學Go系列:從寫測試用例開始仗劍走天涯Go
- 為程式碼編寫穩定的單元測試 [Go]Go
- 如何編寫介面測試用例?測試工程師必備技能!工程師
- Go語言HTTP請求流式寫入bodyGoHTTP
- 寫給移動端測試小白的一封信
- 軟體測試用例編寫(含思路)
- Go單元測試Go
- 【GO】MAC安裝和測試GoGoMac
- Go測試技術分享(一):場景化介面Case編寫Go
- 嘗試用go寫一個音樂搜尋的包Go
- 測試測試用
- Go 單元測試之mock介面測試GoMock
- 8年測試工程師+面試官——寫給求職心切的求職者工程師面試求職
- 從零手寫實現 nginx-33-http_proxy 代理驗證測試NginxHTTP
- Go 編寫 Web 應用GoWeb
- postman進行http介面測試PostmanHTTP
- HTTP介面測試實踐(一)HTTP
- http tcp udp json 接收測試HTTPTCPUDPJSON