golang 故障模擬工具failpoint的使用

2021-09-29 16:19:06 字數 4048 閱讀 4527

測試是功能上線之前的重要環節。

測試過程中,要盡量覆蓋各種場景。故障情況或異常情況下的場景測試,也是必不可少的。

如何模擬故障呢?

在freebsd 中, failpoints經常用來模擬故障。

在golang,也有failpoint的實現,就是目前pingcap 公司的開源專案failpoint.

下面介紹golang中的failpoint的實現。

failpoint-ctl build successfully :-) !注意:仔細確認這些步驟。如果搞錯,會出現無法轉換**的情況。

編譯後,生成可執行檔案failpoint-ctl:

ll bin

total 6840

-rwxr-xr-x 1 lanyang staff 3.3m 11 15 17:41 failpoint-ctl

**結構如下:

cd $gopath/src

mkdir fp_example

cd fp_example

# tree ./

./├── fruit

│   └── banana.go

├── main.go

└── util

└── orange.go

其中,main.go檔案內容:

}注入乙個panic。

}再次注入乙個panic。

}再次注入乙個panic。

$gopath/src/github.com/pingcap/failpoint/bin/failpoint-ctl enable
**轉換之後,看下**檔案結構:

tree ./

./├── fruit

│   ├── banana.go

│   ├── banana.go__failpoint_stash__

│   └── binding__failpoint_binding__.go

├── hot_fruit

│   ├── binding__failpoint_binding__.go

│   ├── orange.go

│   └── orange.go__failpoint_stash__

├── main.go

2 directories, 10 files

可以看到多了幾個檔案。

如果執行disable,這些檔案又會消失。

$gopath/src/github.com/pingcap/failpoint/bin/failpoint-ctl disable
使用裝換之後的**,進行編譯:

go build -o ****** main.go
生成可執行檔案******.

正常執行:

./******

orange....

banana....

main end

觸發bananapanic故障執行:

go_failpoints="fp_example/fruit/bananapanic=return(true)" ./******

orange....

banana....

panic: banana failpoint triggerd

goroutine 1 [running]:

fp_example/fruit.banana()

/users/lanyang/workspace/go_projects/src/fp_example/fruit/banana.go:12 +0x10e

main.main()

/users/lanyang/workspace/go_projects/src/fp_example/main.go:13 +0x2c

其中,fp_example/fruit是package名稱,bananapanic是注入的故障名稱。

goroutine 1 [running]:

main.main()

/users/lanyang/workspace/go_projects/src/fp_example/main.go:11 +0x22

觸發orangepanic故障執行:

go_failpoints="fp_example/hot_fruit/orangepanic=return(true)" ./******

orange....

panic: orange failpoint triggerd

goroutine 1 [running]:

fp_example/hot_fruit.orange()

/users/lanyang/workspace/go_projects/src/fp_example/hot_fruit/orange.go:12 +0x10e

main.main()

/users/lanyang/workspace/go_projects/src/fp_example/main.go:12 +0x27

pingcap/failpoint

golang failpoint 的設計與實現

藍鯨故障模擬

登入平台頁面時,每次都需要重新登入。故障模擬 vim data bkce open paas login conf default.py 修改bk cookie age時間為 0 0 1 故障觸發 bk cookie name為cookie名稱,可理解為key。故障修復 這次造成無資料上報的原因為 ...

模擬MBR故障修復

1 準備乙個新硬碟,然後進行分割槽,分乙個1g大小的主分割槽,然後進行格式化 然後在掛載 1 分割槽 root localhost fdisk dev sdb 歡迎使用 fdisk util linux 2.23.2 更改將停留在記憶體中,直到您決定將更改寫入磁碟。使用寫入命令前請三思。device...

erlang 故障排查工具

系統級別perf top,dstat tam,vtune 都能很好分析beam 瓶頸,本文主要erlang 級別排查 1.反編譯 確認線上執行 是否正確,reltools沒掌握好,公升級偶爾出現問題 decompile mod beam lib chunks code which mod abstr...