就是個 BLOG
JMeter 情境筆記
記錄自己常用的 JMeter 設定情境 常用元件 Test Plan 設定變數 (可以 call java func) 若希望一個做完 Thread Group 才做下一個 Thread Group 可以勾選 (Run Thread Groups consecutively) Thread Group 需要多少個 User (thread) 每個 thread 持續時間, Ramp-up 時間,用於模擬 User 逐漸上升的狀況 設定執行次數 (Loop Controller 也可以達成相同的效果) 例: 每個 User 持續 20 秒,並在 5 秒達到總共 10 個 User, 因 Loop Count 設定 infinite 時,就是看 User 的持續時間, 這邊就是跑 20 秒,不管次數了,若有設定 count 就是跑幾次結束。 Loop Controller 設定次數 Transaction Controller 用於需要依序步驟的處理,常見案例:登入拿 token ,根據取得 token 呼叫下一支 API 如果啟用 Generate parent sample ,報表顯示上會將同一個 Transaction group by 一起,比較好閱讀 HTTP Request 常搭配 HTTP Header Manager JSON Extractor 放在 Http Requset 之後或裡面,把 JSON Response 需要的值轉成變數在後面使用 View Results Tree 報表,可以細看每次的 req/res 結果 根據放的區塊不同,記錄的範圍不一樣 例:你呼叫兩隻 API,若你想分開看,就在各自的 HTTP Request 裡面新增,這樣就會有獨立的紀錄。大多數的元件邏輯都相同。 Aggregate Report、Summary Report 常看的欄位 P90:90% User 的位於的 Response 區間 Throughput:rps (Request per Second) 每秒的承載量,若表示該 API 能承受的請求量,越高越好。 Error Summary Report 我會放在最外層,這樣可以大概看一下,多個 testcase 跑完,整體的狀況 Graph Results、Aggregate Graph 可以用來協助確認在哪個時間點,API 速率有明顯變化 Assertion 檢查用,確認回傳是否符合預期 情境 想要知道 API 在 10 個 user 下 qps 的狀況 設定如下 - Thread Group - Http Request - View Result Tree - Aggregate Report 看 Report 中 P90 、Error、Throughput...
Gin http request test 筆記
gin 思路 參考相關文件、 repo ,在設計上的層級類似下列這樣 server => service (interface) => repository (interface) 將 interface 開出來,實作完之後一路使用注入的逐層掛進去。 開出 interface 除了規範 method 之外,還能在後續針對測試時, 方便撰寫 mock 注入。 server | - service | - repository 略 測試 以使用 gin 為例 get const wantGetMsg = "mock hello eric" func TestHelloByName(t *testing.T) { gin.SetMode(gin.TestMode) r := gin.Default() // di mock service service := MockHelloService{} server := NewHelloServer(service) // mount router r.GET("/hello/:name", server.SayHello) rq := httptest.NewRequest(http.MethodGet, "/hello/eric", nil) rw := httptest....
Gorm Sqlite 測試相關問題
failed to initialize database 原因 golang + gorm 搭配 sqlite 練習測試的時候發現, 把 db 用 go-sqlmock 的替換掉後,在跑測試時會噴 failed to initialize database, got error all expectations were already fulfilled, call to Query 'select sqlite_version()' mysql 解法 如果 db 是用 mysql 的話,只要這樣設定 gDB, err := gorm.Open(mysql.New(mysql.Config{ Conn: DB, SkipInitializeWithVersion: true, }), &gorm.Config{}) 細節可以參考 source code sqlite 暫解 不過在 sqlite 上面看 code 是沒有開這個參數 source code 因為只是練習,所以我這邊先直接寫一個新的 MockDialector 把它掛進來, 然後把 sqlite.Dialector() 複製過來後把 version 不需要的地方拿掉。 實際上應該把相關的 code 都看過,確認是不是有必要開這個參數出來,然後發個 issue , 如果沒問題 pr 做出來之類的?...
Github 未來將支援顯示 Mermaid 圖表
source: https://github.com/github/roadmap/issues/372 之前在 hackmd 、 gitlab 印象都可以直接畫 flowchart, 剛剛在 github 上面畫,發現沒反應, 查了一下在 github roadmap 有記錄,看樣子未來會支援了,
資料密集型應用系統設計 (1)
第一章 可靠性,可擴展性,可維護性的應用系統 背景 目前多數的系統,屬於資料密集型 (data-intensive),著重於資料的量級、複雜度、快速變化等狀況延伸的問題。 主要組成為:資料庫、 cache 、 search index 、 steam processing 、 batch processing。 會根據情境來設計出相對合適的架構。 資料系統思維 書中將 Redis 、 Apache Kafka 等非 DB 也歸類在資料系統下的原因為,這些也根據情境提供了類似的功能使用, 不再是以傳統的角度,去分類這些服務。會透過組合這些服務,設計出系統。 三個思路 可靠 p.6 可擴展 p.10 twitter tweets 優化 user 觀看 feed 時,會先將關注的人的 feed 拉出合併,但在後續量級提昇造成查詢負擔。 user 增加一個 cache feed ,當有新 tweet 時,放入到對應的 cache feed。 這邊最後的方式,根據 user 的 關注的人,來做兩種方式混合使用。 Amazon SLO 用 P99.9 可維護 p.18