異常測試是有別于功能測試和性能測試又一種測試類型,通過異常測試,可以發(fā)現(xiàn)由于系統(tǒng)異常、依賴服務(wù)異常、應(yīng)用本身異常等原因引起的性能瓶頸,提高系統(tǒng)的穩(wěn)定性。
目的
在日常測試中,由于排期緊張以及異常情況的難以模擬,異常測試通常被大家所忽略或者放棄。只要功能沒問題,就可以上線。但是線上情況千奇百怪,服務(wù)器宕機、用戶走到代碼的犄角旮旯、三方服務(wù)掛逼等情況無可避免的發(fā)生,因此對于一個系統(tǒng)的健壯性和穩(wěn)定性,異常測試不可或缺,但之前的異常測試手段基本上都是讓研發(fā)預(yù)留bug、注釋代碼、到測試機上殺死服務(wù)等,代價較大,且有可能帶著bug上線。降低異常測試的門檻,就是異常測試平臺搭建的目的。
工具選型
目前異常測試工具有很多,比如模擬網(wǎng)絡(luò)異常的tc(Traffic Control)、netem和iptables,模擬代碼注入故障的jvm-sandbox工具,以及在生產(chǎn)環(huán)境隨機模擬各種故障的Chao Monkey框架等等,經(jīng)過了多次調(diào)研,秉持著“拿來主義”的原則,最終采用了“集大成”的chaosblade。chaosblade提供了cpu、磁盤、內(nèi)存、網(wǎng)絡(luò)、jvm等異常的注入功能。chaosblade的jvm異常注入能力底層是基于jvm-sandbox,提供了無侵入,運行aop的能力,使用起來比jvm-sandbox更加簡單。同時,它還提供了server模式,可以暴露web服務(wù),上層可以通過http進行調(diào)用。
方案
將chaosblade服務(wù)在目標服務(wù)器上啟動,然后springboot服務(wù)進行調(diào)用,springboot再對chaosblade再進行一次封裝(沒有什么是通過一次封裝解決不了的,如果有,那就兩次),簡化chaosblade的使用和對數(shù)據(jù)進行存儲,以及一些針對我司的個性化需求,再通過前端,將參數(shù)界面化給用戶,用戶通過一些簡單的填寫,就可以進行相應(yīng)的異常注入。

后端實現(xiàn)

遇到無法編譯的lib包解決辦法:
git上下載chaosblade-exec-jvm源碼,在查找需要編譯的類那里將無法打開的lib包直接跳過即可

前端頁面
未來預(yù)期
1、提高異常注入穩(wěn)定性,目前由于chaosblade本身bug,首次注入基本上都會失敗,以后可以加入主動重試和存在取消功能
2、將前端的很多輸入框修改為選擇項,進一步提高效率
3、加入重試和編輯功能
4、提供動圖mock能力