[英]Proper testing of http routes in go
我有5個端點,它們具有諸如GET,POST和DELETE之類的方法來進行測試。 我使用go的內置測試包編寫了測試用例。 我擔心我遺漏了一些我沒有想到的案例。我已經在代碼審查中發布了要審查的測試用例,但沒有得到任何回應。 我也關注了這篇文章, 在golang中測試HTTP路由 。 所有這些測試用例都在檢查響應代碼。
問題是,我的大多數測試用例都遵循類似的模式,即以不同的格式發布數據並檢查響應代碼。 我強烈感覺我缺少將API推入產品時會破壞我的API的東西。 我需要一些有關測試這些路線的見識,以便可以自信地將api推入產品。
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
}
}
}
我喜歡這樣:
建立持續集成。 如果您的項目是開源的,則可以使用Travis CI之類的服務-安裝非常簡單。 這可以幫助您查看更改如何影響代碼。
設置代碼測試范圍。 它使您可以查看測試覆蓋了哪些源代碼行,哪些沒有覆蓋以及在什么地方可能出現錯誤。 當然,代碼覆蓋率工具不是萬能葯。 並且,如果選中了該行,並不表示絕對正確,並且在其他輸入下也不會失敗。 但這有助於維護良好的代碼並查找錯誤。 對於開源,您可以使用coveralls.io。 有一個特殊的goveralls插件。
為了解決上述問題,您可以使用所謂的模糊測試-具有隨機輸入的探索性測試來找到根本原因。 有標准的https://golang.org/pkg/testing/quick/和非標准的軟件包https://github.com/dvyukov/go-fuzz 。
然后我嘗試測試,它們既是正面的也是負面的。 我嘗試檢查錯誤,超時,錯誤回復的情況。
對於我的測試,我像往常一樣使用客戶端http
這樣的httptest
包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.