1. 程式人生 > >JMeter全程實戰、效能測試實戰、分散式效能測試、真實案例分析

JMeter全程實戰、效能測試實戰、分散式效能測試、真實案例分析

測試需求描述


1、 本次測試的介面為http服務端介面

2、 介面的主要分成兩類,一類提供給查詢功能介面,一類提供儲存資料功能介面,這裡我們舉例2個儲存資料的介面,因為這兩個介面有關聯

性,比較有代表性;

儲存信用卡賬戶資訊介面:

傳入引數:

args={

"clientNo":"434343556",

"alias": "**信用卡2",

"cardName": "長城*****卡2",

"cardNo": "25622356788251",

}

傳出引數:

儲存成功:{"returnCode":"0","returnMsg":"儲存成功"}

儲存失敗:{"returnCode":"1","returnMsg":"儲存失敗"}

儲存邏輯:資料傳入進來,驗證通過,儲存到信用卡賬戶表中

儲存信用卡賬單介面:

傳入引數:

args={

"clientNo":"434343556",

"accountName": "測試",

"billDate": "08",

"billMonth": "201509",

"cardNo": "25622356788251",

"currentPayment": "欠款459.80",

"paymentDate": "2015-09-25 09:00:00",

}

傳出引數:

儲存成功:{"returnCode":"0","returnMsg":"儲存成功"}

儲存失敗:{"returnCode":"1","returnMsg":"儲存失敗"}

儲存邏輯:儲存時先去信用卡資訊表檢視clientNo對應的表是否存在,如存在則資料校驗通過,將資料儲存進入信用卡賬單表

測試分析


1 、 邏輯分析

1) 、從儲存邏輯上來看,這兩個介面明顯是有依賴關係的,所以我們先測試信用卡賬戶資訊介面,再測試儲存信用卡賬單介面

2) 、介面傳入的資料,最終是儲存到資料庫中,所以當介面返回儲存成功的時候,我們也要去對應的資料庫表中核對相應的資料

3) 、當出現儲存失敗的情況時,我們需要檢視系統的日誌,所以我們也要準備好檢視日誌的許可權和地址

2 、測試工具的準備

1) 、單個介面測試,我們使用火狐的外掛 poster

2)、多個介面測試,我們使用Jmeter進行測試

使用工具測試


1、Poster工具

2、使用Jmeter對介面測試

首先我們說一下為什麼用Poster測試後我們還要用Jmeter做介面測試,在用poster測試時候會發現的是一個介面一個介面的測試,我們每次

測試成功後的資料,在工具中是無法儲存的,再次測試的時候我們還要重新輸入測試的資料,當我們測試一個介面的時候可能感覺不明顯,但是當你

測試幾十個介面的時候,你就會發現使用Jmeter的好處,如果測試階段來說冒煙測試我們用poster,整合測試我們用Jmeter

具體步驟


1、首先郵件新增一個執行緒組,這裡我們重新命名InterfaceTest

Jmeter介面測試專案實戰

2、線上程組上新增一個Http預設請求,並配置伺服器的IP地址和傳輸編碼

Jmeter介面測試專案實戰

3、線上程組中新增一個HTTP請求,這裡我們重新命名“增加 信用卡賬戶資訊介面 ”

Jmeter介面測試專案實戰

4、配置介面請求資訊,這配置示例如下:

Jmeter介面測試專案實戰

5,在 儲存信用卡賬單介面請求,示例如下:

Jmeter介面測試專案實戰

注:由於Jmeter請求執行緒組內的請求時從第一個開始執行,所以我們將需要最先執行的請求放在前面

6、在 執行緒組上新增監聽器,察看結果樹和聚合報告

Jmeter介面測試專案實戰

7、點選啟動,執行結束後檢視,結果樹和聚合報告

Jmeter介面測試專案實戰

8、去資料庫中核對資料

大批量資料製造


思路:

1、可引數化的引數, 儲存信用卡賬戶資訊介面( clientNo,cardNo ),儲存信用卡賬單介面( clientNo,cardNo, billMonth,paymentDate)

2、兩個介面的依賴關係,儲存信用卡賬單介面( clientNo,cardNo)要和 信用卡賬戶資訊介面( clientNo,cardNo )的兩個相同,也就是說這兩個

要用一個引數,且還不能重複

根據上面兩個介面的特點,( clientNo,cardNo) 我們 選取使用計數器,每迴圈一次計數器加1,那麼我們將執行緒組設定迴圈執行1萬

次; billMonth,paymentDate,這兩個日期我們是使用隨機函式${__Random(1,9,)},將月份引數化;

3、線上程組上建立計數器,配置如下:

Jmeter介面測試專案實戰

Jmeter介面測試專案實戰

4、引用計數器和隨機函式

信用卡賬戶介面傳入引數

args={

"clientNo":"${add}434343556",

"alias": "**信用卡2",

"cardName": "長城*****卡2",

"cardNo": "${add}25622356788251",

}

賬單介面傳入引數

args={

"clientNo":"${add}434343556",

"accountName": "測試",

"billDate": "08",

"billMonth": "20150${__Random(1,9,)}",

"cardNo": "${add}25622356788251",

"currentPayment": "欠款459.80",

"paymentDate": "2015-0${__Random(1,9,)}-25 09:00:00",

}

5、設定執行緒組迴圈測試,點選執行

Jmeter介面測試專案實戰

簡單的效能測試


當前測試環境下,TPS峰值為317.6次/秒。根據業務預期的客戶日常訪問量50次每分鐘,按照每客戶訪問一次呼叫全部13個介面計算,則業務預期為50*13=650次/分=10.83次/秒。測試結果表明系統的業務處理能力符合業務預期。

由響應時間來看,儲存XXXX這個介面的響應時間明顯較慢,在50執行緒併發的時候,90%響應時間為7.7秒,而75執行緒併發的時候則達到了24秒,建議進行優化。

由點選率,響應時間,TPS統計圖可知,整個穩定性測試期間,系統反應很穩定。

詳細測試結果:

1. 負載測試

場景執行測試時間:10分鐘

Jmeter介面測試專案實戰

2. 穩定性測試

場景執行時間:1小時

Jmeter介面測試專案實戰