異常測試按性質分爲應用層的業務邏輯異常測試、系統硬件/網絡/文件/數據庫/緩存/中間件異常測試,其中包含了許多的場景(單機、分佈式),但全部的場景均和這兩項有直接的關係。前端
業務邏輯異常測試體如今當上述的第二種異常發生時,是否能根據業務的須要或者架構的設計作出合理的業務處理反應,這是創建在第二種異常測試之上的,所以異常測試的關係也已經很是明確了,第一種測試根據業務的不一樣,範圍和流程有不肯定性,第二種測試則是在一些明確的規則和約定下進行。數據庫
當架構演進到分佈式,每每在測試過程當中給人無從下手的錯覺,尤爲在異常測試方面,其實否則,前面提到的單機和分佈式看似是兩種類型,單獨看,單機的異常影響範圍可能會小一些,但事實上他們在分佈式環境中會產生互相影響:後端
單機:從系統層面來講就是指單一進程,從異常測試角度來看,影響範圍發生在線程或進程級別,線程級別的異常可能致使線程的結束,且沒有啓動新的線程來代替,進程級別可能致使線程鎖的不釋放,致使其餘線程都掛起等待。緩存
分佈式:分佈式是一個協同工做的應用環境,這種異常每每容易引發其餘進程的掛起,或者數據庫、緩存、中間件的問題,主要有網絡調用所佔用的資源、數據庫訪問等。服務器
單機的異常若是處理不當,會引發整個環境中的資源不可用,從而致使環境中的每一個單機都出現異常。根據上述的一些概念,能夠列出異常測試中最重要的一些場景:網絡
系統資源:cpu、內存使用率太高,可否能將請求切到到資源利用率低的服務器上;架構
數據量大小和形式:數據到底應該注入多少知足後續的壓力測試,各服務對數據格式的要求和轉換;jvm
文件讀寫:分佈式
本地寫:對同一個文件打開的的數量過多,或者只打開不關閉,致使文件句柄數超過系統閾值;測試
本地讀:打開一個不存在的文件,是否有對應處理邏輯;
網絡存儲:服務不可用;
應用鏈接:
短鏈接:請求方未設置超時時間,長時間等待響應方的響應,從而致使請求的大量堆積,線程池的處理線程被用完,致使大量新的用戶請求被拒絕;
長鏈接:在網絡出現異常情況後,斷開的鏈接是否能從新創建,請求方如拿到失效的鏈接,是否能處理異常;
數據庫:
數據源切換:若是所切換的數據源鏈接處於不可用狀態或宕機時,是否會長時間等待或重試;
表鎖、行鎖:長時間更新操做,致使其餘對此表的修改操做被掛起;
慢SQL的預防:經過對SQL的提早分析,來預防慢SQL相關的問題,及時告知DBA進行優化;
緩存:
key的失效:在獲取不到key後,是否能正常處理;
鎖的釋放:申請到鎖的一方若是意外重啓,是否能在重啓後釋放鎖;
緩存服務不可用;
消息中間件:
消息記錄表切換:是否丟失;
清除消息記錄:是否丟失記錄;
服務發現:
服務不可用:是否有其餘處理措施;
單臺不可用:是否能從新選舉,從新創建鏈接;
應用容器:
鏈接數:配置優化;
請求處理線程:配置優化;
jvm堆棧大小:參數優化;
前端靜態化頁面:
後端服務不可用;
緩存不可用;
數據庫中間件:
數據訪問是否在錯誤發生後進行了正確的轉移;
對於上層業務來講是否進行了正確的向下隔離;