iT邦幫忙

2022 iThome 鐵人賽

DAY 24
2
DevOps

Golang X DevOps系列 第 24

Day24 - Fuzzing Test v.s Unit Testing

  • 分享至 

  • xImage
  •  
  • 前面我們有寫過單元測試並說過單元測試是在幹嘛的

單元測試

  • 我們說過我們要讓程式達成我們所預期的成果
  • 我們要降低維護的成本,使用Unit Test 會使我們降低寫出 Bug 的機率
  • 這邊大概帶幾個常見到的名詞
    • SUT : 受測對象
    • MOCK : 我們預計的回傳值(Behavior Test)
    • STUB : 驗證狀態 (State Test)
func TestHomepageHandler(t *testing.T) {
	mockResponse := `{"message":"Hi, Iron Man"}`
	r := SetUpRouter()
	r.GET("/home", controller.HomepageHandler)
	req, _ := http.NewRequest("GET", "/home", nil)
	w := httptest.NewRecorder()
	r.ServeHTTP(w, req)

	responseData, _ := ioutil.ReadAll(w.Body)
	assert.Equal(t, mockResponse, string(responseData))
	assert.Equal(t, http.StatusOK, w.Code)
}
  • 拿我們前面的 Code 來看一下
  • MockResponse 就是我們預期 Server 會回傳這個 response 給我們
  • 而 SUT 就是我們的 Server

Fuzzing Test

  • Go 在 v1.18 的時候在 Test 的 Library 新增了 Fuzzing 的功能
  • 一樣是測試,那為甚麼我們要有Fuzzing Test,又跟Unit Testing有甚麼差
  • 模糊測試並不是要取代單元測試,他只是單元測試的更高階版本(武裝過後的版本)
  • 在Unit Testing 當中 MOCK 是有限的,所以不一定所有情況都能預測到,而在Fuzzing Test當中我們是提供 random 的數據

更精確的說 ,Fuzzing Test 是把重點放在程式所跑出來的行為上,讓你減少去想測試資料的問題

  • 換一個情境想,Unit Testing 就像是一個一般使用者,我餵一個正常測資給程式,然後他應該要跑出預期的正確行為 ; 而在現實生活中,Fuzzing Test 就像是駭客一樣,會去暴力破解你的系統,給一些特殊字元來規避filter,這也是為甚麼這幾年 Security 的 Fuzzing 特別盛行的原因,因為他能夠找出程式當中有漏洞的地方,如 Buffer Overflow、SQL injection...,讓程式員盡快去修補

上一篇
Day23 - Trigger CD
下一篇
Day25 - Introduce to Golang Fuzzing
系列文
Golang X DevOps30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
雷N
iT邦研究生 1 級 ‧ 2022-10-04 00:33:40

敲碗, 想聽您多講多分享Fuzzing Test的更多案例

0
json_liang
iT邦研究生 5 級 ‧ 2022-10-04 00:36:32

敲碗, 想聽您多講多分享Fuzzing Test的更多案例

我要留言

立即登入留言