用 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
相關文章
- Go 單元測試之HTTP請求與API測試GoHTTPAPI
- 用Go語言寫HTTP中介軟體GoHTTP
- 如何寫好測試用例以及go單元測試工具testify簡單介紹Go
- 寫給精明Java開發者的測試技巧Java
- 寫給測試同學的福利 | 招募
- 如何在 Go 專案內寫測試Go
- Go測試開發(一) 怎麼寫Go程式碼Go
- postman寫測試用例Postman
- 深入學習用 Go 編寫 HTTP 伺服器GoHTTP伺服器
- 寫給一名測試工程師工程師
- [轉載]用 Go 寫一個輕量級的 ldap 測試工具GoLDA
- 【轉】測試用例編寫(功能測試框架)框架
- 使用go優雅地撰寫單元測試Go
- 給你講講編寫“高質量軟體測試用例”祕訣
- 介面測試用例編寫和測試關注點
- go test 測試用例那些事(二) mockGoMock
- 【效能測試】使用ab做Http效能測試HTTP
- Go Web 程式設計入門--深入學習用 Go 編寫 HTTP 伺服器GoWeb程式設計HTTP伺服器
- 【轉】寫給想學習自動化測試的新人
- 熊志男:寫給一名測試工程師工程師
- 寫好測試,提升應用質量
- 用Junit Framework編寫單元測試Framework
- 為程式碼編寫穩定的單元測試 [Go]Go
- 用Venus.js給JavaScript做單元測試JSJavaScript
- Go單元測試Go
- 跟我一起學Go系列:從寫測試用例開始仗劍走天涯Go
- Go 單元測試之mock介面測試GoMock
- 【GO】MAC安裝和測試GoGoMac
- 如何編寫介面測試用例?測試工程師必備技能!工程師
- 軟體測試用例編寫(含思路)
- 用Junit Framework編寫單元測試 (轉)Framework
- Go測試技術分享(一):場景化介面Case編寫Go
- 嘗試用go寫一個音樂搜尋的包Go
- Go語言HTTP請求流式寫入bodyGoHTTP
- postman進行http介面測試PostmanHTTP
- HTTP介面測試實踐(一)HTTP
- http 效能測試 wrk使用教程HTTP
- HTTP Slow Attack測試工具SlowHTTPTestHTTP